commit b41bbed
Devine Lu Linvega
·
2025-01-22 19:01:15 +0000 UTC
parent 05b90c9
(file.c) Removed duplicate stat()
1 files changed,
+15,
-10
+15,
-10
1@@ -78,28 +78,29 @@ put_size(Uint8 *dest, Uint16 len, off_t size)
2 }
3
4 static Uint16
5-put_stat(char *dest, Uint16 len, const char *filepath, int capsize)
6+put_stat(char *dest, Uint16 len, int size, int err, int dir, int capsize)
7 {
8- struct stat st;
9- if(stat(filepath, &st))
10+ if(err)
11 return put_fill(dest, len, '!');
12- else if(S_ISDIR(st.st_mode))
13+ else if(dir)
14 return put_fill(dest, len, '-');
15- else if(capsize && st.st_size >= 0x10000)
16+ else if(capsize && size >= 0x10000)
17 return put_fill(dest, len, '?');
18 else
19- return put_size(dest, len, st.st_size);
20+ return put_size(dest, len, size);
21 }
22
23 static Uint16
24 put_statfile(char *dest, Uint16 len, const char *pathname, const char *basename)
25 {
26+ int err, dir;
27 struct stat st;
28 if(len < strlen(basename) + 8)
29 return 0;
30- stat(pathname, &st);
31- dest += put_stat(dest, 4, pathname, 1);
32- return snprintf(dest + , len, S_ISDIR(st.st_mode) ? " %s/\n" : " %s\n", basename) + 4;
33+ err = stat(pathname, &st);
34+ dir = S_ISDIR(st.st_mode);
35+ dest += put_stat(dest, 4, st.st_size, err, dir, 1);
36+ return snprintf(dest, len, dir ? " %s/\n" : " %s\n", basename) + 4;
37 }
38
39 static void
40@@ -300,9 +301,13 @@ file_write(UxnFile *c, Uint16 addr, Uint16 len, Uint8 flags)
41 static Uint16
42 file_stat(UxnFile *c, Uint16 addr, Uint16 len)
43 {
44+ int err, dir;
45+ struct stat st;
46 if(c->outside_sandbox)
47 return 0;
48- return put_stat(&uxn.ram[addr], len, c->current_filename, 0);
49+ err = stat(c->current_filename, &st);
50+ dir = S_ISDIR(st.st_mode);
51+ return put_stat(&uxn.ram[addr], len, st.st_size, err, dir, 0);
52 }
53
54 static Uint16