logo

oasis

Own branch of Oasis Linux (upstream: <https://git.sr.ht/~mcf/oasis/>) git clone https://anongit.hacktivis.me/git/oasis.git
commit: 9538308a9b30aa138781607a4cc01d84233164fb
parent 5d0427335cce927b520834cc9cd7b5744b01f80e
Author: Michael Forney <mforney@mforney.org>
Date:   Wed, 27 Mar 2019 18:37:56 -0700

applyperms: Avoid unnecessary VLA

Diffstat:

Msrc/applyperms.c21+++++++++++----------
1 file changed, 11 insertions(+), 10 deletions(-)

diff --git a/src/applyperms.c b/src/applyperms.c @@ -30,9 +30,10 @@ temporarily visible because git checks out the files before this program is run. #define PERMS_FILE ".perms" struct perm { - mode_t mode; char *name; - bool attempted; + mode_t mode; + bool attempted; /* whether we attempted to set permissions for this file */ + bool delete; /* marked for directories that only appear in old .perms */ }; struct special { @@ -124,11 +125,12 @@ readspecial(struct special *sp, FILE *f) sp->perms = realloc(sp->perms, (sp->len + 1) * sizeof(*sp->perms)); if (!sp->perms) die("realloc:"); - sp->perms[sp->len].name = strdup(s); + sp->perms[sp->len] = (struct perm){ + .name = strdup(s), + .mode = strtoul(mode, &s, 8), + }; if (!sp->perms[sp->len].name) die("strdup:"); - sp->perms[sp->len].mode = strtoul(mode, &s, 8); - sp->perms[sp->len].attempted = false; if (*s) die("invalid mode: %s", mode); ++sp->len; @@ -231,7 +233,6 @@ static void specialperms(void) { int i = 0, j = 0, n; - char *dirs[oldsp.len], **dir = dirs; while (i < oldsp.len || j < newsp.len) { if (i == oldsp.len) @@ -249,7 +250,7 @@ specialperms(void) continue; } if ((oldsp.perms[i].mode & S_IFMT) == S_IFDIR) { - *dir++ = oldsp.perms[i].name; + oldsp.perms[i].delete = true; } else if (defperm(oldsp.perms[i].name) < 0) { switch (errno) { case ENOENT: @@ -262,9 +263,9 @@ specialperms(void) ++i; } /* delete directories in reverse order */ - while (dir > dirs) { - --dir; - if (rmdir(*dir) < 0) { + while (i > 0) { + --i; + if (oldsp.perms[i].delete && rmdir(oldsp.perms[i].name) < 0) { switch (errno) { case ENOENT: case ENOTEMPTY: