On Sun, 23 Aug 2015 19:21:42 +1000
Steven McDonald <ste...@steven-mcdonald.id.au> wrote:

> Also, section 6.9.1 clause 9 of C99[0] says that "each parameter has
> automatic storage duration", so I think it's not safe to rely on a
> function parameter still being a valid object outside of openpartition
> (please correct me if I'm wrong on that).

Sorry, I just realised that it's fine to use name because it's only the
value pointed to by name that is being used in my diff.

Index: tunefs.c
===================================================================
RCS file: /cvs/src/sbin/tunefs/tunefs.c,v
retrieving revision 1.37
diff -u -p -r1.37 tunefs.c
--- tunefs.c    7 Feb 2015 02:09:14 -0000       1.37
+++ tunefs.c    23 Aug 2015 09:43:48 -0000
@@ -309,21 +309,18 @@ bread(daddr_t blk, char *buffer, int cnt
 static int
 openpartition(char *name, int flags, char **devicep)
 {
-       char            rawspec[PATH_MAX], *p;
+       char            *p;
        struct fstab    *fs;
        int             fd;
 
        fs = getfsfile(name);
        if (fs) {
-               if ((p = strrchr(fs->fs_spec, '/')) != NULL) {
-                       snprintf(rawspec, sizeof(rawspec), "%.*s/r%s",
-                           (int)(p - fs->fs_spec), fs->fs_spec, p + 1);
-                       name = rawspec;
-               } else
-                       name = fs->fs_spec;
+               name = fs->fs_spec;
+               if ((p = strrchr(name, '/')) != NULL)
+                       name = p + 1;
        }
        fd = opendev(name, flags, 0, devicep);
        if (fd == -1 && errno == ENOENT)
-               devicep = &name;
+               *devicep = name;
        return (fd);
 }

Reply via email to