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:
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);