sh = calloc(1, sizeof(*sh));
if (!sh)
- return ENOMEM;
+ return -ENOMEM;
sh->start = start;
sh->last = (start + len - 1);
/*
* What we want to do here is get a count of shared bytes within the
- * set of extents we have collected. Specifcally, we don't want to
+ * set of extents we have collected. Specifically, we don't want to
* count any byte more than once, so just adding them up doesn't
* work.
*
si = calloc(1, sizeof(*si));
if (!si)
- return ENOMEM;
+ return -ENOMEM;
si->i_ino = ino;
si->i_subvol = subvol;
else if (cmp > 0)
n = n->rb_right;
else
- return EEXIST;
+ return -EEXIST;
}
return 0;
}
fiemap->fm_extent_count = count;
rc = ioctl(fd, FS_IOC_FIEMAP, (unsigned long) fiemap);
if (rc < 0) {
- ret = errno;
+ ret = -errno;
goto out;
}
dirfd(dirstream),
shared_extents, &tot, &shr,
0);
- if (ret)
+ if (ret == -ENOTTY) {
+ continue;
+ } else if (ret) {
+ fprintf(stderr,
+ "failed to walk dir/file: %s :%s\n",
+ entry->d_name, strerror(-ret));
break;
+ }
ctxt->bytes_total += tot;
ctxt->bytes_shared += shr;
DIR *dirstream = NULL;
ret = fstatat(dirfd, filename, &st, 0);
- if (ret) {
- ret = errno;
- return ret;
- }
+ if (ret)
+ return -errno;
if (!S_ISREG(st.st_mode) && !S_ISDIR(st.st_mode))
return 0;
if (len > (path_max - pathp)) {
error("path too long: %s %s", path, filename);
- return ENAMETOOLONG;
+ return -ENAMETOOLONG;
}
pathtmp = pathp;
ret = sprintf(pathp, "/%s", filename);
pathp += ret;
- fd = open_file_or_dir(path, &dirstream);
+ fd = open_file_or_dir3(path, &dirstream, O_RDONLY);
if (fd < 0) {
- ret = fd;
+ ret = -errno;
goto out;
}
if (is_dir)
set_shared = dir_set_shared;
- printf("%s\t%s\t%s\t%s\n",
+ printf("%10s %10s %10s %s\n",
pretty_size_mode(file_total, unit_mode),
pretty_size_mode(excl, unit_mode),
pretty_size_mode(set_shared, unit_mode),
path);
} else {
- printf("%s\t%s\t\t\t%s\n",
+ printf("%10s %10s %10s %s\n",
pretty_size_mode(file_total, unit_mode),
- pretty_size_mode(excl, unit_mode), path);
+ pretty_size_mode(excl, unit_mode),
+ "-", path);
}
}
const char * const cmd_filesystem_du_usage[] = {
"btrfs filesystem du [options] <path> [<path>..]",
"Summarize disk usage of each file.",
+ "-s|--summarize display only a total for each argument",
HELPINFO_UNITS_LONG,
- "-s display only a total for each argument",
NULL
};
unit_mode = get_unit_mode_from_arg(&argc, argv, 1);
- optind = 1;
while (1) {
static const struct option long_options[] = {
{ "summarize", no_argument, NULL, 's'},
if (check_argc_min(argc - optind, 1))
usage(cmd_filesystem_du_usage);
- printf("total\texclusive\tset shared\tfilename\n");
+ printf("%10s %10s %10s %s\n", "Total", "Exclusive", "Set shared",
+ "Filename");
for (i = optind; i < argc; i++) {
ret = du_add_file(argv[i], AT_FDCWD, NULL, NULL, NULL, 1);
if (ret) {
error("cannot check space of '%s': %s", argv[i],
- strerror(ret));
+ strerror(-ret));
err = 1;
}