Skip to content

Commit 0e7fb69

Browse files
committedDec 22, 2017
bufPrint returns an error
1 parent ea805c5 commit 0e7fb69

File tree

2 files changed

+19
-13
lines changed

2 files changed

+19
-13
lines changed
 

‎std/fmt/index.zig‎

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -371,6 +371,10 @@ test "fmt.parseInt" {
371371
assert(%%parseInt(i32, "-10", 10) == -10);
372372
assert(%%parseInt(i32, "+10", 10) == 10);
373373
assert(if (parseInt(i32, " 10", 10)) |_| false else |err| err == error.InvalidChar);
374+
assert(if (parseInt(i32, "10 ", 10)) |_| false else |err| err == error.InvalidChar);
375+
assert(if (parseInt(u32, "-10", 10)) |_| false else |err| err == error.InvalidChar);
376+
assert(%%parseInt(u8, "255", 10) == 255);
377+
assert(if (parseInt(u8, "256", 10)) |_| false else |err| err == error.Overflow);
374378
}
375379

376380
pub fn parseUnsigned(comptime T: type, buf: []const u8, radix: u8) -> %T {
@@ -412,14 +416,16 @@ const BufPrintContext = struct {
412416
remaining: []u8,
413417
};
414418

419+
error BufferTooSmall;
415420
fn bufPrintWrite(context: &BufPrintContext, bytes: []const u8) -> %void {
421+
if (context.remaining.len < bytes.len) return error.BufferTooSmall;
416422
mem.copy(u8, context.remaining, bytes);
417423
context.remaining = context.remaining[bytes.len..];
418424
}
419425

420-
pub fn bufPrint(buf: []u8, comptime fmt: []const u8, args: ...) -> []u8 {
426+
pub fn bufPrint(buf: []u8, comptime fmt: []const u8, args: ...) -> %[]u8 {
421427
var context = BufPrintContext { .remaining = buf, };
422-
%%format(&context, bufPrintWrite, fmt, args);
428+
%return format(&context, bufPrintWrite, fmt, args);
423429
return buf[0..buf.len - context.remaining.len];
424430
}
425431

@@ -475,31 +481,31 @@ test "fmt.format" {
475481
{
476482
var buf1: [32]u8 = undefined;
477483
const value: ?i32 = 1234;
478-
const result = bufPrint(buf1[0..], "nullable: {}\n", value);
484+
const result = %%bufPrint(buf1[0..], "nullable: {}\n", value);
479485
assert(mem.eql(u8, result, "nullable: 1234\n"));
480486
}
481487
{
482488
var buf1: [32]u8 = undefined;
483489
const value: ?i32 = null;
484-
const result = bufPrint(buf1[0..], "nullable: {}\n", value);
490+
const result = %%bufPrint(buf1[0..], "nullable: {}\n", value);
485491
assert(mem.eql(u8, result, "nullable: null\n"));
486492
}
487493
{
488494
var buf1: [32]u8 = undefined;
489495
const value: %i32 = 1234;
490-
const result = bufPrint(buf1[0..], "error union: {}\n", value);
496+
const result = %%bufPrint(buf1[0..], "error union: {}\n", value);
491497
assert(mem.eql(u8, result, "error union: 1234\n"));
492498
}
493499
{
494500
var buf1: [32]u8 = undefined;
495501
const value: %i32 = error.InvalidChar;
496-
const result = bufPrint(buf1[0..], "error union: {}\n", value);
502+
const result = %%bufPrint(buf1[0..], "error union: {}\n", value);
497503
assert(mem.eql(u8, result, "error union: error.InvalidChar\n"));
498504
}
499505
{
500506
var buf1: [32]u8 = undefined;
501507
const value: u3 = 0b101;
502-
const result = bufPrint(buf1[0..], "u3: {}\n", value);
508+
const result = %%bufPrint(buf1[0..], "u3: {}\n", value);
503509
assert(mem.eql(u8, result, "u3: 5\n"));
504510
}
505511

@@ -509,28 +515,28 @@ test "fmt.format" {
509515
{
510516
var buf1: [32]u8 = undefined;
511517
const value: f32 = 12.34;
512-
const result = bufPrint(buf1[0..], "f32: {}\n", value);
518+
const result = %%bufPrint(buf1[0..], "f32: {}\n", value);
513519
assert(mem.eql(u8, result, "f32: 1.23400001e1\n"));
514520
}
515521
{
516522
var buf1: [32]u8 = undefined;
517523
const value: f64 = -12.34e10;
518-
const result = bufPrint(buf1[0..], "f64: {}\n", value);
524+
const result = %%bufPrint(buf1[0..], "f64: {}\n", value);
519525
assert(mem.eql(u8, result, "f64: -1.234e11\n"));
520526
}
521527
{
522528
var buf1: [32]u8 = undefined;
523-
const result = bufPrint(buf1[0..], "f64: {}\n", math.nan_f64);
529+
const result = %%bufPrint(buf1[0..], "f64: {}\n", math.nan_f64);
524530
assert(mem.eql(u8, result, "f64: NaN\n"));
525531
}
526532
{
527533
var buf1: [32]u8 = undefined;
528-
const result = bufPrint(buf1[0..], "f64: {}\n", math.inf_f64);
534+
const result = %%bufPrint(buf1[0..], "f64: {}\n", math.inf_f64);
529535
assert(mem.eql(u8, result, "f64: Infinity\n"));
530536
}
531537
{
532538
var buf1: [32]u8 = undefined;
533-
const result = bufPrint(buf1[0..], "f64: {}\n", -math.inf_f64);
539+
const result = %%bufPrint(buf1[0..], "f64: {}\n", -math.inf_f64);
534540
assert(mem.eql(u8, result, "f64: -Infinity\n"));
535541
}
536542
}

‎std/os/path.zig‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1012,7 +1012,7 @@ pub fn real(allocator: &Allocator, pathname: []const u8) -> %[]u8 {
10121012
defer os.close(fd);
10131013

10141014
var buf: ["/proc/self/fd/-2147483648".len]u8 = undefined;
1015-
const proc_path = fmt.bufPrint(buf[0..], "/proc/self/fd/{}", fd);
1015+
const proc_path = %%fmt.bufPrint(buf[0..], "/proc/self/fd/{}", fd);
10161016

10171017
return os.readLink(allocator, proc_path);
10181018
},

0 commit comments

Comments
 (0)