{
DIR *fdir = opendir(*base ? base : ".");
int contents = 0;
- char path[PATH_MAX + 1];
+ struct dirent *de;
++ struct strbuf path = STRBUF_INIT;
- if (fdir) {
- struct dirent *de;
- struct strbuf path = STRBUF_INIT;
-
- strbuf_add(&path, base, baselen);
-
- while ((de = readdir(fdir)) != NULL) {
- switch (treat_path(dir, de, &path, baselen, simplify)) {
- case path_recurse:
- contents += read_directory_recursive
- (dir, path.buf, path.len, 0, simplify);
- continue;
- case path_ignored:
- continue;
- case path_handled:
- break;
- }
- contents++;
- if (check_only)
- goto exit_early;
- else
- dir_add_name(dir, path.buf, path.len);
+ if (!fdir)
+ return 0;
+
- memcpy(path, base, baselen);
++ strbuf_add(&path, base, baselen);
+
+ while ((de = readdir(fdir)) != NULL) {
- int len;
- switch (treat_path(dir, de, path, sizeof(path),
- baselen, simplify, &len)) {
++ switch (treat_path(dir, de, &path, baselen, simplify)) {
+ case path_recurse:
- contents += read_directory_recursive(dir, path, len, 0, simplify);
++ contents += read_directory_recursive(dir, path.buf,
++ path.len, 0,
++ simplify);
+ continue;
+ case path_ignored:
+ continue;
+ case path_handled:
+ break;
}
-exit_early:
- closedir(fdir);
- strbuf_release(&path);
+ contents++;
+ if (check_only)
+ goto exit_early;
+ else
- dir_add_name(dir, path, len);
++ dir_add_name(dir, path.buf, path.len);
}
+exit_early:
+ closedir(fdir);
++ strbuf_release(&path);
return contents;
}