ubase

suckless linux base utils
git clone git://git.2f30.org/ubase
Log | Files | Refs | README | LICENSE

commit 06dcf39b3a7e736d203167ad97adae79701c576c
parent 968ccce951388dd05e41e7e689e5552e7f70282a
Author: sin <sin@2f30.org>
Date:   Mon, 30 Jun 2014 15:58:00 +0100

Add some error checking to util/recurse.c

Some more stylistic changes and simplification.

Diffstat:
Mutil/recurse.c | 20++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/util/recurse.c b/util/recurse.c @@ -13,26 +13,26 @@ void recurse(const char *path, void (*fn)(const char *)) { - char buf[PATH_MAX], *p; + char buf[PATH_MAX]; struct dirent *d; struct stat st; DIR *dp; - if(lstat(path, &st) == -1 || !S_ISDIR(st.st_mode)) { + if (lstat(path, &st) == -1 || S_ISDIR(st.st_mode) == 0) return; - } else if(!(dp = opendir(path))) { + + if (!(dp = opendir(path))) eprintf("opendir %s:", path); - } - while((d = readdir(dp))) { + while ((d = readdir(dp))) { if (strcmp(d->d_name, ".") == 0 || strcmp(d->d_name, "..") == 0) continue; - strlcpy(buf, path, sizeof(buf)); - p = strrchr(buf, '\0'); - /* remove all trailing slashes */ - while (--p >= buf && *p == '/') *p ='\0'; - strlcat(buf, "/", sizeof(buf)); + if (strlcpy(buf, path, sizeof(buf)) >= sizeof(buf)) + eprintf("path too long\n"); + if (buf[strlen(buf) - 1] != '/') + if (strlcat(buf, "/", sizeof(buf)) >= sizeof(buf)) + eprintf("path too long\n"); if (strlcat(buf, d->d_name, sizeof(buf)) >= sizeof(buf)) eprintf("path too long\n"); fn(buf);