#include <dirent.h>
#include <string.h>
#include <sys/stat.h>
-#include <attr/xattr.h>
-#include <attr/attributes.h>
+#include <sys/xattr.h>
+
+int printsize = 0;
+int printnames = 1;
+long long tsize = 0;
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) {
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;
+ }
}
}
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);
}