X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/agedu/blobdiff_plain/b02bd008c6a46bcfed857c085e4c157146bc62f1..HEAD:/du.c diff --git a/du.c b/du.c index 6d26c34..fb39201 100644 --- a/du.c +++ b/du.c @@ -185,9 +185,9 @@ static void du_recurse(char **path, size_t pathlen, size_t *pathsize, * symlink. */ if (toplevel) - statret = STAT(*path, &st); + statret = STAT_FUNC(*path, &st); else - statret = LSTAT(*path, &st); + statret = LSTAT_FUNC(*path, &st); if (statret < 0) { err(gotdata_ctx, "%s: lstat: %s\n", *path, strerror(errno)); return; @@ -255,9 +255,18 @@ void du(const char *inpath, gotdata_fn_t gotdata, err_fn_t err, size_t pathlen, pathsize; pathlen = strlen(inpath); + + /* + * Trim any trailing slashes from the input path, otherwise we'll + * store them in the index with confusing effects. + */ + while (pathlen > 1 && inpath[pathlen-1] == '/') + pathlen--; + pathsize = pathlen + 256; path = snewn(pathsize, char); - strcpy(path, inpath); + memcpy(path, inpath, pathlen); + path[pathlen] = '\0'; du_recurse(&path, pathlen, &pathsize, gotdata, err, gotdata_ctx, 1); }