Use dynamic array in recurse() instead of PATH_MAX-array
Thanks Evan!
This commit is contained in:
		| @@ -15,10 +15,11 @@ int recurse_follow = 'P'; | ||||
| void | ||||
| recurse(const char *path, void (*fn)(const char *, int), int depth) | ||||
| { | ||||
| 	char buf[PATH_MAX]; | ||||
| 	struct dirent *d; | ||||
| 	struct stat lst, st; | ||||
| 	DIR *dp; | ||||
| 	size_t len; | ||||
| 	char *buf; | ||||
|  | ||||
| 	if (lstat(path, &lst) < 0) | ||||
| 		eprintf("lstat %s:", path); | ||||
| @@ -31,17 +32,14 @@ recurse(const char *path, void (*fn)(const char *, int), int depth) | ||||
| 	if (!(dp = opendir(path))) | ||||
| 		eprintf("opendir %s:", path); | ||||
|  | ||||
| 	len = strlen(path); | ||||
| 	while ((d = readdir(dp))) { | ||||
| 		if (!strcmp(d->d_name, ".") || !strcmp(d->d_name, "..")) | ||||
| 			continue; | ||||
| 		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"); | ||||
| 		buf = emalloc(len + (*(path + len) != '/') + strlen(d->d_name) + 1); | ||||
| 		sprintf(buf, "%s%s%s", path, (*(path + len) == '/') ? "" : "/", d->d_name); | ||||
| 		fn(buf, depth + 1); | ||||
| 		free(buf); | ||||
| 	} | ||||
|  | ||||
| 	closedir(dp); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user