aboutsummaryrefslogtreecommitdiffstats
path: root/t/helper/test-truncate.c
diff options
context:
space:
mode:
authorbrian m. carlson <bk2204@github.com>2023-10-12 16:09:29 +0000
committerJunio C Hamano <gitster@pobox.com>2023-10-13 13:33:35 -0700
commit678eb55f5da174fce21f686f0073d56904c081c9 (patch)
tree6447c30830961b5a512e2e710770c4a609fd8355 /t/helper/test-truncate.c
parent43c8a30d150ecede9709c1f2527c8fba92c65f40 (diff)
downloadgit-678eb55f5da174fce21f686f0073d56904c081c9.tar.gz
t: add a test helper to truncate files
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@github.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't/helper/test-truncate.c')
-rw-r--r--t/helper/test-truncate.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/t/helper/test-truncate.c b/t/helper/test-truncate.c
new file mode 100644
index 0000000000..3931deaec7
--- /dev/null
+++ b/t/helper/test-truncate.c
@@ -0,0 +1,25 @@
+#include "test-tool.h"
+#include "git-compat-util.h"
+
+/*
+ * Truncate a file to the given size.
+ */
+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");
+
+ fd = xopen(argv[1], O_WRONLY | O_CREAT, 0600);
+
+ if (ftruncate(fd, (off_t) sz) < 0)
+ die_errno("failed to truncate file");
+ return 0;
+}