aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpetershh <petershh@disroot.org>2022-07-11 15:50:51 +0300
committerpetershh <petershh@disroot.org>2022-07-11 15:50:51 +0300
commita0a4e88f727fe0cb76ed6cef1b7f00d9e396b555 (patch)
treeb95545fa84c494a58dbf232446e695200d75cb3d
parent2e19b55b9530be185381ea4a0a076241fdb1f47c (diff)
downloadshh-portable-utils-a0a4e88f727fe0cb76ed6cef1b7f00d9e396b555.tar.xz
chmod: fix faulty logic
-rw-r--r--src/shh-portable-utils/chmod.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/shh-portable-utils/chmod.c b/src/shh-portable-utils/chmod.c
index cce6844..0995419 100644
--- a/src/shh-portable-utils/chmod.c
+++ b/src/shh-portable-utils/chmod.c
@@ -87,7 +87,11 @@ int main(int argc, char const *const *argv)
}
if (S_ISDIR(st.st_mode) && recurse) {
satmp.len = 0;
- stralloc_catb(&satmp, *filename, strlen(*filename) + 1);
+ if (!stralloc_catb(&satmp, *filename, strlen(*filename) + 1)) {
+ strerr_warnwu2sys("build file name ", *filename);
+ failure = 1;
+ continue;
+ }
failure = failure || traverse_dir(&satmp, mode, &directives,
mask);
}
@@ -354,12 +358,10 @@ int traverse_dir(stralloc *dirname, mode_t mode, genalloc *directives,
entry->d_name);
failure = 1;
continue;
- }
- if (stat(dirname->s, &st) == -1) {
+ } else if (stat(dirname->s, &st) == -1) {
strerr_warnwu2sys("stat ", dirname->s);
failure = 1;
- }
- if (S_ISDIR(st.st_mode))
+ } else if (S_ISDIR(st.st_mode))
failure = failure || traverse_dir(dirname, mode, directives, mask);
else
failure = failure || change_mode(dirname->s, mode, directives,