commit 86f9fa3

Devine Lu Linvega  ·  2025-01-22 23:55:00 +0000 UTC
parent 56d3388
(file.c) Removing reliance on snprintf
1 files changed,  +16, -3
+16, -3
 1@@ -1,10 +1,10 @@
 2 #define _XOPEN_SOURCE 500
 3 #include <stdio.h>
 4+#include <stdlib.h>
 5 #include <dirent.h>
 6 #include <errno.h>
 7 #include <limits.h>
 8 #include <string.h>
 9-#include <stdlib.h>
10 #include <sys/stat.h>
11 #include <unistd.h>
12 
13@@ -50,7 +50,7 @@ put_fill(Uint8 *dest, int len, char c)
14 {
15 	int i;
16 	for(i = 0; i < len; i++)
17-		*(dest++) = c;
18+		*dest = c, dest++;
19 	return len;
20 }
21 
22@@ -63,6 +63,15 @@ put_size(Uint8 *dest, int len, off_t size)
23 	return len;
24 }
25 
26+static int
27+put_text(Uint8 *dest, const char *text)
28+{
29+	Uint8 *anchor = dest;
30+	while(*text)
31+		*dest = *text++, dest++;
32+	return dest - anchor;
33+}
34+
35 static int
36 put_stat(Uint8 *dest, int len, int size, int err, int dir, int capsize)
37 {
38@@ -77,11 +86,15 @@ put_statfile(Uint8 *dest, unsigned int len, const char *filepath, const char *ba
39 {
40 	int err, dir;
41 	struct stat st;
42+	Uint8 *anchor = dest;
43 	if(len < strlen(basename) + 8) return 0;
44 	err = stat(filepath, &st);
45 	dir = S_ISDIR(st.st_mode);
46 	dest += put_stat(dest, 4, st.st_size, err, dir, 1);
47-	return snprintf((char *)dest, len, dir ? " %s/\n" : " %s\n", basename) + 4;
48+	dest += put_text(dest, " ");
49+	dest += put_text(dest, basename);
50+	dest += put_text(dest, dir ? "/\n" : "\n");
51+	return dest - anchor;
52 }
53 
54 static int