On Thu, Oct 12, 2023 at 12:10 PM brian m. carlson <sandals@xxxxxxxxxxxxxxxxxxxx> wrote: > In a future commit, we're going to work with some large files which will > be at least 4 GiB in size. To take advantage of the sparseness > functionality on most Unix systems and avoid running the system out of > disk, it would be convenient to use truncate(2) to simply create a > sparse file of sufficient size. > > However, the GNU truncate(1) utility isn't portable, so let's write a > tiny test helper that does the work for us. > > Signed-off-by: brian m. carlson <bk2204@xxxxxxxxxx> > --- > diff --git a/t/helper/test-truncate.c b/t/helper/test-truncate.c > @@ -0,0 +1,27 @@ > +int cmd__truncate(int argc, const char **argv) > +{ > + char *p = NULL; > + uintmax_t sz = 0; > + int fd = -1; > + > + if (argc != 3) > + die("expected filename and size"); > + > + sz = strtoumax(argv[2], &p, 0); > + if (*p) > + die("invalid size"); Do you want to check 'errno' here, as well (probably before the '*p' check)? Or is that being too defensive for a 'test-tool' command? > + fd = open(argv[1], O_WRONLY | O_CREAT, 0600); > + if (fd < 0) > + die_errno("failed to open file %s", argv[1]); > + > + if (ftruncate(fd, (off_t) sz) < 0) > + die_errno("failed to truncate file"); > + return 0; > +}