Re: [PATCH] git-log: detect dup and fdopen failure
- From
Jim Meyering <jim@meyering.net>
- Date
- Jun 27, 2007, 14:28 UTC
- Message-ID
- <87odj1mpy2.fsf@rho.meyering.net>
- In-Reply-To
- <EF53B249-8430-4700-81AE-B97FD49FB955@adacore.com>
Geert Bosch <bosch@adacore.com> wrote:
> If we really case about catching such errors, write > the code as: > if (!use_stdout) > realstdout = xfdopen(dup(1), "w");
Thanks for the suggestion. Here's a patch doing just that (and same for dup/xdup):
Subject: [PATCH] git-log: detect dup and fdopen failure git-compat-util.h (xdup, xfdopen): Define functions.
Signed-off-by: Jim Meyering <jim@meyering.net> --- builtin-log.c | 2 +- git-compat-util.h | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletions(-)
diff --git a/builtin-log.c b/builtin-log.c index 073a2a1..a4186ea 100644 --- a/builtin-log.c +++ b/builtin-log.c @@ -589,7 +589,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) get_patch_ids(&rev, &ids, prefix); if (!use_stdout) - realstdout = fdopen(dup(1), "w"); + realstdout = xfdopen(xdup(1), "w"); prepare_revision_walk(&rev); while ((commit = get_revision(&rev)) != NULL) { diff --git a/git-compat-util.h b/git-compat-util.h index b2ab3f8..362e040 100644 --- a/git-compat-util.h +++ b/git-compat-util.h @@ -287,6 +287,22 @@ static inline ssize_t xwrite(int fd, const void *buf, size_t len) } } +static inline int xdup(int fd) +{ + int ret = dup(fd); + if (ret < 0) + die("dup failed: %s", strerror(errno)); + return ret; +} + +static inline FILE *xfdopen(int fd, const char *mode) +{ + FILE *stream = fdopen(fd, mode); + if (stream == NULL) + die("Out of memory? fdopen failed: %s", strerror(errno)); + return stream; +} + static inline size_t xsize_t(off_t len) { return (size_t)len;