VirtualBox

儲存庫 kBuild 的更動 2288


忽略:
時間撮記:
2009-2-25 上午06:21:10 (16 年 以前)
作者:
bird
訊息:

kash: more windows hacking.

位置:
trunk/src/kash
檔案:
修改 4 筆資料

圖例:

未更動
新增
刪除
  • trunk/src/kash/input.c

    r1233 r2288  
    412412setinputfd(shinstance *psh, int fd, int push)
    413413{
    414         (void) shfile_fcntl(&psh->fdtab, fd, F_SETFD, FD_CLOEXEC);
     414        (void) shfile_cloexec(&psh->fdtab, fd, 1 /* close it */);
    415415        if (push) {
    416416                pushfile(psh);
  • trunk/src/kash/shfile.c

    r2281 r2288  
    6868#ifdef SH_PURE_STUB_MODE
    6969    return -1;
     70
    7071#elif defined(SH_STUB_MODE)
    7172# ifdef _MSC_VER
     
    7475    return pipe(fds);
    7576# endif
     77
    7678#else
    7779#endif
     
    8385#ifdef SH_PURE_STUB_MODE
    8486    rc = -1;
     87
    8588#elif defined(SH_STUB_MODE)
    8689    rc = dup(fd);
     90
    8791#else
    8892#endif
     
    98102#ifdef SH_PURE_STUB_MODE
    99103    rc = -1;
     104
    100105#elif defined(SH_STUB_MODE)
    101106    rc = close(fd);
     107
    102108#else
    103109#endif
     
    111117#ifdef SH_PURE_STUB_MODE
    112118    return -1;
     119
    113120#elif defined(SH_STUB_MODE)
    114121# ifdef _MSC_VER
     
    117124    return read(fd, buf, len);
    118125# endif
     126
    119127#else
    120128#endif
     
    125133#ifdef SH_PURE_STUB_MODE
    126134    return -1;
     135
    127136#elif defined(SH_STUB_MODE)
    128137# ifdef _MSC_VER
     
    131140    return write(fd, buf, len);
    132141# endif
     142
    133143#else
    134144#endif
     
    139149#ifdef SH_PURE_STUB_MODE
    140150    return -1;
     151
    141152#elif defined(SH_STUB_MODE)
    142153    return lseek(fd, off, whench);
     154
    143155#else
    144156#endif
     
    147159int shfile_fcntl(shfdtab *pfdtab, int fd, int cmd, int arg)
    148160{
    149 #ifdef SH_PURE_STUB_MODE
    150     return -1;
    151 #elif defined(SH_STUB_MODE)
    152 # ifdef _MSC_VER
    153     return -1;
    154 # else
    155     return fcntl(fd, cmd, arg);
    156 # endif
    157 #else
    158 #endif
     161    int rc;
     162#ifdef SH_PURE_STUB_MODE
     163    rc = -1;
     164
     165#elif defined(SH_STUB_MODE) || defined(SH_FORKED_MODE)
     166# ifdef _MSC_VER
     167    switch (cmd)
     168    {
     169        /* Just enough F_GETFL/F_SETFL to get along with. */
     170        case F_GETFL:
     171            errno = 0;
     172            rc = _isatty(fd);
     173            if (errno == EBADF)
     174                rc = -1;
     175            break;
     176
     177        case F_SETFL:
     178            errno = 0;
     179            rc = _isatty(fd);
     180            if (errno != EBADF)
     181            {
     182                if (!arg)
     183                    rc = 0;
     184                else
     185                {
     186                    errno = EINVAL;
     187                    rc = -1;
     188                }
     189            }
     190            else
     191                rc = -1;
     192            break;
     193
     194        case F_DUPFD:
     195        {
     196#  if 1
     197            /* the brute force approach. */
     198            int i = 0;
     199            int fds[256];
     200            for (i = 0; i < 256; i++)
     201            {
     202                fds[i] = -1;
     203                rc = _dup(fd);
     204                if (rc >= arg)
     205                    break;
     206                fds[i] = rc;
     207            }
     208            while (i-- > 0)
     209                close(fds[i]);
     210            if (rc < arg)
     211            {
     212                errno = EMFILE;
     213                rc = -1;
     214            }
     215#  else
     216            /* A much quick approach which is spoiled by crash validation in the CRT. */
     217            int fdnew = arg;
     218            rc = -2;
     219            for (fdnew = arg; fdnew < 1024; fdnew++)
     220            {
     221                /* is the file open? */
     222                errno = 0;
     223                _isatty(fdnew);
     224                if (errno == EBADF)
     225                {
     226                    rc = _dup2(fd, fdnew);
     227                    break;
     228                }
     229            }
     230            if (rc == -2)
     231            {
     232                errno = EMFILE;
     233                rc = -1;
     234            }
     235#  endif
     236            break;
     237        }
     238    }
     239# else
     240    rc = fcntl(fd, cmd, arg);
     241# endif
     242
     243#else
     244#endif
     245
     246#ifdef DEBUG
     247    if (tracefile)
     248        switch (cmd)
     249        {
     250            case F_GETFL:
     251                TRACE2((NULL, "shfile_fcntl(%d,F_GETFL,ignored=%d) -> %d [%d]\n", fd, arg, rc, errno));
     252                break;
     253            case F_SETFL:
     254                TRACE2((NULL, "shfile_fcntl(%d,F_SETFL,newflags=%#x) -> %d [%d]\n", fd, arg, rc, errno));
     255                break;
     256            case F_DUPFD:
     257                TRACE2((NULL, "shfile_fcntl(%d,F_DUPFS,minfd=%d) -> %d [%d]\n", fd, arg, rc, errno));
     258                break;
     259            default:
     260                TRACE2((NULL, "shfile_fcntl(%d,%d,%d) -> %d [%d]\n", fd, cmd, arg, rc, errno));
     261                break;
     262        }
     263#endif
     264    return rc;
    159265}
    160266
     
    163269#ifdef SH_PURE_STUB_MODE
    164270    return -1;
     271
    165272#elif defined(SH_STUB_MODE)
    166273    return stat(path, pst);
     274
    167275#else
    168276#endif
     
    173281#ifdef SH_PURE_STUB_MODE
    174282    return -1;
     283
    175284#elif defined(SH_STUB_MODE)
    176285# ifdef _MSC_VER
     
    179288    return lstat(link, pst);
    180289# endif
     290
    181291#else
    182292#endif
     
    187297#ifdef SH_PURE_STUB_MODE
    188298    return -1;
     299
    189300#elif defined(SH_STUB_MODE)
    190301# ifdef _MSC_VER //???
     
    193304    return chdir(path);
    194305# endif
     306
    195307#else
    196308#endif
     
    201313#ifdef SH_PURE_STUB_MODE
    202314    return NULL;
     315
    203316#elif defined(SH_STUB_MODE)
    204317    return getcwd(buf, len);
     318
    205319#else
    206320#endif
     
    211325#ifdef SH_PURE_STUB_MODE
    212326    return -1;
     327
    213328#elif defined(SH_STUB_MODE)
    214329# ifdef _MSC_VER
     
    218333    return access(path, type);
    219334# endif
     335
    220336#else
    221337#endif
     
    244360#ifdef SH_PURE_STUB_MODE
    245361    rc = -1;
    246 #elif defined(SH_STUB_MODE)
    247 # ifdef _MSC_VER
     362
     363#elif defined(SH_STUB_MODE)
     364# ifdef _MSC_VER
     365    errno = ENOSYS;
    248366    rc = -1;
    249367# else
     
    251369                          | (closeit ? FD_CLOEXEC : 0));
    252370# endif
     371
    253372#else
    254373#endif
     
    265384#ifdef SH_PURE_STUB_MODE
    266385    rc = -1;
    267 #elif defined(SH_STUB_MODE)
    268 # ifdef _MSC_VER
     386
     387#elif defined(SH_STUB_MODE)
     388# ifdef _MSC_VER
     389    errno = ENOSYS;
    269390    rc = -1;
    270391# else
    271392    rc = ioctl(fd, request, buf);
    272393# endif
     394
    273395#else
    274396#endif
     
    283405#ifdef SH_PURE_STUB_MODE
    284406    return 022;
     407
    285408#elif defined(SH_STUB_MODE)
    286409    return 022;
     410
    287411#else
    288412#endif
     
    294418#ifdef SH_PURE_STUB_MODE
    295419    return NULL;
    296 #elif defined(SH_STUB_MODE)
    297 # ifdef _MSC_VER
     420
     421#elif defined(SH_STUB_MODE)
     422# ifdef _MSC_VER
     423    errno = ENOSYS;
    298424    return NULL;
    299425# else
    300426    return (shdir *)opendir(dir);
    301427# endif
     428
    302429#else
    303430#endif
     
    308435#ifdef SH_PURE_STUB_MODE
    309436    return NULL;
    310 #elif defined(SH_STUB_MODE)
    311 # ifdef _MSC_VER
     437
     438#elif defined(SH_STUB_MODE)
     439# ifdef _MSC_VER
     440    errno = ENOSYS;
    312441    return NULL;
    313442# else
     
    315444    return pde ? (shdirent *)&pde->d_name[0] : NULL;
    316445# endif
     446
    317447#else
    318448#endif
     
    323453#ifdef SH_PURE_STUB_MODE
    324454    return NULL;
    325 #elif defined(SH_STUB_MODE)
    326 # ifndef _MSC_VER
     455
     456#elif defined(SH_STUB_MODE)
     457# ifdef _MSC_VER
     458    errno = ENOSYS;
     459# else
    327460    closedir((DIR *)pdir);
    328461# endif
    329 #else
    330 #endif
    331 }
     462
     463#else
     464#endif
     465}
  • trunk/src/kash/tests/Makefile.kmk

    r2285 r2288  
    6262                echo 'kash tests: All tests succeeded.'; \
    6363        else \
    64                 echo "kash tests: $$KASH_FAILURE kash test failed"'!!'; \
     64                echo "kash tests: $$KASH_FAILURE tests failed"'!!'; \
     65                echo ""; \
    6566                exit 1; \
    6667        fi
  • trunk/src/kash/tests/trap-exit-1

    r2282 r2288  
    11#!/bin/sh
     2set -x
    23
    34trap 'echo "trap-exit-1: overriding exit 1"; exit 0' EXIT
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

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