VirtualBox

Changeset 1212 in kBuild for trunk/src/kash/redir.c


Ignore:
Timestamp:
Oct 7, 2007 6:42:48 PM (17 years ago)
Author:
bird
Message:

redir.c

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kash/redir.c

    r1208 r1212  
    8585
    8686
    87 MKINIT struct redirtab *redirlist;
     87//MKINIT struct redirtab *redirlist;
    8888
    8989/*
     
    9292 * if it hasn't already been redirected.
    9393*/
    94 int fd0_redirected = 0;
    95 
    96 STATIC void openredirect(union node *, char[10], int);
    97 STATIC int openhere(union node *);
     94//int fd0_redirected = 0;
     95
     96STATIC void openredirect(shinstance *, union node *, char[10], int);
     97STATIC int openhere(shinstance *, union node *);
    9898
    9999
     
    107107
    108108void
    109 redirect(union node *redir, int flags)
     109redirect(shinstance *psh, union node *redir, int flags)
    110110{
    111111        union node *n;
     
    126126                for (i = 0 ; i < 10 ; i++)
    127127                        sv->renamed[i] = EMPTY;
    128                 sv->next = redirlist;
    129                 redirlist = sv;
     128                sv->next = psh->redirlist;
     129                psh->redirlist = sv;
    130130        }
    131131        for (n = redir ; n ; n = n->nfile.next) {
     
    143143                                case EBADF:
    144144                                        if (!try) {
    145                                                 openredirect(n, memory, flags);
     145                                                openredirect(psh, n, memory, flags);
    146146                                                try++;
    147147                                                goto again;
     
    163163                }
    164164                if (fd == 0)
    165                         fd0_redirected++;
     165                        psh->fd0_redirected++;
    166166                if (!try)
    167                         openredirect(n, memory, flags);
     167                        openredirect(psh, n, memory, flags);
    168168        }
    169169        if (memory[1])
     
    175175
    176176STATIC void
    177 openredirect(union node *redir, char memory[10], int flags)
     177openredirect(shinstance *psh, union node *redir, char memory[10], int flags)
    178178{
    179179        int fd = redir->nfile.fd;
     
    232232        case NHERE:
    233233        case NXHERE:
    234                 f = openhere(redir);
     234                f = openhere(psh, redir);
    235235                break;
    236236        default:
     
    258258
    259259STATIC int
    260 openhere(union node *redir)
     260openhere(shinstance *psh, union node *redir)
    261261{
    262262        int pip[2];
    263         int len = 0;
    264 
    265         if (pipe(pip) < 0)
     263        size_t len = 0;
     264
     265        if (shfile_pipe(&psh->fdtab, pip) < 0)
    266266                error(psh, "Pipe call failed");
    267267        if (redir->type == NHERE) {
     
    299299
    300300void
    301 popredir(void)
    302 {
    303         struct redirtab *rp = redirlist;
     301popredir(shinstance *psh)
     302{
     303        struct redirtab *rp = psh->redirlist;
    304304        int i;
    305305
     
    307307                if (rp->renamed[i] != EMPTY) {
    308308                        if (i == 0)
    309                                 fd0_redirected--;
     309                                psh->fd0_redirected--;
    310310                        shfile_close(&psh->fdtab, i);
    311311                        if (rp->renamed[i] >= 0) {
     
    316316        }
    317317        INTOFF;
    318         redirlist = rp->next;
     318        psh->redirlist = rp->next;
    319319        ckfree(rp);
    320320        INTON;
     
    330330
    331331RESET {
    332         while (redirlist)
     332        while (psh->redirlist)
    333333                popredir(psh);
    334334}
     
    351351
    352352void
    353 clearredir(vforked)
    354         int vforked;
     353clearredir(shinstance *psh, int vforked)
    355354{
    356355        struct redirtab *rp;
    357356        int i;
    358357
    359         for (rp = redirlist ; rp ; rp = rp->next) {
     358        for (rp = psh->redirlist ; rp ; rp = rp->next) {
    360359                for (i = 0 ; i < 10 ; i++) {
    361360                        if (rp->renamed[i] >= 0) {
     
    381380        int newfd;
    382381
    383         newfd = shfile_fcntl(psh, from, F_DUPFD, to);
     382        newfd = shfile_fcntl(&psh->fdtab, from, F_DUPFD, to);
    384383        if (newfd < 0) {
    385384                if (errno == EMFILE)
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette