summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 123ed65)
raw | patch | inline | side by side (parent: 123ed65)
author | Alex Riesen <raa.lkml@gmail.com> | |
Fri, 5 Dec 2008 00:35:48 +0000 (01:35 +0100) | ||
committer | Junio C Hamano <gitster@pobox.com> | |
Fri, 5 Dec 2008 02:05:41 +0000 (18:05 -0800) |
So that full filesystem conditions or permissions problems won't go
unnoticed.
Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
unnoticed.
Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin-fsck.c | patch | blob | history | |
builtin-merge.c | patch | blob | history | |
rerere.c | patch | blob | history |
diff --git a/builtin-fsck.c b/builtin-fsck.c
index d3f3de9446a9184e9457fe4b743c4e43a9256597..afded5e68db35cb5eca789e948bc1cb2ef2de0bc 100644 (file)
--- a/builtin-fsck.c
+++ b/builtin-fsck.c
char *buf = read_sha1_file(obj->sha1,
&type, &size);
if (buf) {
- fwrite(buf, size, 1, f);
+ if (fwrite(buf, size, 1, f) != 1)
+ die("Could not write %s: %s",
+ filename, strerror(errno));
free(buf);
}
} else
fprintf(f, "%s\n", sha1_to_hex(obj->sha1));
- fclose(f);
+ if (fclose(f))
+ die("Could not finish %s: %s",
+ filename, strerror(errno));
}
return;
}
diff --git a/builtin-merge.c b/builtin-merge.c
index 7c2b90c70baed2c7f008c2b98ad26135ef12db00..cf869751b41c256363bf5f0c465e46684e2920b8 100644 (file)
--- a/builtin-merge.c
+++ b/builtin-merge.c
pretty_print_commit(rev.commit_format, commit, &out, rev.abbrev,
NULL, NULL, rev.date_mode, 0);
}
- write(fd, out.buf, out.len);
- close(fd);
+ if (write(fd, out.buf, out.len) < 0)
+ die("Writing SQUASH_MSG: %s", strerror(errno));
+ if (close(fd))
+ die("Finishing SQUASH_MSG: %s", strerror(errno));
strbuf_release(&out);
}
diff --git a/rerere.c b/rerere.c
index 02931a151f1abe183763c9a1edb65ffd36d83bc3..718fb526dd1fbbc5de18784586d37d6069807b77 100644 (file)
--- a/rerere.c
+++ b/rerere.c
return 0;
}
+static void ferr_write(const void *p, size_t count, FILE *fp, int *err)
+{
+ if (!count || *err)
+ return;
+ if (fwrite(p, count, 1, fp) != 1)
+ *err = errno;
+}
+
+static inline void ferr_puts(const char *s, FILE *fp, int *err)
+{
+ ferr_write(s, strlen(s), fp, err);
+}
+
static int handle_file(const char *path,
unsigned char *sha1, const char *output)
{
struct strbuf one = STRBUF_INIT, two = STRBUF_INIT;
FILE *f = fopen(path, "r");
FILE *out = NULL;
+ int wrerror = 0;
if (!f)
return error("Could not open %s", path);
hunk_no++;
hunk = RR_CONTEXT;
if (out) {
- fputs("<<<<<<<\n", out);
- fwrite(one.buf, one.len, 1, out);
- fputs("=======\n", out);
- fwrite(two.buf, two.len, 1, out);
- fputs(">>>>>>>\n", out);
+ ferr_puts("<<<<<<<\n", out, &wrerror);
+ ferr_write(one.buf, one.len, out, &wrerror);
+ ferr_puts("=======\n", out, &wrerror);
+ ferr_write(two.buf, two.len, out, &wrerror);
+ ferr_puts(">>>>>>>\n", out, &wrerror);
}
if (sha1) {
git_SHA1_Update(&ctx, one.buf ? one.buf : "",
else if (hunk == RR_SIDE_2)
strbuf_addstr(&two, buf);
else if (out)
- fputs(buf, out);
+ ferr_puts(buf, out, &wrerror);
continue;
bad:
hunk = 99; /* force error exit */
strbuf_release(&two);
fclose(f);
- if (out)
- fclose(out);
+ if (wrerror)
+ error("There were errors while writing %s (%s)",
+ path, strerror(wrerror));
+ if (out && fclose(out))
+ wrerror = error("Failed to flush %s: %s",
+ path, strerror(errno));
if (sha1)
git_SHA1_Final(sha1, &ctx);
if (hunk != RR_CONTEXT) {
unlink(output);
return error("Could not parse conflict hunks in %s", path);
}
+ if (wrerror)
+ return -1;
return hunk_no;
}
if (!ret) {
FILE *f = fopen(path, "w");
if (!f)
- return error("Could not write to %s", path);
- fwrite(result.ptr, result.size, 1, f);
- fclose(f);
+ return error("Could not open %s: %s", path,
+ strerror(errno));
+ if (fwrite(result.ptr, result.size, 1, f) != 1)
+ error("Could not write %s: %s", path, strerror(errno));
+ if (fclose(f))
+ return error("Writing %s failed: %s", path,
+ strerror(errno));
}
free(cur.ptr);