From 613a08c6febb5126b81b313311b939dbae7290c9 Mon Sep 17 00:00:00 2001 From: Jann Horn Date: Mon, 12 Nov 2012 17:43:31 +0100 Subject: [PATCH] use fast string formatting routines --- compile | 3 ++- listdir.c | 18 +++++++++++++----- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/compile b/compile index 68ca0e5..251fa4a 100755 --- a/compile +++ b/compile @@ -1,6 +1,7 @@ #!/bin/bash for cgi in login checkstatus listdir; do - diet gcc -O3 -std=gnu99 -Wall -Werror -g -o $cgi $cgi.c cgistuff.c hex.c -lcrypt + echo -e "\ncompiling $cgi.c..." + diet gcc -O3 -std=gnu99 -Wall -Werror -g -o $cgi $cgi.c cgistuff.c hex.c -lcrypt -lowfat sudo chown root:root $cgi sudo chmod u+s $cgi done diff --git a/listdir.c b/listdir.c index bfbd47c..9f1afda 100644 --- a/listdir.c +++ b/listdir.c @@ -10,6 +10,7 @@ #include #include #include +#include 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); } } -- 2.20.1