]> git.ipfire.org Git - thirdparty/git.git/commitdiff
unpack: replace xwrite() loop with write_in_full()
authorJunio C Hamano <gitster@pobox.com>
Sat, 2 Mar 2024 19:03:46 +0000 (11:03 -0800)
committerJunio C Hamano <gitster@pobox.com>
Sat, 2 Mar 2024 19:12:16 +0000 (11:12 -0800)
We have two packfile stream consumers, index-pack and
unpack-objects, that allow excess payload after the packfile stream
data. Their code to relay excess data hasn't changed significantly
since their original implementation that appeared in 67e5a5ec
(git-unpack-objects: re-write to read from stdin, 2005-06-28) and
9bee2478 (mimic unpack-objects when --stdin is used with index-pack,
2006-10-25).

These code blocks contain hand-rolled loops using xwrite(), written
before our write_in_full() helper existed. This helper now provides
the same functionality.

Replace these loops with write_in_full() for shorter, clearer
code. Update related variables accordingly.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/index-pack.c
builtin/unpack-objects.c

index a3a37bd215d844806814d677d2c7dfa71c8f31c6..856428fef9577eaa7f4407d598e073e488e4d089 100644 (file)
@@ -1524,14 +1524,12 @@ static void final(const char *final_pack_name, const char *curr_pack_name,
        struct strbuf pack_name = STRBUF_INIT;
        struct strbuf index_name = STRBUF_INIT;
        struct strbuf rev_index_name = STRBUF_INIT;
-       int err;
 
        if (!from_stdin) {
                close(input_fd);
        } else {
                fsync_component_or_die(FSYNC_COMPONENT_PACK, output_fd, curr_pack_name);
-               err = close(output_fd);
-               if (err)
+               if (close(output_fd))
                        die_errno(_("error while closing pack file"));
        }
 
@@ -1566,17 +1564,8 @@ static void final(const char *final_pack_name, const char *curr_pack_name,
                write_or_die(1, buf.buf, buf.len);
                strbuf_release(&buf);
 
-               /*
-                * Let's just mimic git-unpack-objects here and write
-                * the last part of the input buffer to stdout.
-                */
-               while (input_len) {
-                       err = xwrite(1, input_buffer + input_offset, input_len);
-                       if (err <= 0)
-                               break;
-                       input_len -= err;
-                       input_offset += err;
-               }
+               /* Write the last part of the buffer to stdout */
+               write_in_full(1, input_buffer + input_offset, input_len);
        }
 
        strbuf_release(&rev_index_name);
index e0a701f2b383bbbd95fc1e7fef3fec30c3783c37..f1c85a00ae9bb6586527a845c302cba47c4c8daf 100644 (file)
@@ -679,13 +679,7 @@ int cmd_unpack_objects(int argc, const char **argv, const char *prefix UNUSED)
        use(the_hash_algo->rawsz);
 
        /* Write the last part of the buffer to stdout */
-       while (len) {
-               int ret = xwrite(1, buffer + offset, len);
-               if (ret <= 0)
-                       break;
-               len -= ret;
-               offset += ret;
-       }
+       write_in_full(1, buffer + offset, len);
 
        /* All done */
        return has_errors;