if (recurse_dir && !S_ISDIR(stat->st_mode))
return 0;
- if ((fd = open(path, O_RDONLY)) == -1)
+ if ((fd = open(path, O_RDONLY)) == -1) {
fprintf(stderr, _("%s: cannot open %s: %s\n"),
progname, path, strerror(errno));
- else if ((xfsctl(path, fd, FS_IOC_FSGETXATTR, &fsx)) < 0)
+ exitcode = 1;
+ } else if ((xfsctl(path, fd, FS_IOC_FSGETXATTR, &fsx)) < 0) {
fprintf(stderr, _("%s: cannot get flags on %s: %s\n"),
progname, path, strerror(errno));
- else
+ exitcode = 1;
+ } else
printxattr(fsx.fsx_xflags, 0, 1, path, 0, 1);
if (fd != -1)
vflag = 1;
break;
default:
+ exitcode = 1;
return command_usage(&lsattr_cmd);
}
}
} else if ((xfsctl(name, file->fd, FS_IOC_FSGETXATTR, &fsx)) < 0) {
fprintf(stderr, _("%s: cannot get flags on %s: %s\n"),
progname, name, strerror(errno));
+ exitcode = 1;
} else {
printxattr(fsx.fsx_xflags, vflag, !aflag, name, vflag, !aflag);
if (aflag) {
if ((fd = open(path, O_RDONLY)) == -1) {
fprintf(stderr, _("%s: cannot open %s: %s\n"),
progname, path, strerror(errno));
+ exitcode = 1;
} else if (xfsctl(path, fd, FS_IOC_FSGETXATTR, &attr) < 0) {
fprintf(stderr, _("%s: cannot get flags on %s: %s\n"),
progname, path, strerror(errno));
+ exitcode = 1;
} else {
attr.fsx_xflags |= orflags;
attr.fsx_xflags &= ~andflags;
- if (xfsctl(path, fd, FS_IOC_FSSETXATTR, &attr) < 0)
+ if (xfsctl(path, fd, FS_IOC_FSSETXATTR, &attr) < 0) {
fprintf(stderr, _("%s: cannot set flags on %s: %s\n"),
progname, path, strerror(errno));
+ exitcode = 1;
+ }
}
if (fd != -1)
if (!p->flag) {
fprintf(stderr, _("%s: unknown flag\n"),
progname);
+ exitcode = 1;
return 0;
}
}
if (!p->flag) {
fprintf(stderr, _("%s: unknown flag\n"),
progname);
+ exitcode = 1;
return 0;
}
}
} else {
fprintf(stderr, _("%s: bad chattr command, not +/-X\n"),
progname);
+ exitcode = 1;
return 0;
}
}
} else if (xfsctl(name, file->fd, FS_IOC_FSGETXATTR, &attr) < 0) {
fprintf(stderr, _("%s: cannot get flags on %s: %s\n"),
progname, name, strerror(errno));
+ exitcode = 1;
} else {
attr.fsx_xflags |= orflags;
attr.fsx_xflags &= ~andflags;
- if (xfsctl(name, file->fd, FS_IOC_FSSETXATTR, &attr) < 0)
+ if (xfsctl(name, file->fd, FS_IOC_FSSETXATTR, &attr) < 0) {
fprintf(stderr, _("%s: cannot set flags on %s: %s\n"),
progname, name, strerror(errno));
+ exitcode = 1;
+ }
}
return 0;
}
src_off = cvtnum(fsblocksize, fssectsize, optarg);
if (src_off < 0) {
printf(_("invalid source offset -- %s\n"), optarg);
+ exitcode = 1;
return 0;
}
break;
dst_off = cvtnum(fsblocksize, fssectsize, optarg);
if (dst_off < 0) {
printf(_("invalid destination offset -- %s\n"), optarg);
+ exitcode = 1;
return 0;
}
break;
llen = cvtnum(fsblocksize, fssectsize, optarg);
if (llen == -1LL) {
printf(_("invalid length -- %s\n"), optarg);
+ exitcode = 1;
return 0;
}
/*
if ((size_t)llen != llen) {
errno = EOVERFLOW;
perror("copy_range");
+ exitcode = 1;
return 0;
}
len = llen;
if (src_file_nr < 0 || src_file_nr >= filecount) {
printf(_("file value %d is out of range (0-%d)\n"),
src_file_nr, filecount - 1);
+ exitcode = 1;
return 0;
}
/* Expect no src_path arg */
src_path_arg = 0;
break;
default:
+ exitcode = 1;
return command_usage(©_range_cmd);
}
}
- if (optind != argc - src_path_arg)
+ if (optind != argc - src_path_arg) {
+ exitcode = 1;
return command_usage(©_range_cmd);
+ }
if (src_path_arg) {
fd = openfile(argv[optind], NULL, IO_READONLY, 0, NULL);
- if (fd < 0)
+ if (fd < 0) {
+ exitcode = 1;
return 0;
+ }
} else {
fd = filetable[src_file_nr].fd;
}
ret = copy_file_range_cmd(fd, &src_off, &dst_off, len);
out:
close(fd);
+ if (ret < 0)
+ exitcode = 1;
return ret;
}
if ((xfsctl(path, fd, FS_IOC_FSGETXATTR, &fsx)) < 0) {
printf("%s: XFS_IOC_FSGETXATTR %s: %s\n",
progname, path, strerror(errno));
+ exitcode = 1;
return 0;
}
printf("[%u] %s\n", fsx.fsx_cowextsize, path);
if (fstat64(fd, &stat) < 0) {
perror("fstat64");
+ exitcode = 1;
return 0;
}
if ((xfsctl(path, fd, FS_IOC_FSGETXATTR, &fsx)) < 0) {
printf("%s: XFS_IOC_FSGETXATTR %s: %s\n",
progname, path, strerror(errno));
+ exitcode = 1;
return 0;
}
if ((xfsctl(path, fd, FS_IOC_FSSETXATTR, &fsx)) < 0) {
printf("%s: XFS_IOC_FSSETXATTR %s: %s\n",
progname, path, strerror(errno));
+ exitcode = 1;
return 0;
}
if (cowextsize < 0) {
printf(_("non-numeric cowextsize argument -- %s\n"),
argv[optind]);
+ exitcode = 1;
return 0;
}
} else {
fprintf(stderr,
_("invalid contents encryption mode: %s\n"),
optarg);
+ exitcode = 1;
return 0;
}
break;
fprintf(stderr,
_("invalid filenames encryption mode: %s\n"),
optarg);
+ exitcode = 1;
return 0;
}
break;
if (!parse_byte_value(optarg, &flags)) {
fprintf(stderr, _("invalid flags: %s\n"),
optarg);
+ exitcode = 1;
return 0;
}
break;
fprintf(stderr,
_("invalid policy version: %s\n"),
optarg);
+ exitcode = 1;
return 0;
}
if (val == 1) /* Just to avoid annoying people... */
break;
}
default:
+ exitcode = 1;
return command_usage(&set_encpolicy_cmd);
}
}
argc -= optind;
argv += optind;
- if (argc > 1)
+ if (argc > 1) {
+ exitcode = 1;
return command_usage(&set_encpolicy_cmd);
+ }
/*
* If unspecified, the key descriptor or identifier defaults to all 0's.
memset(&key_spec, 0, sizeof(key_spec));
if (argc > 0) {
version = str2keyspec(argv[0], version, &key_spec);
- if (version < 0)
+ if (version < 0) {
+ exitcode = 1;
return 0;
+ }
}
if (version < 0) /* version unspecified? */
version = FSCRYPT_POLICY_V1;
goto out;
break;
default:
+ exitcode = 1;
retval = command_usage(&add_enckey_cmd);
goto out;
}
argv += optind;
if (argc != 0) {
+ exitcode = 1;
retval = command_usage(&add_enckey_cmd);
goto out;
}
fprintf(stderr,
_("Invalid key; got > FSCRYPT_MAX_KEY_SIZE (%d) bytes on stdin!\n"),
FSCRYPT_MAX_KEY_SIZE);
+ exitcode = 1;
goto out;
}
arg->raw_size = raw_size;
ioc = FS_IOC_REMOVE_ENCRYPTION_KEY_ALL_USERS;
break;
default:
+ exitcode = 1;
return command_usage(&rm_enckey_cmd);
}
}
argc -= optind;
argv += optind;
- if (argc != 1)
+ if (argc != 1) {
+ exitcode = 1;
return command_usage(&rm_enckey_cmd);
+ }
- if (str2keyspec(argv[0], -1, &arg.key_spec) < 0)
+ if (str2keyspec(argv[0], -1, &arg.key_spec) < 0) {
+ exitcode = 1;
return 0;
+ }
if (ioctl(file->fd, ioc, &arg) != 0) {
fprintf(stderr, _("Error removing encryption key: %s\n"),
memset(&arg, 0, sizeof(arg));
- if (str2keyspec(argv[1], -1, &arg.key_spec) < 0)
+ if (str2keyspec(argv[1], -1, &arg.key_spec) < 0) {
+ exitcode = 1;
return 0;
+ }
if (ioctl(file->fd, FS_IOC_GET_ENCRYPTION_KEY_STATUS, &arg) != 0) {
fprintf(stderr, _("Error getting encryption key status: %s\n"),
range = 1;
break;
default:
+ exitcode = 1;
return command_usage(&fadvise_cmd);
}
}
if (range) {
size_t blocksize, sectsize;
- if (optind != argc - 2)
+ if (optind != argc - 2) {
+ exitcode = 1;
return command_usage(&fadvise_cmd);
+ }
init_cvtnum(&blocksize, §size);
offset = cvtnum(blocksize, sectsize, argv[optind]);
if (offset < 0) {
printf(_("non-numeric offset argument -- %s\n"),
argv[optind]);
+ exitcode = 1;
return 0;
}
optind++;
if (length < 0) {
printf(_("non-numeric length argument -- %s\n"),
argv[optind]);
+ exitcode = 1;
return 0;
}
} else if (optind != argc) {
+ exitcode = 1;
return command_usage(&fadvise_cmd);
}
if (posix_fadvise(file->fd, offset, length, advise) < 0) {
perror("fadvise");
+ exitcode = 1;
return 0;
}
return 0;
vflag++;
break;
default:
+ exitcode = 1;
return command_usage(&fiemap_cmd);
}
}
start_offset = cvtnum(fsblocksize, fssectsize, argv[optind]);
if (start_offset < 0) {
printf("non-numeric offset argument -- %s\n", argv[optind]);
+ exitcode = 1;
return 0;
}
last_logical = start_offset;
length = cvtnum(fsblocksize, fssectsize, argv[optind]);
if (length < 0) {
printf("non-numeric len argument -- %s\n", argv[optind]);
+ exitcode = 1;
return 0;
}
range_end = start_offset + length;
i = atoi(argv[1]);
if (i < 0 || i >= filecount) {
printf(_("value %d is out of range (0-%d)\n"), i, filecount-1);
+ exitcode = 1;
} else {
file = &filetable[i];
filelist_f();
vflag++;
break;
default:
+ exitcode = 1;
return command_usage(&fsmap_cmd);
}
}
if ((dflag + lflag + rflag > 1) || (mflag > 0 && vflag > 0) ||
- (argc > optind && dflag + lflag + rflag == 0))
+ (argc > optind && dflag + lflag + rflag == 0)) {
+ exitcode = 1;
return command_usage(&fsmap_cmd);
+ }
if (argc > optind) {
start = cvtnum(fsblocksize, fssectsize, argv[optind]);
fprintf(stderr,
_("Bad rmap start_bblock %s.\n"),
argv[optind]);
+ exitcode = 1;
return 0;
}
start <<= BBSHIFT;
fprintf(stderr,
_("Bad rmap end_bblock %s.\n"),
argv[optind + 1]);
+ exitcode = 1;
return 0;
}
end <<= BBSHIFT;
" iflags=0x%x [\"%s\"]: %s\n"),
progname, head->fmh_iflags, file->name,
strerror(errno));
- free(head);
exitcode = 1;
+ free(head);
return 0;
}
if (head->fmh_entries > map_size + 2) {
{
if (fsync(file->fd) < 0) {
perror("fsync");
+ exitcode = 1;
return 0;
}
return 0;
{
if (fdatasync(file->fd) < 0) {
perror("fdatasync");
+ exitcode = 1;
return 0;
}
return 0;
if (getrusage(RUSAGE_SELF, &rusage) < 0) {
perror("getrusage");
+ exitcode = 1;
return 0;
}
error = -xfrog_inumbers_alloc_req(nent, 0, &ireq);
if (error) {
xfrog_perror(error, "alloc req");
+ exitcode = 1;
return 0;
}
command = XFS_IOC_ERROR_CLEARALL;
if ((xfsctl(file->name, file->fd, command, &error)) < 0) {
perror("XFS_IOC_ERROR_INJECTION");
+ exitcode = 1;
continue;
}
}
if (linkat(file->fd, "", AT_FDCWD, argv[1], AT_EMPTY_PATH) < 0) {
perror("flink");
+ exitcode = 1;
return 0;
}
return 0;
static int
mark_log(const char *device, const char *mark)
{
- struct dm_task *dmt;
- const int size = 80;
- char message[size];
- int len, ret = 0;
+ struct dm_task *dmt;
+ const int size = 80;
+ char message[size];
+ int len, ret = 0;
len = snprintf(message, size, "mark %s", mark);
if (len >= size) {
static int
log_writes_f(
- int argc,
- char **argv)
+ int argc,
+ char **argv)
{
- const char *device = NULL;
- const char *mark = NULL;
- int c;
+ const char *device = NULL;
+ const char *mark = NULL;
+ int c;
- exitcode = 1;
while ((c = getopt(argc, argv, "d:m:")) != EOF) {
switch (c) {
case 'd':
mark = optarg;
break;
default:
+ exitcode = 1;
return command_usage(&log_writes_cmd);
}
}
- if (device == NULL || mark == NULL)
+ if (device == NULL || mark == NULL) {
+ exitcode = 1;
return command_usage(&log_writes_cmd);
+ }
- if (mark_log(device, mark))
- exitcode = 0;
+ if (!mark_log(device, mark))
+ exitcode = 1;
return 0;
}
advise = MADV_WILLNEED;
break;
default:
+ exitcode = 1;
return command_usage(&madvise_cmd);
}
}
if (offset < 0) {
printf(_("non-numeric offset argument -- %s\n"),
argv[optind]);
+ exitcode = 1;
return 0;
}
optind++;
if (llength < 0) {
printf(_("non-numeric length argument -- %s\n"),
argv[optind]);
+ exitcode = 1;
return 0;
} else if (llength > (size_t)llength) {
printf(_("length argument too large -- %lld\n"),
(long long)llength);
+ exitcode = 1;
return 0;
} else
length = (size_t)llength;
} else {
+ exitcode = 1;
return command_usage(&madvise_cmd);
}
start = check_mapping_range(mapping, offset, length, 1);
- if (!start)
+ if (!start) {
+ exitcode = 1;
return 0;
+ }
if (madvise(start, length, advise) < 0) {
perror("madvise");
+ exitcode = 1;
return 0;
}
return 0;
if (offset < 0) {
printf(_("non-numeric offset argument -- %s\n"),
argv[1]);
+ exitcode = 1;
return 0;
}
llength = cvtnum(blocksize, sectsize, argv[2]);
if (llength < 0) {
printf(_("non-numeric length argument -- %s\n"),
argv[2]);
+ exitcode = 1;
return 0;
} else if (llength > (size_t)llength) {
printf(_("length argument too large -- %lld\n"),
(long long)llength);
+ exitcode = 1;
return 0;
} else
length = (size_t)llength;
} else {
+ exitcode = 1;
return command_usage(&mincore_cmd);
}
start = check_mapping_range(mapping, offset, length, 1);
- if (!start)
+ if (!start) {
+ exitcode = 1;
return 0;
+ }
vec = calloc(length/pagesize, sizeof(unsigned char));
if (!vec) {
perror("calloc");
+ exitcode = 1;
return 0;
}
if (mincore(start, length, vec) < 0) {
perror("mincore");
free(vec);
+ exitcode = 1;
return 0;
}
i = atoi(argv[1]);
if (i < 0 || i >= mapcount) {
printf("value %d is out of range (0-%d)\n", i, mapcount);
+ exitcode = 1;
} else {
mapping = &maptable[i];
maplist_f();
fprintf(stderr, file ?
_("no mapped regions, try 'help mmap'\n") :
_("no files are open, try 'help open'\n"));
+ exitcode = 1;
return 0;
} else if (argc == 2) {
if (mapping)
fprintf(stderr, file ?
_("no mapped regions, try 'help mmap'\n") :
_("no files are open, try 'help open'\n"));
+ exitcode = 1;
return 0;
} else if (!file) {
fprintf(stderr, _("no files are open, try 'help open'\n"));
+ exitcode = 1;
return 0;
}
length2 = cvtnum(blocksize, sectsize, optarg);
break;
default:
+ exitcode = 1;
return command_usage(&mmap_cmd);
}
}
if (!prot)
prot = PROT_READ | PROT_WRITE | PROT_EXEC;
- if (optind != argc - 2)
+ if (optind != argc - 2) {
+ exitcode = 1;
return command_usage(&mmap_cmd);
+ }
offset = cvtnum(blocksize, sectsize, argv[optind]);
if (offset < 0) {
printf(_("non-numeric offset argument -- %s\n"), argv[optind]);
+ exitcode = 1;
return 0;
}
optind++;
length = cvtnum(blocksize, sectsize, argv[optind]);
if (length < 0) {
printf(_("non-numeric length argument -- %s\n"), argv[optind]);
+ exitcode = 1;
return 0;
}
filename = strdup(file->name);
if (!filename) {
perror("strdup");
+ exitcode = 1;
return 0;
}
if (address == MAP_FAILED) {
perror("mmap");
free(filename);
+ exitcode = 1;
return 0;
}
mapcount = 0;
munmap(address, length);
free(filename);
+ exitcode = 1;
return 0;
}
flags |= MS_SYNC;
break;
default:
+ exitcode = 1;
return command_usage(&msync_cmd);
}
}
if (offset < 0) {
printf(_("non-numeric offset argument -- %s\n"),
argv[optind]);
+ exitcode = 1;
return 0;
}
optind++;
if (length < 0) {
printf(_("non-numeric length argument -- %s\n"),
argv[optind]);
+ exitcode = 1;
return 0;
}
} else {
+ exitcode = 1;
return command_usage(&msync_cmd);
}
start = check_mapping_range(mapping, offset, length, 1);
- if (!start)
+ if (!start) {
+ exitcode = 1;
return 0;
+ }
- if (msync(start, length, flags) < 0)
+ if (msync(start, length, flags) < 0) {
perror("msync");
+ exitcode = 1;
+ return 0;
+ }
return 0;
}
dump = 1; /* mapping offset dump */
break;
default:
+ exitcode = 1;
return command_usage(&mread_cmd);
}
}
if (offset < 0) {
printf(_("non-numeric offset argument -- %s\n"),
argv[optind]);
+ exitcode = 1;
return 0;
}
optind++;
if (length < 0) {
printf(_("non-numeric length argument -- %s\n"),
argv[optind]);
+ exitcode = 1;
return 0;
}
} else {
}
start = check_mapping_range(mapping, offset, length, 0);
- if (!start)
+ if (!start) {
+ exitcode = 1;
return 0;
+ }
dumpoffset = offset - mapping->offset;
if (dump == 2)
printoffset = offset;
else
printoffset = dumpoffset;
- if (alloc_buffer(pagesize, 0, 0) < 0)
+ if (alloc_buffer(pagesize, 0, 0) < 0) {
+ exitcode = 1;
return 0;
+ }
bp = (char *)io_buffer;
dumplen = length % pagesize;
if (munmap(mapping->addr, mapping->length) < 0) {
perror("munmap");
+ exitcode = 1;
return 0;
}
free(mapping->name);
}
break;
default:
+ exitcode = 1;
return command_usage(&mwrite_cmd);
}
}
if (offset < 0) {
printf(_("non-numeric offset argument -- %s\n"),
argv[optind]);
+ exitcode = 1;
return 0;
}
optind++;
if (length < 0) {
printf(_("non-numeric length argument -- %s\n"),
argv[optind]);
+ exitcode = 1;
return 0;
}
} else {
+ exitcode = 1;
return command_usage(&mwrite_cmd);
}
start = check_mapping_range(mapping, offset, length, 0);
- if (!start)
+ if (!start) {
+ exitcode = 1;
return 0;
+ }
offset -= mapping->offset;
if (rflag) {
flags = MREMAP_MAYMOVE;
break;
default:
+ exitcode = 1;
return command_usage(&mremap_cmd);
}
}
- if (optind != argc - 1)
+ if (optind != argc - 1) {
+ exitcode = 1;
return command_usage(&mremap_cmd);
+ }
new_length = cvtnum(blocksize, sectsize, argv[optind]);
if (new_length < 0) {
printf(_("non-numeric offset argument -- %s\n"),
argv[optind]);
+ exitcode = 1;
return 0;
}
else
new_addr = mremap(mapping->addr, mapping->length,
new_length, flags, new_addr);
- if (new_addr == MAP_FAILED)
+ if (new_addr == MAP_FAILED) {
perror("mremap");
- else {
- mapping->addr = new_addr;
- mapping->length = new_length;
+ exitcode = 1;
+ return 0;
}
+ mapping->addr = new_addr;
+ mapping->length = new_length;
return 0;
}
#endif /* HAVE_MREMAP */
if (file)
return stat_f(argc, argv);
fprintf(stderr, _("no files are open, try 'help open'\n"));
+ exitcode = 1;
return 0;
}
mode = strtoul(optarg, &sp, 0);
if (!sp || sp == optarg) {
printf(_("non-numeric mode -- %s\n"), optarg);
+ exitcode = 1;
return 0;
}
break;
flags |= IO_NOFOLLOW;
break;
default:
+ exitcode = 1;
return command_usage(&open_cmd);
}
}
- if (optind != argc - 1)
+ if (optind != argc - 1) {
+ exitcode = 1;
return command_usage(&open_cmd);
+ }
if ((flags & (IO_READONLY|IO_TMPFILE)) == (IO_READONLY|IO_TMPFILE)) {
fprintf(stderr, _("-T and -r options are incompatible\n"));
+ exitcode = 1;
return -1;
}
if ((flags & (IO_PATH|IO_NOFOLLOW)) &&
(flags & ~(IO_PATH|IO_NOFOLLOW))) {
fprintf(stderr, _("-P and -L are incompatible with the other options\n"));
+ exitcode = 1;
return -1;
}
fd = openfile(argv[optind], &geometry, flags, mode, &fsp);
- if (fd < 0)
+ if (fd < 0) {
+ exitcode = 1;
return 0;
+ }
if (!platform_test_xfs_fd(fd))
flags |= IO_FOREIGN;
- addfile(argv[optind], fd, &geometry, flags, &fsp);
+ if (addfile(argv[optind], fd, &geometry, flags, &fsp) != 0) {
+ exitcode = 1;
+ return 0;
+ }
+
return 0;
}
if (close(file->fd) < 0) {
perror("close");
+ exitcode = 1;
return 0;
}
free(file->name);
if ((fd = open(path, O_RDONLY)) == -1) {
fprintf(stderr, _("%s: cannot open %s: %s\n"),
progname, path, strerror(errno));
+ exitcode = 1;
} else {
if (getprojid(path, fd, &projid) == 0)
printf("[%u] %s\n", (unsigned int)projid, path);
+ else
+ exitcode = 1;
close(fd);
}
return 0;
recurse_dir = 0;
break;
default:
+ exitcode = 1;
return command_usage(&lsproj_cmd);
}
}
- if (argc != optind)
+ if (argc != optind) {
+ exitcode = 1;
return command_usage(&lsproj_cmd);
+ }
if (recurse_all || recurse_dir)
nftw(file->name, lsproj_callback,
100, FTW_PHYS | FTW_MOUNT | FTW_DEPTH);
- else if (getprojid(file->name, file->fd, &projid) < 0)
+ else if (getprojid(file->name, file->fd, &projid) < 0) {
perror("getprojid");
- else
+ exitcode = 1;
+ } else
printf(_("projid = %u\n"), (unsigned int)projid);
return 0;
}
if ((fd = open(path, O_RDONLY)) == -1) {
fprintf(stderr, _("%s: cannot open %s: %s\n"),
progname, path, strerror(errno));
+ exitcode = 1;
} else {
- if (setprojid(path, fd, prid) < 0)
+ if (setprojid(path, fd, prid) < 0) {
perror("setprojid");
+ exitcode = 1;
+ }
close(fd);
}
return 0;
recurse_dir = 0;
break;
default:
+ exitcode = 1;
return command_usage(&chproj_cmd);
}
}
- if (argc != optind + 1)
+ if (argc != optind + 1) {
+ exitcode = 1;
return command_usage(&chproj_cmd);
+ }
prid = prid_from_string(argv[optind]);
if (prid == -1) {
printf(_("invalid project ID -- %s\n"), argv[optind]);
+ exitcode = 1;
return 0;
}
if (recurse_all || recurse_dir)
nftw(file->name, chproj_callback,
100, FTW_PHYS | FTW_MOUNT | FTW_DEPTH);
- else if (setprojid(file->name, file->fd, prid) < 0)
+ else if (setprojid(file->name, file->fd, prid) < 0) {
perror("setprojid");
+ exitcode = 1;
+ }
return 0;
}
if ((xfsctl(path, fd, FS_IOC_FSGETXATTR, &fsx)) < 0) {
printf("%s: FS_IOC_FSGETXATTR %s: %s\n",
progname, path, strerror(errno));
- return 0;
+ return -1;
}
printf("[%u] %s\n", fsx.fsx_extsize, path);
return 0;
if (fstat(fd, &stat) < 0) {
perror("fstat");
- return 0;
+ return -1;
}
if ((xfsctl(path, fd, FS_IOC_FSGETXATTR, &fsx)) < 0) {
printf("%s: FS_IOC_FSGETXATTR %s: %s\n",
progname, path, strerror(errno));
- return 0;
+ return -1;
}
if (S_ISREG(stat.st_mode)) {
fsx.fsx_xflags |= FS_XFLAG_EXTSZINHERIT;
} else {
printf(_("invalid target file type - file %s\n"), path);
- return 0;
+ return -1;
}
fsx.fsx_extsize = extsz;
if ((xfsctl(path, fd, FS_IOC_FSSETXATTR, &fsx)) < 0) {
printf("%s: FS_IOC_FSSETXATTR %s: %s\n",
progname, path, strerror(errno));
- return 0;
+ return -1;
}
return 0;
if ((fd = open(path, O_RDONLY)) == -1) {
fprintf(stderr, _("%s: cannot open %s: %s\n"),
progname, path, strerror(errno));
+ exitcode = 1;
} else {
- get_extsize(path, fd);
+ if (get_extsize(path, fd) < 0)
+ exitcode = 1;
close(fd);
}
return 0;
if ((fd = open(path, O_RDONLY)) == -1) {
fprintf(stderr, _("%s: cannot open %s: %s\n"),
progname, path, strerror(errno));
+ exitcode = 1;
} else {
- set_extsize(path, fd, extsize);
+ if (set_extsize(path, fd, extsize) < 0)
+ exitcode = 1;
close(fd);
}
return 0;
recurse_dir = 0;
break;
default:
+ exitcode = 1;
return command_usage(&extsize_cmd);
}
}
if (extsize < 0) {
printf(_("non-numeric extsize argument -- %s\n"),
argv[optind]);
+ exitcode = 1;
return 0;
}
} else {
extsize = -1;
}
- if (recurse_all || recurse_dir)
+ if (recurse_all || recurse_dir) {
nftw(file->name, (extsize >= 0) ?
set_extsize_callback : get_extsize_callback,
100, FTW_PHYS | FTW_MOUNT | FTW_DEPTH);
- else if (extsize >= 0)
- set_extsize(file->name, file->fd, extsize);
- else
- get_extsize(file->name, file->fd);
+ } else if (extsize >= 0) {
+ if (set_extsize(file->name, file->fd, extsize) < 0)
+ exitcode = 1;
+ } else if (get_extsize(file->name, file->fd) < 0) {
+ exitcode = 1;
+ }
return 0;
}
ret = -xfrog_inumbers_alloc_req(IGROUP_NR, 0, &ireq);
if (ret) {
xfrog_perror(ret, "alloc req");
+ exitcode = 1;
return 0;
}
ret = -xfrog_inumbers(&xfd, ireq);
if (ret) {
xfrog_perror(ret, "XFS_IOC_FSINUMBERS");
+ exitcode = 1;
goto out;
}
ret_next = 1;
break;
default:
+ exitcode = 1;
return command_usage(&inode_cmd);
}
}
}
/* Extra junk? */
- if (optind < argc)
+ if (optind < argc) {
+ exitcode = 1;
return command_usage(&inode_cmd);
+ }
/* -n option requires an inode number */
- if (ret_next && userino == NULLFSINO)
+ if (ret_next && userino == NULLFSINO) {
+ exitcode = 1;
return command_usage(&inode_cmd);
+ }
if (userino == NULLFSINO) {
/* We are finding last inode in use */
if (!fs) {
fprintf(stderr, _("file argument, \"%s\", is not in a mounted XFS filesystem\n"),
file->name);
+ exitcode = 1;
return 1;
}
mntpt = fs->fs_dir;
tmp = cvtnum(fsblocksize, fssectsize, optarg);
if (tmp < 0) {
printf(_("non-numeric bsize -- %s\n"), optarg);
+ exitcode = 1;
return 0;
}
bsize = tmp;
if (!sp || sp == optarg) {
printf(_("non-numeric vector count == %s\n"),
optarg);
+ exitcode = 1;
return 0;
}
break;
zeed = strtoul(optarg, &sp, 0);
if (!sp || sp == optarg) {
printf(_("non-numeric seed -- %s\n"), optarg);
+ exitcode = 1;
return 0;
}
break;
default:
+ exitcode = 1;
return command_usage(&pread_cmd);
}
}
- if (optind != argc - 2)
+ if (optind != argc - 2) {
+ exitcode = 1;
return command_usage(&pread_cmd);
+ }
offset = cvtnum(fsblocksize, fssectsize, argv[optind]);
if (offset < 0 && (direction & (IO_RANDOM|IO_BACKWARD))) {
eof = -1; /* read from EOF */
} else if (offset < 0) {
printf(_("non-numeric length argument -- %s\n"), argv[optind]);
+ exitcode = 1;
return 0;
}
optind++;
eof = -1; /* read to EOF */
} else if (count < 0) {
printf(_("non-numeric length argument -- %s\n"), argv[optind]);
+ exitcode = 1;
return 0;
}
- if (alloc_buffer(bsize, uflag, 0xabababab) < 0)
+ if (alloc_buffer(bsize, uflag, 0xabababab) < 0) {
+ exitcode = 1;
return 0;
+ }
gettimeofday(&t1, NULL);
switch (direction) {
default:
ASSERT(0);
}
- if (c < 0)
+ if (c < 0) {
+ exitcode = 1;
return 0;
+ }
+
if (qflag)
return 0;
gettimeofday(&t2, NULL);
{
xfs_flock64_t segment;
- if (!offset_length(argv[1], argv[2], &segment))
+ if (!offset_length(argv[1], argv[2], &segment)) {
+ exitcode = 1;
return 0;
+ }
if (xfsctl(file->name, file->fd, XFS_IOC_ALLOCSP64, &segment) < 0) {
perror("XFS_IOC_ALLOCSP64");
+ exitcode = 1;
return 0;
}
return 0;
{
xfs_flock64_t segment;
- if (!offset_length(argv[1], argv[2], &segment))
+ if (!offset_length(argv[1], argv[2], &segment)) {
+ exitcode = 1;
return 0;
+ }
if (xfsctl(file->name, file->fd, XFS_IOC_FREESP64, &segment) < 0) {
perror("XFS_IOC_FREESP64");
+ exitcode = 1;
return 0;
}
return 0;
{
xfs_flock64_t segment;
- if (!offset_length(argv[1], argv[2], &segment))
+ if (!offset_length(argv[1], argv[2], &segment)) {
+ exitcode = 1;
return 0;
+ }
if (xfsctl(file->name, file->fd, XFS_IOC_RESVSP64, &segment) < 0) {
perror("XFS_IOC_RESVSP64");
+ exitcode = 1;
return 0;
}
return 0;
{
xfs_flock64_t segment;
- if (!offset_length(argv[1], argv[2], &segment))
+ if (!offset_length(argv[1], argv[2], &segment)) {
+ exitcode = 1;
return 0;
+ }
if (xfsctl(file->name, file->fd, XFS_IOC_UNRESVSP64, &segment) < 0) {
perror("XFS_IOC_UNRESVSP64");
+ exitcode = 1;
return 0;
}
return 0;
{
xfs_flock64_t segment;
- if (!offset_length(argv[1], argv[2], &segment))
+ if (!offset_length(argv[1], argv[2], &segment)) {
+ exitcode = 1;
return 0;
+ }
if (xfsctl(file->name, file->fd, XFS_IOC_ZERO_RANGE, &segment) < 0) {
perror("XFS_IOC_ZERO_RANGE");
+ exitcode = 1;
return 0;
}
return 0;
mode = FALLOC_FL_UNSHARE_RANGE;
break;
default:
+ exitcode = 1;
command_usage(&falloc_cmd);
}
}
- if (optind != argc - 2)
+ if (optind != argc - 2) {
+ exitcode = 1;
return command_usage(&falloc_cmd);
+ }
- if (!offset_length(argv[optind], argv[optind+1], &segment))
+ if (!offset_length(argv[optind], argv[optind+1], &segment)) {
+ exitcode = 1;
return 0;
+ }
if (fallocate(file->fd, mode,
segment.l_start, segment.l_len)) {
perror("fallocate");
+ exitcode = 1;
return 0;
}
return 0;
xfs_flock64_t segment;
int mode = FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE;
- if (!offset_length(argv[1], argv[2], &segment))
+ if (!offset_length(argv[1], argv[2], &segment)) {
+ exitcode = 1;
return 0;
+ }
if (fallocate(file->fd, mode,
segment.l_start, segment.l_len)) {
perror("fallocate");
+ exitcode = 1;
return 0;
}
return 0;
xfs_flock64_t segment;
int mode = FALLOC_FL_COLLAPSE_RANGE;
- if (!offset_length(argv[1], argv[2], &segment))
+ if (!offset_length(argv[1], argv[2], &segment)) {
+ exitcode = 1;
return 0;
+ }
if (fallocate(file->fd, mode,
segment.l_start, segment.l_len)) {
perror("fallocate");
+ exitcode = 1;
return 0;
}
return 0;
xfs_flock64_t segment;
int mode = FALLOC_FL_INSERT_RANGE;
- if (!offset_length(argv[1], argv[2], &segment))
+ if (!offset_length(argv[1], argv[2], &segment)) {
+ exitcode = 1;
return 0;
+ }
if (fallocate(file->fd, mode,
segment.l_start, segment.l_len)) {
perror("fallocate");
+ exitcode = 1;
return 0;
}
return 0;
int mode = FALLOC_FL_UNSHARE_RANGE;
int index = 1;
- if (!offset_length(argv[index], argv[index + 1], &segment))
+ if (!offset_length(argv[index], argv[index + 1], &segment)) {
+ exitcode = 1;
return 0;
+ }
if (fallocate(file->fd, mode,
segment.l_start, segment.l_len)) {
perror("fallocate");
+ exitcode = 1;
return 0;
}
return 0;
tmp = cvtnum(fsblocksize, fssectsize, optarg);
if (tmp < 0) {
printf(_("non-numeric bsize -- %s\n"), optarg);
+ exitcode = 1;
return 0;
}
bsize = tmp;
skip = cvtnum(fsblocksize, fssectsize, optarg);
if (skip < 0) {
printf(_("non-numeric skip -- %s\n"), optarg);
+ exitcode = 1;
return 0;
}
break;
seed = strtoul(optarg, &sp, 0);
if (!sp || sp == optarg) {
printf(_("non-numeric seed -- %s\n"), optarg);
+ exitcode = 1;
return 0;
}
break;
if (!sp || sp == optarg) {
printf(_("non-numeric vector count == %s\n"),
optarg);
+ exitcode = 1;
return 0;
}
break;
zeed = strtoul(optarg, &sp, 0);
if (!sp || sp == optarg) {
printf(_("non-numeric seed -- %s\n"), optarg);
+ exitcode = 1;
return 0;
}
break;
default:
/* Handle ifdef'd-out options above */
+ exitcode = 1;
if (c != '?')
printf(_("%s: command -%c not supported\n"), argv[0], c);
else
return 0;
}
}
- if (((skip || dflag) && !infile) || (optind != argc - 2))
+ if (((skip || dflag) && !infile) || (optind != argc - 2)) {
+ exitcode = 1;
return command_usage(&pwrite_cmd);
- if (infile && direction != IO_FORWARD)
+ }
+ if (infile && direction != IO_FORWARD) {
+ exitcode = 1;
return command_usage(&pwrite_cmd);
+ }
offset = cvtnum(fsblocksize, fssectsize, argv[optind]);
if (offset < 0) {
printf(_("non-numeric offset argument -- %s\n"), argv[optind]);
+ exitcode = 1;
return 0;
}
optind++;
count = cvtnum(fsblocksize, fssectsize, argv[optind]);
if (count < 0) {
printf(_("non-numeric length argument -- %s\n"), argv[optind]);
+ exitcode = 1;
return 0;
}
- if (alloc_buffer(bsize, uflag, seed) < 0)
+ if (alloc_buffer(bsize, uflag, seed) < 0) {
+ exitcode = 1;
return 0;
+ }
c = IO_READONLY | (dflag ? IO_DIRECT : 0);
- if (infile && ((fd = openfile(infile, NULL, c, 0, NULL)) < 0))
+ if (infile && ((fd = openfile(infile, NULL, c, 0, NULL)) < 0)) {
+ exitcode = 1;
return 0;
+ }
gettimeofday(&t1, NULL);
switch (direction) {
total = 0;
ASSERT(0);
}
- if (c < 0)
+ if (c < 0) {
+ exitcode = 1;
goto done;
+ }
if (Wflag) {
if (fsync(file->fd) < 0) {
perror("fsync");
+ exitcode = 1;
goto done;
}
}
if (wflag) {
if (fdatasync(file->fd) < 0) {
perror("fdatasync");
+ exitcode = 1;
goto done;
}
}
+
if (qflag)
goto done;
gettimeofday(&t2, NULL);
verbose = 1;
break;
default:
+ exitcode = 1;
return command_usage(&readdir_cmd);
}
}
dfd = dup(file->fd);
- if (dfd < 0)
- return -1;
+ if (dfd < 0) {
+ exitcode = 1;
+ return 0;
+ }
dir = fdopendir(dfd);
if (!dir) {
close(dfd);
- return -1;
+ exitcode = 1;
+ return 0;
}
if (offset == -1) {
error = ioctl(fd, XFS_IOC_FILE_EXTENT_SAME, args);
if (error) {
perror("XFS_IOC_FILE_EXTENT_SAME");
+ exitcode = 1;
goto done;
}
if (info->status < 0) {
quiet_flag = 1;
break;
default:
+ exitcode = 1;
return command_usage(&dedupe_cmd);
}
}
- if (optind != argc - 4)
+ if (optind != argc - 4) {
+ exitcode = 1;
return command_usage(&dedupe_cmd);
+ }
infile = argv[optind];
optind++;
soffset = cvtnum(fsblocksize, fssectsize, argv[optind]);
if (soffset < 0) {
printf(_("non-numeric src offset argument -- %s\n"), argv[optind]);
+ exitcode = 1;
return 0;
}
optind++;
doffset = cvtnum(fsblocksize, fssectsize, argv[optind]);
if (doffset < 0) {
printf(_("non-numeric dest offset argument -- %s\n"), argv[optind]);
+ exitcode = 1;
return 0;
}
optind++;
count = cvtnum(fsblocksize, fssectsize, argv[optind]);
if (count < 0) {
printf(_("non-positive length argument -- %s\n"), argv[optind]);
+ exitcode = 1;
return 0;
}
fd = openfile(infile, NULL, IO_READONLY, 0, NULL);
- if (fd < 0)
+ if (fd < 0) {
+ exitcode = 1;
return 0;
+ }
gettimeofday(&t1, NULL);
total = dedupe_ioctl(fd, soffset, doffset, count, &ops);
quiet_flag = 1;
break;
default:
+ exitcode = 1;
return command_usage(&reflink_cmd);
}
}
- if (optind != argc - 4 && optind != argc - 1)
+ if (optind != argc - 4 && optind != argc - 1) {
+ exitcode = 1;
return command_usage(&reflink_cmd);
+ }
infile = argv[optind];
optind++;
if (optind == argc)
soffset = cvtnum(fsblocksize, fssectsize, argv[optind]);
if (soffset < 0) {
printf(_("non-numeric src offset argument -- %s\n"), argv[optind]);
+ exitcode = 1;
return 0;
}
optind++;
doffset = cvtnum(fsblocksize, fssectsize, argv[optind]);
if (doffset < 0) {
printf(_("non-numeric dest offset argument -- %s\n"), argv[optind]);
+ exitcode = 1;
return 0;
}
optind++;
count = cvtnum(fsblocksize, fssectsize, argv[optind]);
if (count < 0) {
printf(_("non-positive length argument -- %s\n"), argv[optind]);
+ exitcode = 1;
return 0;
}
clone_all:
fd = openfile(infile, NULL, IO_READONLY, 0, NULL);
- if (fd < 0)
+ if (fd < 0) {
+ exitcode = 1;
return 0;
+ }
gettimeofday(&t1, NULL);
total = reflink_ioctl(fd, soffset, doffset, count, &ops);
- if (ops == 0 || quiet_flag)
+ if (ops == 0)
+ goto done;
+
+ if (quiet_flag)
goto done;
gettimeofday(&t2, NULL);
t2 = tsub(t2, t1);
blks = cvtnum(file->geom.blocksize, file->geom.sectsize, argv[1]);
if (blks < 0) {
printf(_("non-numeric argument -- %s\n"), argv[1]);
+ exitcode = 1;
return 0;
}
res.resblks = blks;
if (xfsctl(file->name, file->fd, XFS_IOC_SET_RESBLKS, &res) < 0) {
perror("XFS_IOC_SET_RESBLKS");
+ exitcode = 1;
return 0;
}
} else if (xfsctl(file->name, file->fd, XFS_IOC_GET_RESBLKS, &res) < 0) {
perror("XFS_IOC_GET_RESBLKS");
+ exitcode = 1;
return 0;
}
printf(_("reserved blocks = %llu\n"),
startflag = 1;
break;
default:
+ exitcode = 1;
return command_usage(&seek_cmd);
}
}
- if (!(flag & (SEEK_DFLAG | SEEK_HFLAG)) || optind != argc - 1)
+ if (!(flag & (SEEK_DFLAG | SEEK_HFLAG)) || optind != argc - 1) {
+ exitcode = 1;
return command_usage(&seek_cmd);
+ }
start = offset = cvtnum(fsblocksize, fssectsize, argv[optind]);
- if (offset < 0)
+ if (offset < 0) {
+ exitcode = 1;
return command_usage(&seek_cmd);
+ }
/*
* check to see if the offset is a data or hole entry and
for (c = 0; flag; c++) {
if (offset == -1) {
/* print error or eof if the only entry */
- if (errno != ENXIO || c == 0 )
+ if (errno != ENXIO || c == 0 ) {
seek_output(startflag, seekinfo[current].name,
start, offset);
+ }
return 0; /* stop on error or EOF */
}
if (fd < 0 || fd >= filecount) {
printf(_("value %d is out of range (0-%d)\n"),
fd, filecount-1);
+ exitcode = 1;
return 0;
}
break;
infile = optarg;
break;
default:
+ exitcode = 1;
return command_usage(&sendfile_cmd);
}
}
- if (infile && fd != -1)
+ if (infile && fd != -1) {
+ exitcode = 1;
return command_usage(&sendfile_cmd);
+ }
if (!infile)
fd = filetable[fd].fd;
- else if ((fd = openfile(infile, NULL, IO_READONLY, 0, NULL)) < 0)
+ else if ((fd = openfile(infile, NULL, IO_READONLY, 0, NULL)) < 0) {
+ exitcode = 1;
return 0;
+ }
if (optind == argc - 2) {
offset = cvtnum(blocksize, sectsize, argv[optind]);
if (offset < 0) {
printf(_("non-numeric offset argument -- %s\n"),
argv[optind]);
+ exitcode = 1;
goto done;
}
optind++;
if (count < 0) {
printf(_("non-numeric length argument -- %s\n"),
argv[optind]);
+ exitcode = 1;
goto done;
}
} else {
if (fstat(fd, &stat) < 0) {
perror("fstat");
+ exitcode = 1;
goto done;
}
count = stat.st_size;
gettimeofday(&t1, NULL);
c = send_buffer(offset, count, fd, &total);
- if (c < 0)
+ if (c < 0) {
+ exitcode = 1;
goto done;
+ }
+
if (qflag)
goto done;
gettimeofday(&t2, NULL);
flag = XFS_FSOP_GOING_FLAGS_LOGFLUSH;
break;
default:
+ exitcode = 1;
return command_usage(&shutdown_cmd);
}
}
if ((xfsctl(file->name, file->fd, XFS_IOC_GOINGDOWN, &flag)) < 0) {
perror("XFS_IOC_GOINGDOWN");
+ exitcode = 1;
return 0;
}
return 0;
verbose = 1;
break;
default:
+ exitcode = 1;
return command_usage(&stat_cmd);
}
}
- if (raw && verbose)
+ if (raw && verbose) {
+ exitcode = 1;
return command_usage(&stat_cmd);
+ }
if (fstat(file->fd, &st) < 0) {
perror("fstat");
+ exitcode = 1;
return 0;
}
printf(_("fd.path = \"%s\"\n"), file->name);
if (platform_fstatfs(file->fd, &st) < 0) {
perror("fstatfs");
+ exitcode = 1;
} else {
printf(_("statfs.f_bsize = %lld\n"), (long long) st.f_bsize);
printf(_("statfs.f_blocks = %lld\n"), (long long) st.f_blocks);
ret = -xfrog_geometry(file->fd, &fsgeo);
if (ret) {
xfrog_perror(ret, "XFS_IOC_FSGEOMETRY");
+ exitcode = 1;
} else {
printf(_("geom.bsize = %u\n"), fsgeo.blocksize);
printf(_("geom.agcount = %u\n"), fsgeo.agcount);
}
if ((xfsctl(file->name, file->fd, XFS_IOC_FSCOUNTS, &fscounts)) < 0) {
perror("XFS_IOC_FSCOUNTS");
+ exitcode = 1;
} else {
printf(_("counts.freedata = %llu\n"),
(unsigned long long) fscounts.freedata);
if (!p || p == optarg) {
printf(
_("non-numeric mask -- %s\n"), optarg);
+ exitcode = 1;
return 0;
}
}
atflag |= AT_STATX_DONT_SYNC;
break;
default:
+ exitcode = 1;
return command_usage(&statx_cmd);
}
}
memset(&stx, 0xbf, sizeof(stx));
if (_statx(file->fd, "", atflag | AT_EMPTY_PATH, mask, &stx) < 0) {
perror("statx");
+ exitcode = 1;
return 0;
}
+ exitcode = 0;
if (raw)
return dump_raw_statx(&stx);
sync_mode = SYNC_FILE_RANGE_WRITE;
break;
default:
+ exitcode = 1;
return command_usage(&sync_range_cmd);
}
}
if (!sync_mode)
sync_mode = SYNC_FILE_RANGE_WRITE;
- if (optind != argc - 2)
+ if (optind != argc - 2) {
+ exitcode = 1;
return command_usage(&sync_range_cmd);
+ }
init_cvtnum(&blocksize, §size);
offset = cvtnum(blocksize, sectsize, argv[optind]);
if (offset < 0) {
printf(_("non-numeric offset argument -- %s\n"),
argv[optind]);
+ exitcode = 1;
return 0;
}
optind++;
if (length < 0) {
printf(_("non-numeric length argument -- %s\n"),
argv[optind]);
+ exitcode = 1;
return 0;
}
if (sync_file_range(file->fd, offset, length, sync_mode) < 0) {
perror("sync_file_range");
+ exitcode = 1;
return 0;
}
return 0;
offset = cvtnum(blocksize, sectsize, argv[1]);
if (offset < 0) {
printf(_("non-numeric truncate argument -- %s\n"), argv[1]);
+ exitcode = 1;
return 0;
}
if (ftruncate(file->fd, offset) < 0) {
perror("ftruncate");
+ exitcode = 1;
return 0;
}
return 0;
result = timespec_from_string(argv[1], argv[2], &t[0]);
if (result) {
fprintf(stderr, "Bad value for atime\n");
+ exitcode = 1;
return 0;
}
result = timespec_from_string(argv[3], argv[4], &t[1]);
if (result) {
fprintf(stderr, "Bad value for mtime\n");
+ exitcode = 1;
return 0;
}
/* Call futimens to update time. */
if (futimens(file->fd, t)) {
perror("futimens");
+ exitcode = 1;
return 0;
}