use fast string formatting routines
[cwebfiles.git] / listdir.c
index bfbd47c..9f1afda 100644 (file)
--- a/listdir.c
+++ b/listdir.c
@@ -10,6 +10,7 @@
 #include <stdio.h>
 #include <errno.h>
 #include <sys/stat.h>
+#include <fmt.h>
 
 int main() {
   FASTOUTPUT
@@ -47,14 +48,21 @@ int main() {
   
   // send one line per file
   struct dirent *dent;
-  char encfilename[NAME_MAX*2+1];
+  char linedata[NAME_MAX*2+1+FMT_ULONG+1+FMT_ULONG+1];
   while ((dent = readdir(dir)) != NULL) {
-    size_t name_len = strlen(dent->d_name);
-    hex(encfilename, (unsigned char *)dent->d_name, name_len);
-    encfilename[name_len*2] = 0;
     struct stat st;
     // if we can't really see the file anyway, skip it
     if (lstat(dent->d_name, &st)) continue;
-    printf("%s %lu %u\n", encfilename, (unsigned long)st.st_size, (unsigned int)st.st_mode);
+    //printf("%s %lu %u\n", encfilename, (unsigned long)st.st_size, (unsigned int)st.st_mode);
+    size_t name_len = strlen(dent->d_name);
+    hex(linedata, (unsigned char *)dent->d_name, name_len);
+    char *p = linedata+name_len*2;
+    *(p++) = ' ';
+    p += fmt_ulong(p, (unsigned long)st.st_size);
+    *(p++) = ' ';
+    p += fmt_ulong(p, (unsigned int)st.st_mode);
+    *(p++) = '\n';
+    *p = 0;
+    fputs(linedata, stdout);
   }
 }