...
|
...
|
@@ -13,8 +13,6 @@ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
13
|
13
|
WITH REGARD TO THIS SOFTWARE.
|
14
|
14
|
*/
|
15
|
15
|
|
16
|
|
-#define _POSIX_C_SOURCE 200809L
|
17
|
|
-
|
18
|
16
|
#include <stdio.h>
|
19
|
17
|
#include <dirent.h>
|
20
|
18
|
#include <string.h>
|
...
|
...
|
@@ -53,13 +51,13 @@ get_entry(char *p, Uint16 len, const char *pathname, const char *basename, int f
|
53
|
51
|
if(len < strlen(basename) + 7)
|
54
|
52
|
return 0;
|
55
|
53
|
if(stat(pathname, &st))
|
56
|
|
- return fail_nonzero ? snprintf(p, len, "!!!! %s\n", basename) : 0;
|
|
54
|
+ return fail_nonzero ? sprintf(p, "!!!! %s\n", basename) : 0;
|
57
|
55
|
else if(S_ISDIR(st.st_mode))
|
58
|
|
- return snprintf(p, len, "---- %s\n", basename);
|
|
56
|
+ return sprintf(p, "---- %s\n", basename);
|
59
|
57
|
else if(st.st_size < 0x10000)
|
60
|
|
- return snprintf(p, len, "%04x %s\n", (unsigned int)st.st_size, basename);
|
|
58
|
+ return sprintf(p, "%04x %s\n", (unsigned int)st.st_size, basename);
|
61
|
59
|
else
|
62
|
|
- return snprintf(p, len, "???? %s\n", basename);
|
|
60
|
+ return sprintf(p, "???? %s\n", basename);
|
63
|
61
|
}
|
64
|
62
|
|
65
|
63
|
static Uint16
|
...
|
...
|
@@ -72,7 +70,10 @@ file_read_dir(char *dest, Uint16 len)
|
72
|
70
|
Uint16 n;
|
73
|
71
|
if(de->d_name[0] == '.' && de->d_name[1] == '\0')
|
74
|
72
|
continue;
|
75
|
|
- snprintf(pathname, sizeof(pathname), "%s/%s", current_filename, de->d_name);
|
|
73
|
+ if(strlen(current_filename) + 1 + strlen(de->d_name) < sizeof(pathname))
|
|
74
|
+ sprintf(pathname, "%s/%s", current_filename, de->d_name);
|
|
75
|
+ else
|
|
76
|
+ pathname[0] = '\0';
|
76
|
77
|
n = get_entry(p, len, pathname, de->d_name, 1);
|
77
|
78
|
if(!n) break;
|
78
|
79
|
p += n;
|