From: Laurent Mazet Date: Fri, 24 Jan 2025 11:26:11 +0000 (+0100) Subject: avoid losing user x bit on directory X-Git-Tag: v1.0~4 X-Git-Url: https://secure.softndesign.org/git/?a=commitdiff_plain;h=be2ef7459828aeb25f9ad4bbc8cc50295446aea1;p=fm.git avoid losing user x bit on directory --- diff --git a/function.c b/function.c index e4d2390..37a911f 100644 --- a/function.c +++ b/function.c @@ -101,7 +101,7 @@ list_t *alloclist (void) list_t *_addelement (list_t *list, char *dirname, char *filename, type_t type) { - struct stat sb; + struct stat sb = {0}; char *name = newfilename (dirname, filename); STAT (name, &sb); @@ -146,7 +146,7 @@ list_t *_addelement (list_t *list, char *dirname, char *filename, type_t type) list->tab = (elem_t *) realloc (list->tab, list->nb * sizeof (elem_t)); CHECKALLOC (list->tab); memset (list->tab + list->nb - 1, 0, sizeof (elem_t)); - elem_t * elem = list->tab; + elem_t *elem = list->tab; int i; for (i = list->nb - 1; i > 0; i--) { if (strcmp ((list->tab + i - 1)->name, filename) < 0) { @@ -164,7 +164,7 @@ list_t *_addelement (list_t *list, char *dirname, char *filename, type_t type) elem->size = size; #ifndef WIN32 if (type == type_symb_e) { - struct stat sb; + struct stat sb = {0}; if (stat (name, &sb) == -1) { type = type_erlk_e; } else if ((sb.st_mode & S_IFMT) == S_IFDIR) { @@ -463,7 +463,7 @@ char *processcopy (char *dest, char *src) { char *msg = NULL; - struct stat sb; + struct stat sb = {0}; if (STAT (src, &sb) == 0) { if ((sb.st_mode & S_IFMT) == S_IFDIR) { char *basename = strrchr (src, *SEPARATOR); @@ -497,7 +497,7 @@ char *processcopy (char *dest, char *src) basename = (basename) ? basename + 1 : src; VERBOSE (DEBUG, fprintf (stderr, "basename '%s'\n", basename)); char *newdest = newfilename (dest, basename); - struct stat sb; + struct stat sb = {0}; if (STAT (newdest, &sb) == 0) { msg = strdupcat ("File '", newdest, "' already exists", NULL); } else { @@ -518,7 +518,7 @@ char *processdelete (char *name) { char *msg = NULL; - struct stat sb; + struct stat sb = {0}; if (STAT (name, &sb) == 0) { if ((sb.st_mode & S_IFMT) == S_IFDIR) { DIR *dir = opendir (name); @@ -572,7 +572,7 @@ char *processmove (char *dest, char *src) { char *msg = NULL; - struct stat sb; + struct stat sb = {0}; errno = 0; int rc = STAT (dest, &sb); if ((rc == -1) && (errno == ENOENT)) { @@ -594,7 +594,7 @@ char *processchmod (char *name, int mode) { char *msg = NULL; - struct stat sb; + struct stat sb = {0}; if (STAT (name, &sb) == 0) { char *octal = itoo (mode); if ((sb.st_mode & S_IFMT) == S_IFDIR) { @@ -613,7 +613,7 @@ char *processchmod (char *name, int mode) closedir (dir); if (msg == NULL) { VERBOSE (DEBUG, fprintf (stderr, "chmod '%s' to 0%o\n", name, mode)); - if (chmod (name, mode) != 0) { + if (chmod (name, mode | 0100) != 0) { msg = strdupcat ("Can't change mode ", octal, " for directory '", name, "'", NULL); } }