source: branches/2.2.9/mindi-busybox/archival/libarchive/open_transformer.c @ 2725

Last change on this file since 2725 was 2725, checked in by Bruno Cornec, 9 years ago
  • Update mindi-busybox to 1.18.3 to avoid problems with the tar command which is now failing on recent versions with busybox 1.7.3
  • Property svn:eol-style set to native
File size: 1.3 KB
Line 
1/* vi: set sw=4 ts=4: */
2/*
3 * Licensed under GPLv2 or later, see file LICENSE in this source tree.
4 */
5
6#include "libbb.h"
7#include "archive.h"
8
9/* transformer(), more than meets the eye */
10/*
11 * On MMU machine, the transform_prog is removed by macro magic
12 * in include/archive.h. On NOMMU, transformer is removed.
13 */
14void FAST_FUNC open_transformer(int fd,
15    IF_DESKTOP(long long) int FAST_FUNC (*transformer)(int src_fd, int dst_fd),
16    const char *transform_prog)
17{
18    struct fd_pair fd_pipe;
19    int pid;
20
21    xpiped_pair(fd_pipe);
22    pid = BB_MMU ? xfork() : xvfork();
23    if (pid == 0) {
24        /* Child */
25        close(fd_pipe.rd); /* we don't want to read from the parent */
26        // FIXME: error check?
27#if BB_MMU
28        transformer(fd, fd_pipe.wr);
29        if (ENABLE_FEATURE_CLEAN_UP) {
30            close(fd_pipe.wr); /* send EOF */
31            close(fd);
32        }
33        /* must be _exit! bug was actually seen here */
34        _exit(EXIT_SUCCESS);
35#else
36        {
37            char *argv[4];
38            xmove_fd(fd, 0);
39            xmove_fd(fd_pipe.wr, 1);
40            argv[0] = (char*)transform_prog;
41            argv[1] = (char*)"-cf";
42            argv[2] = (char*)"-";
43            argv[3] = NULL;
44            BB_EXECVP(transform_prog, argv);
45            bb_perror_msg_and_die("can't execute '%s'", transform_prog);
46        }
47#endif
48        /* notreached */
49    }
50
51    /* parent process */
52    close(fd_pipe.wr); /* don't want to write to the child */
53    xmove_fd(fd_pipe.rd, fd);
54}
Note: See TracBrowser for help on using the repository browser.