]> git.armaanb.net Git - stagit.git/commitdiff
fix: add "fattr" pledge for chmod(2) for cachefile
authorHiltjo Posthuma <hiltjo@codemadness.org>
Sun, 19 Nov 2017 13:52:04 +0000 (14:52 +0100)
committerHiltjo Posthuma <hiltjo@codemadness.org>
Sun, 19 Nov 2017 13:52:04 +0000 (14:52 +0100)
improve checks for when head is NULL (empty repo)

stagit.c

index bf027f64dc1c63e8332f01faf08f5d6468e01789..1bc57e228b1a25a16c4326dd71b220eed7f9c36d 100644 (file)
--- a/stagit.c
+++ b/stagit.c
@@ -1003,7 +1003,7 @@ main(int argc, char *argv[])
        size_t n;
        int i, fd;
 
-       if (pledge("stdio rpath wpath cpath", NULL) == -1)
+       if (pledge("stdio rpath wpath cpath fattr", NULL) == -1)
                err(1, "pledge");
 
        for (i = 1; i < argc; i++) {
@@ -1017,6 +1017,8 @@ main(int argc, char *argv[])
                        cachefile = argv[++i];
                }
        }
+       if (!cachefile && pledge("stdio rpath wpath cpath", NULL) == -1)
+               err(1, "pledge");
        if (!repodir)
                usage(argv[0]);
 
@@ -1037,10 +1039,6 @@ main(int argc, char *argv[])
                head = git_object_id(obj);
        git_object_free(obj);
 
-       /* don't cache if there is no HEAD */
-       if (!head)
-               cachefile = NULL;
-
        /* use directory name as name */
        if ((name = strrchr(repodirabs, '/')))
                name++;
@@ -1104,7 +1102,7 @@ main(int argc, char *argv[])
              "<td class=\"num\" align=\"right\"><b>+</b></td>"
              "<td class=\"num\" align=\"right\"><b>-</b></td></tr>\n</thead><tbody>\n", fp);
 
-       if (cachefile) {
+       if (cachefile && head) {
                /* read from cache file (does not need to exist) */
                if ((rcachefp = fopen(cachefile, "r"))) {
                        if (!fgets(lastoidstr, sizeof(lastoidstr), rcachefp))
@@ -1167,7 +1165,7 @@ main(int argc, char *argv[])
        fclose(fp);
 
        /* rename new cache file on success */
-       if (cachefile) {
+       if (cachefile && head) {
                if (rename(tmppath, cachefile))
                        err(1, "rename: '%s' to '%s'", tmppath, cachefile);
                umask((mask = umask(0)));