]> git.cameronkatri.com Git - pw-darwin.git/blobdiff - pw/pw.c
Really fix -o
[pw-darwin.git] / pw / pw.c
diff --git a/pw/pw.c b/pw/pw.c
index 3d4fcf21d5c9ea1c6663490c99f9d2be55efac20..5ad2511aeb10eb173b880cac1f9345417c9557a8 100644 (file)
--- a/pw/pw.c
+++ b/pw/pw.c
@@ -136,8 +136,10 @@ main(int argc, char *argv[])
        name = NULL;
        relocated = nis = false;
        memset(&conf, 0, sizeof(conf));
+       strlcpy(conf.rootdir, "/", sizeof(conf.rootdir));
        strlcpy(conf.etcpath, _PATH_PWD, sizeof(conf.etcpath));
        conf.fd = -1;
+       conf.checkduplicate = true;
 
        LIST_INIT(&arglist);
 
@@ -215,6 +217,9 @@ main(int argc, char *argv[])
        if (mode == -1 || which == -1)
                cmdhelp(mode, which);
 
+       conf.rootfd = open(conf.rootdir, O_DIRECTORY|O_CLOEXEC);
+       if (conf.rootfd == -1)
+               errx(EXIT_FAILURE, "Unable to open '%s'", conf.rootdir);
        conf.which = which;
        /*
         * We know which mode we're in and what we're about to do, so now
@@ -321,7 +326,7 @@ main(int argc, char *argv[])
                                    "descriptor or '-'");
                        break;
                case 'o':
-                       conf.checkduplicate = true;
+                       conf.checkduplicate = false;
                        break;
                case 'q':
                        conf.quiet = true;
@@ -582,7 +587,12 @@ cmdhelp(int mode, int which)
 struct carg    *
 getarg(struct cargs * _args, int ch)
 {
-       struct carg    *c = LIST_FIRST(_args);
+       struct carg    *c;
+
+       if (_args == NULL)
+               return (NULL);
+       
+       c = LIST_FIRST(_args);
 
        while (c != NULL && c->ch != ch)
                c = LIST_NEXT(c, list);