]> git.ipfire.org Git - thirdparty/git.git/blobdiff - apply.c
Start the 2.46 cycle
[thirdparty/git.git] / apply.c
diff --git a/apply.c b/apply.c
index 2f752d71a890248caaf1d5145cfd079bb2b790d2..901b67e6255af4174a1e5a00cf01de4d2545d659 100644 (file)
--- a/apply.c
+++ b/apply.c
@@ -4614,7 +4614,7 @@ static int write_out_one_result(struct apply_state *state,
 static int write_out_one_reject(struct apply_state *state, struct patch *patch)
 {
        FILE *rej;
-       char namebuf[PATH_MAX];
+       char *namebuf;
        struct fragment *frag;
        int fd, cnt = 0;
        struct strbuf sb = STRBUF_INIT;
@@ -4647,30 +4647,29 @@ static int write_out_one_reject(struct apply_state *state, struct patch *patch)
                say_patch_name(stderr, sb.buf, patch);
        strbuf_release(&sb);
 
-       cnt = strlen(patch->new_name);
-       if (ARRAY_SIZE(namebuf) <= cnt + 5) {
-               cnt = ARRAY_SIZE(namebuf) - 5;
-               warning(_("truncating .rej filename to %.*s.rej"),
-                       cnt - 1, patch->new_name);
-       }
-       memcpy(namebuf, patch->new_name, cnt);
-       memcpy(namebuf + cnt, ".rej", 5);
+       namebuf = xstrfmt("%s.rej", patch->new_name);
 
        fd = open(namebuf, O_CREAT | O_EXCL | O_WRONLY, 0666);
        if (fd < 0) {
-               if (errno != EEXIST)
-                       return error_errno(_("cannot open %s"), namebuf);
-               if (unlink(namebuf))
-                       return error_errno(_("cannot unlink '%s'"), namebuf);
+               if (errno != EEXIST) {
+                       error_errno(_("cannot open %s"), namebuf);
+                       goto error;
+               }
+               if (unlink(namebuf)) {
+                       error_errno(_("cannot unlink '%s'"), namebuf);
+                       goto error;
+               }
                fd = open(namebuf, O_CREAT | O_EXCL | O_WRONLY, 0666);
-               if (fd < 0)
-                       return error_errno(_("cannot open %s"), namebuf);
+               if (fd < 0) {
+                       error_errno(_("cannot open %s"), namebuf);
+                       goto error;
+               }
        }
        rej = fdopen(fd, "w");
        if (!rej) {
                error_errno(_("cannot open %s"), namebuf);
                close(fd);
-               return -1;
+               goto error;
        }
 
        /* Normal git tools never deal with .rej, so do not pretend
@@ -4695,6 +4694,8 @@ static int write_out_one_reject(struct apply_state *state, struct patch *patch)
                        fputc('\n', rej);
        }
        fclose(rej);
+error:
+       free(namebuf);
        return -1;
 }