Fix select bug.
[utils.git] / bkselect.c
index 6227a5b..3847879 100644 (file)
@@ -8,6 +8,10 @@
 #include <attr/xattr.h>
 #include <attr/attributes.h>
 
+int printsize = 0;
+int printnames = 1;
+long long tsize = 0;
+
 int bkselect(char *path, int s)
 {
     DIR *d;
@@ -66,8 +70,11 @@ int bkselect(char *path, int s)
            if(bkselect(pb, s))
                r = 1;
        } else if(S_ISREG(sb.st_mode) || S_ISLNK(sb.st_mode)) {
-           if(s)
-               printf("%s\n", pb);
+           if(s) {
+               if(printnames)
+                   printf("%s\n", pb);
+               tsize += sb.st_size;
+           }
        }
     }
     
@@ -75,18 +82,43 @@ int bkselect(char *path, int s)
     return(r);
 }
 
+void usage(void)
+{
+    fprintf(stderr, "usage: bkselect [-hsqo] path...\n");
+}
+
 int main(int argc, char **argv)
 {
-    int i, r;
+    int c, i, r, s;
     
-    if(argc < 1) {
-       fprintf(stderr, "usage: bkselect path...\n");
+    s = 1;
+    while((c = getopt(argc, argv, "hsqo")) >= 0) {
+       switch(c) {
+       case 's':
+           printsize = 1;
+           break;
+       case 'q':
+           printnames = 0;
+           break;
+       case 'o':
+           s = 0;
+           break;
+       case 'h':
+       default:
+           usage();
+           exit((c == 'h')?0:1);
+       }
+    }
+    if(argc - optind < 1) {
+       usage();
        exit(1);
     }
     r = 0;
-    for(i = 1; i < argc; i++) {
-       if(bkselect(argv[i], 0))
+    for(i = optind; i < argc; i++) {
+       if(bkselect(argv[i], s))
            r = 1;
     }
+    if(printsize)
+       printf("%lli\n", tsize);
     return(r);
 }