ubase/fallocate.c
FRIGN e3b20bbda0 Refactor fallocate(1)
1) Simplify the manpage. Just refer to fallocate(2) and stop trying
   to list supported file systems. This can change and everbody
   with common sense can bring up the relevant manpages of a given
   operating system himself.
   Use the num-semantics.
2) Use estrtonum() instead of estrtol().
3) Allow multiple arguments.
2015-09-14 10:15:55 +01:00

56 lines
987 B
C

/* See LICENSE file for copyright and license details. */
#include <sys/stat.h>
#include <fcntl.h>
#include <limits.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "util.h"
static void
usage(void)
{
eprintf("usage: %s [-o num] -l num file ...\n", argv0);
}
int
main(int argc, char *argv[])
{
int fd, ret = 0;
off_t size = 0, offset = 0;
ARGBEGIN {
case 'l':
size = estrtonum(EARGF(usage()), 1, MIN(LLONG_MAX, SIZE_MAX));
break;
case 'o':
offset = estrtonum(EARGF(usage()), 0, MIN(LLONG_MAX, SIZE_MAX));
break;
default:
usage();
} ARGEND;
if (!argc || !size)
usage();
for (; *argv; argc--, argv++) {
if ((fd = open(*argv, O_RDWR | O_CREAT, 0644)) < 0) {
weprintf("open %s:", *argv);
ret = 1;
} else if (posix_fallocate(fd, offset, size) < 0) {
weprintf("posix_fallocate %s:", *argv);
ret = 1;
}
if (fd >= 0 && close(fd) < 0) {
weprintf("close %s:", *argv);
ret = 1;
}
}
return ret;
}