X-Git-Url: http://dolda2000.com/gitweb/?p=utils.git;a=blobdiff_plain;f=bkselect.c;h=96f3ad9ea1e58588019fbf27ed20d9322a7fff17;hp=6227a5b8ea1c88626c1c64215d264ba4856f9ce6;hb=f03b6a08d04673082a4163f6360fd94c494e3244;hpb=1ba1939866f4c4b2eb05981d206bca3d27e06405 diff --git a/bkselect.c b/bkselect.c index 6227a5b..96f3ad9 100644 --- a/bkselect.c +++ b/bkselect.c @@ -5,8 +5,11 @@ #include #include #include -#include -#include +#include + +int printsize = 0; +int printnames = 1; +long long tsize = 0; int bkselect(char *path, int s) { @@ -19,8 +22,8 @@ int bkselect(char *path, int s) int pbl, pl, al; al = sizeof(ab) - 1; - if(attr_get(path, "bkselect", ab, &al, 0)) { - if(errno == ENOATTR) { + if((al = getxattr(path, "user.bkselect", ab, sizeof(ab))) < 0) { + if(errno == ENODATA) { } else if(errno == EPERM) { /* Ignore for now because of weird effects... */ } else if(errno == E2BIG) { @@ -66,8 +69,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 +81,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"); - exit(1); + 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); + } } - r = 0; - for(i = 1; i < argc; i++) { - if(bkselect(argv[i], 0)) - r = 1; + if(argc - optind < 1) { + r = bkselect(".", s); + } else { + r = 0; + for(i = optind; i < argc; i++) { + if(bkselect(argv[i], s)) + r = 1; + } } + if(printsize) + printf("%lli\n", tsize); return(r); }