]> git.ipfire.org Git - thirdparty/git.git/commitdiff
test-delta: handle errors with die()
authorJeff King <peff@peff.net>
Thu, 24 Jul 2025 00:00:56 +0000 (20:00 -0400)
committerJunio C Hamano <gitster@pobox.com>
Thu, 24 Jul 2025 18:28:09 +0000 (11:28 -0700)
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>
t/helper/test-delta.c

index 6bc787a4743be08fcd1b977ced58273c3bf274d0..4495b32b491983dc10d73f5c3740b345114eac62 100644 (file)
@@ -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;
 }