sbin/fsck_msdosfs: Bring in freebsd/freebsd@e2cfe252 (optimize memsets)
authorTomohiro Kusumi <kusumi.tomohiro@gmail.com>
Sat, 14 Sep 2019 21:39:30 +0000 (06:39 +0900)
committerTomohiro Kusumi <kusumi.tomohiro@gmail.com>
Sat, 14 Sep 2019 22:57:20 +0000 (07:57 +0900)
sbin/fsck_msdosfs/dir.c

index b5cb53e..4044e49 100644 (file)
@@ -1032,6 +1032,7 @@ int
 reconnect(int dosfs, struct bootblock *boot, struct fatEntry *fat, cl_t head)
 {
        struct dosDirEntry d;
+       int len;
        u_char *p;
 
        if (!ask(1, "Reconnect"))
@@ -1084,14 +1085,15 @@ reconnect(int dosfs, struct bootblock *boot, struct fatEntry *fat, cl_t head)
        boot->NumFiles++;
        /* Ensure uniqueness of entry here!                             XXX */
        memset(&d, 0, sizeof d);
-       snprintf(d.name, sizeof(d.name), "%u", head);
+       /* worst case -1 = 4294967295, 10 digits */
+       len = snprintf(d.name, sizeof(d.name), "%u", head);
        d.flags = 0;
        d.head = head;
        d.size = fat[head].length * boot->ClusterSize;
 
-       memset(p, 0, 32);
-       memset(p, ' ', 11);
-       memcpy(p, d.name, strlen(d.name));
+       memcpy(p, d.name, len);
+       memset(p + len, ' ', 11 - len);
+       memset(p + 11, 0, 32 - 11);
        p[26] = (u_char)d.head;
        p[27] = (u_char)(d.head >> 8);
        if (boot->ClustMask == CLUST32_MASK) {