diff --git a/Makefile b/Makefile index ffeb36e..f69d138 100644 --- a/Makefile +++ b/Makefile @@ -34,6 +34,7 @@ SRC = \ stat.c \ swapoff.c \ swapon.c \ + truncate.c \ umount.c \ unshare.c diff --git a/truncate.c b/truncate.c new file mode 100644 index 0000000..70ee430 --- /dev/null +++ b/truncate.c @@ -0,0 +1,46 @@ +/* See LICENSE file for copyright and license details. */ +#include +#include +#include +#include +#include +#include "util.h" + +static void +usage(void) +{ + eprintf("usage: %s [-c] -s size file...\n", argv0); +} + +int +main(int argc, char *argv[]) +{ + int cflag = 0, sflag = 0; + int fd, i; + long size; + + ARGBEGIN { + case 's': + sflag = 1; + size = estrtol(EARGF(usage()), 10); + break; + case 'c': + cflag = 1; + break; + default: + usage(); + } ARGEND; + + if (argc < 1 || !sflag) + usage(); + + for (i = 0; i < argc; i++) { + fd = open(argv[i], O_WRONLY | (cflag ? 0 : O_CREAT), 0644); + if (fd < 0) + eprintf("open %s:", argv[i]); + if (ftruncate(fd, size) < 0) + eprintf("ftruncate: %s:", argv[i]); + close(fd); + } + return 0; +}