projects
/
project
/
uhttpd.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
4f8d550
)
rework string handling for directory listing, avoid redundant string scanning
author
Felix Fietkau
<nbd@openwrt.org>
Wed, 2 Jan 2013 18:24:23 +0000
(19:24 +0100)
committer
Felix Fietkau
<nbd@openwrt.org>
Wed, 2 Jan 2013 18:46:17 +0000
(19:46 +0100)
file.c
patch
|
blob
|
history
diff --git
a/file.c
b/file.c
index
22eb048
..
b46f0d6
100644
(file)
--- a/
file.c
+++ b/
file.c
@@
-462,14
+462,16
@@
static void uh_file_dirlist(struct client *cl, struct path_info *pi)
if ((count = scandir(pi->phys, &files, uh_file_scandir_filter_dir,
alphasort)) > 0)
{
if ((count = scandir(pi->phys, &files, uh_file_scandir_filter_dir,
alphasort)) > 0)
{
- memset(filename, 0, sizeof(filename));
- memcpy(filename, pi->phys, sizeof(filename));
- pathptr = &filename[strlen(filename)];
+ int len;
+
+ strcpy(filename, pi->phys);
+ len = strlen(filename);
+ pathptr = filename + len;
+ len = PATH_MAX - len;
/* list subdirs */
for (i = 0; i < count; i++) {
/* list subdirs */
for (i = 0; i < count; i++) {
- strncat(filename, files[i]->d_name,
- sizeof(filename) - strlen(files[i]->d_name));
+ snprintf(pathptr, len, "%s", files[i]->d_name);
if (!stat(filename, &s) &&
(s.st_mode & S_IFDIR) && (s.st_mode & S_IXOTH))
if (!stat(filename, &s) &&
(s.st_mode & S_IFDIR) && (s.st_mode & S_IXOTH))
@@
-488,8
+490,7
@@
static void uh_file_dirlist(struct client *cl, struct path_info *pi)
/* list files */
for (i = 0; i < count; i++) {
/* list files */
for (i = 0; i < count; i++) {
- strncat(filename, files[i]->d_name,
- sizeof(filename) - strlen(files[i]->d_name));
+ snprintf(pathptr, len, "%s", files[i]->d_name);
if (!stat(filename, &s) &&
!(s.st_mode & S_IFDIR) && (s.st_mode & S_IROTH))
if (!stat(filename, &s) &&
!(s.st_mode & S_IFDIR) && (s.st_mode & S_IROTH))