aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2025-07-23 20:00:56 -0400
committerJunio C Hamano <gitster@pobox.com>2025-07-24 11:28:09 -0700
commitbc235a68c87d92dc15e2d656a004e9b20042405f (patch)
treeec9b91fdea55d091670afc5cf82832cb2594c846
parent8cc19250b324c90f4283bcad488c8bbc756145c4 (diff)
downloadgit-bc235a68c87d92dc15e2d656a004e9b20042405f.tar.gz
test-delta: handle errors with die()
This is a short test helper that does all of its work in the main function. When we encounter an error, we try to clean up memory and descriptors and then jump to an error return, which exits the program. We can get the same effect by just calling die(), which means we do not have to bother with cleaning up. This simplifies the code, and also removes some inconsistencies where a few code paths forgot to clean up descriptors (though in practice it was not a big deal since we were exiting anyway). In addition to die() and die_errno(), we'll also use a few of our usual helpers like xopen() and usage() that make things more ergonomic. This does change the exit code in these cases from 1 to 128, but I don't think it matters (and arguably is better, as we'd already exit 128 for other errors like xmalloc() failure). Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--t/helper/test-delta.c55
1 files changed, 18 insertions, 37 deletions
diff --git a/t/helper/test-delta.c b/t/helper/test-delta.c
index 6bc787a474..4495b32b49 100644
--- a/t/helper/test-delta.c
+++ b/t/helper/test-delta.c
@@ -21,39 +21,26 @@ int cmd__delta(int argc, const char **argv)
struct stat st;
void *from_buf = NULL, *data_buf = NULL, *out_buf = NULL;
unsigned long from_size, data_size, out_size;
- int ret = 1;
- if (argc != 5 || (strcmp(argv[1], "-d") && strcmp(argv[1], "-p"))) {
- fprintf(stderr, "usage: %s\n", usage_str);
- return 1;
- }
+ if (argc != 5 || (strcmp(argv[1], "-d") && strcmp(argv[1], "-p")))
+ usage(usage_str);
- fd = open(argv[2], O_RDONLY);
- if (fd < 0 || fstat(fd, &st)) {
- perror(argv[2]);
- return 1;
- }
+ fd = xopen(argv[2], O_RDONLY);
+ if (fstat(fd, &st) < 0)
+ die_errno("fstat(%s)", argv[2]);
from_size = st.st_size;
from_buf = xmalloc(from_size);
- if (read_in_full(fd, from_buf, from_size) < 0) {
- perror(argv[2]);
- close(fd);
- goto cleanup;
- }
+ if (read_in_full(fd, from_buf, from_size) < 0)
+ die_errno("read(%s)", argv[2]);
close(fd);
- fd = open(argv[3], O_RDONLY);
- if (fd < 0 || fstat(fd, &st)) {
- perror(argv[3]);
- goto cleanup;
- }
+ fd = xopen(argv[3], O_RDONLY);
+ if (fstat(fd, &st) < 0)
+ die_errno("fstat(%s)", argv[3]);
data_size = st.st_size;
data_buf = xmalloc(data_size);
- if (read_in_full(fd, data_buf, data_size) < 0) {
- perror(argv[3]);
- close(fd);
- goto cleanup;
- }
+ if (read_in_full(fd, data_buf, data_size) < 0)
+ die_errno("read(%s)", argv[3]);
close(fd);
if (argv[1][1] == 'd')
@@ -64,22 +51,16 @@ int cmd__delta(int argc, const char **argv)
out_buf = patch_delta(from_buf, from_size,
data_buf, data_size,
&out_size);
- if (!out_buf) {
- fprintf(stderr, "delta operation failed (returned NULL)\n");
- goto cleanup;
- }
+ if (!out_buf)
+ die("delta operation failed (returned NULL)");
- fd = open (argv[4], O_WRONLY|O_CREAT|O_TRUNC, 0666);
- if (fd < 0 || write_in_full(fd, out_buf, out_size) < 0) {
- perror(argv[4]);
- goto cleanup;
- }
+ fd = xopen(argv[4], O_WRONLY|O_CREAT|O_TRUNC, 0666);
+ if (write_in_full(fd, out_buf, out_size) < 0)
+ die_errno("write(%s)", argv[4]);
- ret = 0;
-cleanup:
free(from_buf);
free(data_buf);
free(out_buf);
- return ret;
+ return 0;
}