{
int i, n;
struct dirent **namelist;
- unsigned char newpath[PATH_MAX];
+ unsigned char *newpath = NULL;
struct stat infos;
if(debug)
return;
}
for(i = 0; i < n; i++) {
- snprintf(newpath, PATH_MAX, "%s/%s", path, namelist[i]->d_name);
+ int pathlen = strlen(path)+strlen(namelist[i]->d_name)+2;
+ newpath = malloc(pathlen);
+ snprintf(newpath, pathlen, "%s/%s", path, namelist[i]->d_name);
if(stat(newpath, &infos) != 0) {
fprintf(stderr, "Warning >> can't stat entry : %s\n", newpath);
+ free(newpath);
+ newpath = NULL;
continue;
}
if(recursive && S_ISDIR(infos.st_mode)
}
free(namelist[i]);
}
+ newpath = NULL;
+ free(newpath);
free(namelist);
}
sprintf(pwd, "%s/", pwd_source);
if(fromstdin) {
- unsigned char path[PATH_MAX];
+ char *path = NULL;
int i;
- while(fgets(path, PATH_MAX, stdin)) {
- for(i = 0; i < PATH_MAX; i++)
+ size_t pathlen;
+
+ while(-1 != getline(&path, &pathlen, stdin)) {
+ for(i = 0; i < pathlen; i++)
if(path[i] == '\r' || path[i] == '\n')
path[i] = '\0';
if (i <= 0) {
+ free(path);
+ path = NULL;
continue;
}
}
parse_directory(path, pwd);
+ free(path);
+ path = NULL;
}
} else
for(; optind < argc; optind++) {