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