diff options
| author | Josh Wolfe <thejoshwolfe@gmail.com> | 2017-12-22 00:49:17 -0700 |
|---|---|---|
| committer | Josh Wolfe <thejoshwolfe@gmail.com> | 2017-12-22 00:52:01 -0700 |
| commit | 0e7fb69bea4d2b50ab352b71de87a563b57a645a (patch) | |
| tree | 4d0222c13dbfff5851af1875778401bb860dc4b6 /std | |
| parent | ea805c5fe7a8e24597fcd59f064efc2a7dca3859 (diff) | |
| download | zig-0e7fb69bea4d2b50ab352b71de87a563b57a645a.tar.gz zig-0e7fb69bea4d2b50ab352b71de87a563b57a645a.zip | |
bufPrint returns an error
Diffstat (limited to 'std')
| -rw-r--r-- | std/fmt/index.zig | 30 | ||||
| -rw-r--r-- | std/os/path.zig | 2 |
2 files changed, 19 insertions, 13 deletions
diff --git a/std/fmt/index.zig b/std/fmt/index.zig index 53fd085488..fef968a1d5 100644 --- a/std/fmt/index.zig +++ b/std/fmt/index.zig @@ -371,6 +371,10 @@ test "fmt.parseInt" { assert(%%parseInt(i32, "-10", 10) == -10); assert(%%parseInt(i32, "+10", 10) == 10); assert(if (parseInt(i32, " 10", 10)) |_| false else |err| err == error.InvalidChar); + assert(if (parseInt(i32, "10 ", 10)) |_| false else |err| err == error.InvalidChar); + assert(if (parseInt(u32, "-10", 10)) |_| false else |err| err == error.InvalidChar); + assert(%%parseInt(u8, "255", 10) == 255); + assert(if (parseInt(u8, "256", 10)) |_| false else |err| err == error.Overflow); } pub fn parseUnsigned(comptime T: type, buf: []const u8, radix: u8) -> %T { @@ -412,14 +416,16 @@ const BufPrintContext = struct { remaining: []u8, }; +error BufferTooSmall; fn bufPrintWrite(context: &BufPrintContext, bytes: []const u8) -> %void { + if (context.remaining.len < bytes.len) return error.BufferTooSmall; mem.copy(u8, context.remaining, bytes); context.remaining = context.remaining[bytes.len..]; } -pub fn bufPrint(buf: []u8, comptime fmt: []const u8, args: ...) -> []u8 { +pub fn bufPrint(buf: []u8, comptime fmt: []const u8, args: ...) -> %[]u8 { var context = BufPrintContext { .remaining = buf, }; - %%format(&context, bufPrintWrite, fmt, args); + %return format(&context, bufPrintWrite, fmt, args); return buf[0..buf.len - context.remaining.len]; } @@ -475,31 +481,31 @@ test "fmt.format" { { var buf1: [32]u8 = undefined; const value: ?i32 = 1234; - const result = bufPrint(buf1[0..], "nullable: {}\n", value); + const result = %%bufPrint(buf1[0..], "nullable: {}\n", value); assert(mem.eql(u8, result, "nullable: 1234\n")); } { var buf1: [32]u8 = undefined; const value: ?i32 = null; - const result = bufPrint(buf1[0..], "nullable: {}\n", value); + const result = %%bufPrint(buf1[0..], "nullable: {}\n", value); assert(mem.eql(u8, result, "nullable: null\n")); } { var buf1: [32]u8 = undefined; const value: %i32 = 1234; - const result = bufPrint(buf1[0..], "error union: {}\n", value); + const result = %%bufPrint(buf1[0..], "error union: {}\n", value); assert(mem.eql(u8, result, "error union: 1234\n")); } { var buf1: [32]u8 = undefined; const value: %i32 = error.InvalidChar; - const result = bufPrint(buf1[0..], "error union: {}\n", value); + const result = %%bufPrint(buf1[0..], "error union: {}\n", value); assert(mem.eql(u8, result, "error union: error.InvalidChar\n")); } { var buf1: [32]u8 = undefined; const value: u3 = 0b101; - const result = bufPrint(buf1[0..], "u3: {}\n", value); + const result = %%bufPrint(buf1[0..], "u3: {}\n", value); assert(mem.eql(u8, result, "u3: 5\n")); } @@ -509,28 +515,28 @@ test "fmt.format" { { var buf1: [32]u8 = undefined; const value: f32 = 12.34; - const result = bufPrint(buf1[0..], "f32: {}\n", value); + const result = %%bufPrint(buf1[0..], "f32: {}\n", value); assert(mem.eql(u8, result, "f32: 1.23400001e1\n")); } { var buf1: [32]u8 = undefined; const value: f64 = -12.34e10; - const result = bufPrint(buf1[0..], "f64: {}\n", value); + const result = %%bufPrint(buf1[0..], "f64: {}\n", value); assert(mem.eql(u8, result, "f64: -1.234e11\n")); } { var buf1: [32]u8 = undefined; - const result = bufPrint(buf1[0..], "f64: {}\n", math.nan_f64); + const result = %%bufPrint(buf1[0..], "f64: {}\n", math.nan_f64); assert(mem.eql(u8, result, "f64: NaN\n")); } { var buf1: [32]u8 = undefined; - const result = bufPrint(buf1[0..], "f64: {}\n", math.inf_f64); + const result = %%bufPrint(buf1[0..], "f64: {}\n", math.inf_f64); assert(mem.eql(u8, result, "f64: Infinity\n")); } { var buf1: [32]u8 = undefined; - const result = bufPrint(buf1[0..], "f64: {}\n", -math.inf_f64); + const result = %%bufPrint(buf1[0..], "f64: {}\n", -math.inf_f64); assert(mem.eql(u8, result, "f64: -Infinity\n")); } } diff --git a/std/os/path.zig b/std/os/path.zig index a42ebb3433..59e9a53027 100644 --- a/std/os/path.zig +++ b/std/os/path.zig @@ -1012,7 +1012,7 @@ pub fn real(allocator: &Allocator, pathname: []const u8) -> %[]u8 { defer os.close(fd); var buf: ["/proc/self/fd/-2147483648".len]u8 = undefined; - const proc_path = fmt.bufPrint(buf[0..], "/proc/self/fd/{}", fd); + const proc_path = %%fmt.bufPrint(buf[0..], "/proc/self/fd/{}", fd); return os.readLink(allocator, proc_path); }, |
