From 7be278db1fb44aa433c8998fe5b04bae20cf3abc Mon Sep 17 00:00:00 2001 From: Jared Baur Date: Fri, 6 Dec 2024 09:56:57 -0800 Subject: [PATCH] ymodem: remove TODO, calculate max digits needed for some chosen max filesize --- src/ymodem.zig | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/ymodem.zig b/src/ymodem.zig index f069245..a56e78f 100644 --- a/src/ymodem.zig +++ b/src/ymodem.zig @@ -277,8 +277,15 @@ pub fn recv(tty: *system.Tty, dir: std.fs.Dir) !void { const filename = filename_buf[0 .. payload_index - 1]; - // TODO(jared): 16 digits is an arbitrary maximum. - var filesize_buf: [16]u8 = undefined; + // Number of digits in base-10 needed for maximum file + // size of 4GiB, which is likely much larger than + // any file that would be transferred over the ymodem + // protocol. + const max_digits = comptime @ceil( + @log10(@as(f32, 4 * 1024 * 1024 * 1024)), + ); + + var filesize_buf: [max_digits]u8 = undefined; for (chunk.payload[payload_index..], 0..) |byte, i| { payload_index += 1; @@ -299,7 +306,7 @@ pub fn recv(tty: *system.Tty, dir: std.fs.Dir) !void { filesize = try std.fmt.parseInt(usize, filesize_str, 10); out_file = try dir.createFile(std.fs.path.basename(filename), .{}); - std.log.info("fetching {} to '{s}'", .{ std.fmt.fmtIntSizeBin(filesize), filename }); + std.log.info("fetching {} bytes to '{s}'", .{ std.fmt.fmtIntSizeBin(filesize), filename }); }, .data => { std.debug.assert(filesize > bytes_written);