Skip to content

Commit 854f90a

Browse files
tgschultzandrewrk
authored andcommittedJun 10, 2018
Added C string support to fmt by using "{s}". The format string requirement is for saftey. (#1092)
·
0.15.20.3.0
1 parent dc8bda7 commit 854f90a

File tree

1 file changed

+13
-1
lines changed

1 file changed

+13
-1
lines changed
 

‎std/fmt/index.zig‎

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,14 @@ pub fn formatType(
161161
else => return format(context, Errors, output, "{}@{x}", @typeName(T.Child), @ptrToInt(value)),
162162
},
163163
builtin.TypeInfo.Pointer.Size.Many => {
164+
if (ptr_info.child == u8) {
165+
//This is a bit of a hack, but it made more sense to
166+
// do this check here than have formatText do it
167+
if (fmt[0] == 's') {
168+
const len = std.cstr.len(value);
169+
return formatText(value[0..len], fmt, context, Errors, output);
170+
}
171+
}
164172
return format(context, Errors, output, "{}@{x}", @typeName(T.Child), @ptrToInt(value));
165173
},
166174
builtin.TypeInfo.Pointer.Size.Slice => {
@@ -300,7 +308,7 @@ pub fn formatBuf(
300308
var leftover_padding = if (width > buf.len) (width - buf.len) else return;
301309
const pad_byte: u8 = ' ';
302310
while (leftover_padding > 0) : (leftover_padding -= 1) {
303-
try output(context, (&pad_byte)[0..1]);
311+
try output(context, (*[1]u8)(&pad_byte)[0..1]);
304312
}
305313
}
306314

@@ -841,6 +849,10 @@ test "fmt.format" {
841849
const value: u8 = 'a';
842850
try testFmt("u8: a\n", "u8: {c}\n", value);
843851
}
852+
try testFmt("buf: Test \n", "buf: {s5}\n", "Test");
853+
try testFmt("buf: Test\n Other text", "buf: {s}\n Other text", "Test");
854+
try testFmt("cstr: Test C\n", "cstr: {s}\n", c"Test C");
855+
try testFmt("cstr: Test C \n", "cstr: {s10}\n", c"Test C");
844856
try testFmt("file size: 63MiB\n", "file size: {Bi}\n", usize(63 * 1024 * 1024));
845857
try testFmt("file size: 66.06MB\n", "file size: {B2}\n", usize(63 * 1024 * 1024));
846858
{

0 commit comments

Comments
 (0)
Please sign in to comment.