*pathsize = newpathlen * 3 / 2 + 256;
*path = sresize(*path, *pathsize, char);
}
- sprintf(*path + pathlen, "/%s", names[i]);
+ /*
+ * Avoid duplicating a slash if we got a trailing one to
+ * begin with (i.e. if we're starting the scan in '/' itself).
+ */
+ if (pathlen > 0 && (*path)[pathlen-1] == '/') {
+ strcpy(*path + pathlen, names[i]);
+ newpathlen--;
+ } else {
+ sprintf(*path + pathlen, "/%s", names[i]);
+ }
du_recurse(path, newpathlen, pathsize, gotdata, gotdata_ctx);
sfree(names);
}
-void du(char *inpath, gotdata_fn_t gotdata, void *gotdata_ctx)
+void du(const char *inpath, gotdata_fn_t gotdata, void *gotdata_ctx)
{
char *path;
size_t pathlen, pathsize;