Applied, thank you
On Fri, Jan 21, 2022 at 12:17 PM Timo Teräs <[email protected]> wrote: > > The specification requires volume label to be zero padded. > > Latest fsck.vfat will remove the zero padded volume label > as invalid. See also: > https://github.com/dosfstools/dosfstools/issues/172 > > Make the default label also "NO NAME" which has the special meaning > that label is not set. > > function old new delta > mkfs_vfat_main 1546 1665 +119 > .rodata 79474 79480 +6 > ------------------------------------------------------------------------------ > (add/remove: 0/0 grow/shrink: 2/0 up/down: 125/0) Total: 125 bytes > --- > Also the volume label should not contain certain special character, or > low case alphabet. However, seems lower case is allowed still by default > in fsck.vfat, and the special characters are a bit of corner case. So I > decided to not add checking for these. > > util-linux/mkfs_vfat.c | 10 ++++++---- > 1 file changed, 6 insertions(+), 4 deletions(-) > > diff --git a/util-linux/mkfs_vfat.c b/util-linux/mkfs_vfat.c > index 844d965f8..fc256b903 100644 > --- a/util-linux/mkfs_vfat.c > +++ b/util-linux/mkfs_vfat.c > @@ -219,7 +219,8 @@ int mkfs_vfat_main(int argc, char **argv) > MAIN_EXTERNALLY_VISIBLE; > int mkfs_vfat_main(int argc UNUSED_PARAM, char **argv) > { > struct stat st; > - const char *volume_label = ""; > + const char *arg_volume_label = "NO NAME "; > + char volume_label[12]; > char *buf; > char *device_name; > uoff_t volume_size_bytes; > @@ -258,13 +259,14 @@ int mkfs_vfat_main(int argc UNUSED_PARAM, char **argv) > "Ab:cCf:F:h:Ii:l:m:n:r:R:s:S:v" > "\0" "-1", //:b+:f+:F+:h+:r+:R+:s+:S+:vv:c--l:l--c > NULL, NULL, NULL, NULL, NULL, > - NULL, NULL, &volume_label, NULL, NULL, NULL, NULL); > + NULL, NULL, &arg_volume_label, NULL, NULL, NULL, NULL); > argv += optind; > > // cache device name > device_name = argv[0]; > // default volume ID = creation time > volume_id = time(NULL); > + snprintf(volume_label, sizeof(volume_label), "%-11s", > arg_volume_label); > > dev = xopen(device_name, O_RDWR); > xfstat(dev, &st, device_name); > @@ -508,7 +510,7 @@ int mkfs_vfat_main(int argc UNUSED_PARAM, char **argv) > STORE_LE(boot_blk->vi.ext_boot_sign, 0x29); > STORE_LE(boot_blk->vi.volume_id32, volume_id); > memcpy(boot_blk->vi.fs_type, "FAT32 ", > sizeof(boot_blk->vi.fs_type)); > - strncpy(boot_blk->vi.volume_label, volume_label, > sizeof(boot_blk->vi.volume_label)); > + memcpy(boot_blk->vi.volume_label, volume_label, > sizeof(boot_blk->vi.volume_label)); > memcpy(boot_blk->boot_code, boot_code, sizeof(boot_code)); > STORE_LE(boot_blk->boot_sign, BOOT_SIGN); > > @@ -553,7 +555,7 @@ int mkfs_vfat_main(int argc UNUSED_PARAM, char **argv) > uint16_t t, d; > #endif > de = (void*)buf; > - strncpy(de->name, volume_label, sizeof(de->name)); > + memcpy(de->name, volume_label, sizeof(de->name)); > STORE_LE(de->attr, ATTR_VOLUME); > #if 0 > localtime_r(&create_time, &tm_time); > -- > 2.34.1 > > _______________________________________________ > busybox mailing list > [email protected] > http://lists.busybox.net/mailman/listinfo/busybox _______________________________________________ busybox mailing list [email protected] http://lists.busybox.net/mailman/listinfo/busybox
