From 22539284f3220db77eae57f1c06846753c20de43 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Fri, 15 Jun 2012 11:56:13 +0200 Subject: [PATCH] maint: xfdopen, and scope reduction. * src/files.h, src/files.c (xfdopen): New. * src/output.c (output_skeleton): Use it. Reduce the scope of argv. --- src/files.c | 9 +++++++++ src/files.h | 3 ++- src/output.c | 19 +++++++------------ 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/src/files.c b/src/files.c index b7000cfa..91c0c10e 100644 --- a/src/files.c +++ b/src/files.c @@ -134,6 +134,15 @@ xfclose (FILE *ptr) } +FILE * +xfdopen (int fd, char const *mode) +{ + FILE *res = fdopen (fd, mode); + if (! res) + error (EXIT_FAILURE, get_errno (), "fdopen"); + return res; +} + /*------------------------------------------------------------------. | Compute ALL_BUT_EXT, ALL_BUT_TAB_EXT and output files extensions. | `------------------------------------------------------------------*/ diff --git a/src/files.h b/src/files.h index 8f0bec04..e727d111 100644 --- a/src/files.h +++ b/src/files.h @@ -65,7 +65,8 @@ void compute_output_file_names (void); void output_file_names_free (void); void output_file_name_check (char **file_name); -FILE *xfopen (const char *name, const char *mode); +FILE *xfopen (const char *name, char const *mode); void xfclose (FILE *ptr); +FILE *xfdopen (int fd, char const *mode); #endif /* !FILES_H_ */ diff --git a/src/output.c b/src/output.c index 37b15cfb..76895d66 100644 --- a/src/output.c +++ b/src/output.c @@ -571,7 +571,6 @@ static void output_skeleton (void) { int filter_fd[2]; - char const *argv[10]; pid_t pid; /* Compute the names of the package data dir and skeleton files. */ @@ -602,6 +601,7 @@ output_skeleton (void) for details. */ { + char const *argv[10]; int i = 0; argv[i++] = m4; @@ -627,11 +627,12 @@ output_skeleton (void) argv[i++] = skel; argv[i++] = NULL; aver (i <= ARRAY_CARDINALITY (argv)); + + /* The ugly cast is because gnulib gets the const-ness wrong. */ + pid = create_pipe_bidi ("m4", m4, (char **)(void*)argv, false, true, + true, filter_fd); } - /* The ugly cast is because gnulib gets the const-ness wrong. */ - pid = create_pipe_bidi ("m4", m4, (char **)(void*)argv, false, true, - true, filter_fd); free (m4sugar); free (m4bison); free (skel); @@ -639,10 +640,7 @@ output_skeleton (void) if (trace_flag & trace_muscles) muscles_output (stderr); { - FILE *out = fdopen (filter_fd[1], "w"); - if (! out) - error (EXIT_FAILURE, get_errno (), - "fdopen"); + FILE *out = xfdopen (filter_fd[1], "w"); muscles_output (out); xfclose (out); } @@ -650,10 +648,7 @@ output_skeleton (void) /* Read and process m4's output. */ timevar_push (TV_M4); { - FILE *in = fdopen (filter_fd[0], "r"); - if (! in) - error (EXIT_FAILURE, get_errno (), - "fdopen"); + FILE *in = xfdopen (filter_fd[0], "r"); scan_skel (in); /* scan_skel should have read all of M4's output. Otherwise, when we close the pipe, we risk letting M4 report a broken-pipe to the -- 2.47.2