[PATCH] cpio: use freopen instead of explicit assignment to stdout

Denys Vlasenko vda.linux at googlemail.com
Sat Jan 2 17:51:45 UTC 2010


On Sunday 27 December 2009 06:01, Aaron Carroll wrote:
> stdout isn't required to be an lvalue, so cpio won't compile
> on some implementations.
> 
> Signed-off-by: Aaron Carroll <aaronc at cse.unsw.edu.au>
> ---
>  archival/cpio.c |    3 +--
>  1 files changed, 1 insertions(+), 2 deletions(-)
> 
> diff --git a/archival/cpio.c b/archival/cpio.c
> index 41aeef1..e712173 100644
> --- a/archival/cpio.c
> +++ b/archival/cpio.c
> @@ -354,8 +354,7 @@ int cpio_main(int argc UNUSED_PARAM, char **argv)
>  		if (*cpio_fmt != 'n') /* we _require_ "-H newc" */
>  			bb_show_usage();
>  		if (opt & CPIO_OPT_FILE) {
> -			fclose(stdout);
> -			stdout = fopen_for_write(cpio_filename);
> +			freopen(cpio_filename, "w", stdout);
>  			/* Paranoia: I don't trust libc that much */
>  			xdup2(fileno(stdout), STDOUT_FILENO);
>  		}

time.c needs similar treatment.

I also decide to simply sneak behind stdio.h back and simply replace
the fd:

xmove_fd(xopen3(cpio_filename, O_WRONLY | O_CREAT | O_TRUNC, 0666), STDOUT_FILENO);

Fixed, thanks!
--
vda



More information about the busybox mailing list