X-Git-Url: http://git.thejh.net/?p=cwebfiles.git;a=blobdiff_plain;f=listdir.c;h=9f1afdabdb787bb21a9948eab04a850c45c89df8;hp=bfbd47cd88cb2ea4684ffdd7deb74dfb6b428a8f;hb=613a08c6febb5126b81b313311b939dbae7290c9;hpb=44ce233ab82694ae1c85d0969ec3dd89d04c4992 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); } }