VirtualBox

Changeset 1240 in kBuild for trunk


Ignore:
Timestamp:
Oct 10, 2007 2:32:54 AM (17 years ago)
Author:
bird
Message:

shfile_cloexec. signal types.

Location:
trunk/src/kash
Files:
7 edited

Legend:

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

    r1233 r1240  
    102102onint(shinstance *psh)
    103103{
    104         sh_sigset_t nsigset;
     104        shsigset_t nsigset;
    105105
    106106        if (psh->suppressint) {
  • trunk/src/kash/jobs.c

    r1233 r1240  
    102102                return;
    103103        if (on) {
    104 #if defined(FIOCLEX) || defined(FD_CLOEXEC)
    105104                int err;
    106105                int i;
     
    125124                        psh->ttyfd = err;
    126125                }
    127 #ifdef FIOCLEX
    128                 err = shfile_ioctl(&psh->fdtab, psh->ttyfd, FIOCLEX, 0);
    129 #elif FD_CLOEXEC
    130                 err = shfile_fcntl(&psh->fdtab, psh->ttyfd, F_SETFD,
    131                     shfile_fcntl(&psh->fdtab, psh->ttyfd, F_GETFD, 0) | FD_CLOEXEC);
    132 #endif
     126                err = shfile_cloexec(&psh->fdtab, psh->ttyfd, 1);
    133127                if (err == -1) {
    134128                        shfile_close(&psh->fdtab, psh->ttyfd);
     
    136130                        goto out;
    137131                }
    138 #else
    139                 out2str(psh, "sh: Need FIOCLEX or FD_CLOEXEC to support job control");
    140                 goto out;
    141 #endif
    142132                do { /* while we are in the background */
    143133                        if ((psh->initialpgrp = sh_tcgetpgrp(psh, psh->ttyfd)) < 0) {
  • trunk/src/kash/shfile.c

    r1233 r1240  
    2727#include "shfile.h"
    2828#include <stdlib.h>
     29#include <stdio.h>
    2930
    3031#ifdef KBUILD_OS_WINDOWS
     
    210211
    211212
     213int shfile_cloexec(shfdtab *pfdtab, int fd, int closeit)
     214{
     215#ifdef SH_PURE_STUB_MODE
     216    return -1;
     217#elif defined(SH_STUB_MODE)
     218# ifdef _MSC_VER
     219    return -1;
     220# else
     221    int rc = fcntl(fd, F_SETFD, fcntl(fd, F_GETFD, 0)
     222                              | (closeit ? FD_CLOEXEC : 0));
     223    fprintf(stderr, "shfile_cloexec(%d, %d) -> %d\n", fd, closeit, rc);
     224    return rc;
     225# endif
     226#else
     227#endif
     228
     229}
     230
     231
    212232int shfile_ioctl(shfdtab *pfdtab, int fd, unsigned long request, void *buf)
    213233{
     
    218238    return -1;
    219239# else
    220     return ioctl(fd, request, buf);
    221 # endif
    222 #else
    223 #endif
    224 }
     240    int rc = ioctl(fd, request, buf);
     241    fprintf(stderr, "ioctl(%d, %#x, %p) -> %d\n", fd, request, buf, rc);
     242    return rc;
     243# endif
     244#else
     245#endif
     246}
     247
    225248
    226249mode_t shfile_get_umask(shfdtab *pfdtab)
  • trunk/src/kash/shfile.h

    r1233 r1240  
    132132int shfile_access(shfdtab *, const char *, int);
    133133int shfile_isatty(shfdtab *, int);
     134int shfile_cloexec(shfdtab *, int, int);
    134135int shfile_ioctl(shfdtab *, int, unsigned long, void *);
    135136#ifdef _MSC_VER
  • trunk/src/kash/shinstance.c

    r1237 r1240  
    129129}
    130130
    131 int sh_sigaction(int signo, const struct sh_sigaction *newp, struct sh_sigaction *oldp)
     131int sh_sigaction(shinstance *psh, int signo, const struct shsigaction *newp, struct shsigaction *oldp)
    132132{
    133133#ifdef SH_PURE_STUB_MODE
     
    151151}
    152152
    153 sh_sig_t sh_signal(shinstance *psh, int signo, sh_sig_t handler)
    154 {
    155     return (sh_sig_t)-1;
     153shsig_t sh_signal(shinstance *psh, int signo, shsig_t handler)
     154{
     155    return (shsig_t)-1;
    156156}
    157157
     
    161161}
    162162
    163 void sh_sigemptyset(sh_sigset_t *setp)
     163void sh_sigemptyset(shsigset_t *setp)
    164164{
    165165    memset(setp, 0, sizeof(*setp));
    166166}
    167167
    168 int sh_sigprocmask(shinstance *psh, int operation, sh_sigset_t const *newp, sh_sigset_t *oldp)
     168int sh_sigprocmask(shinstance *psh, int operation, shsigset_t const *newp, shsigset_t *oldp)
    169169{
    170170    return -1;
  • trunk/src/kash/shinstance.h

    r1233 r1240  
    332332
    333333/* signals */
    334 typedef void (*sh_sig_t)(shinstance *, int);
    335 #ifdef _MSC_VER
    336     typedef uint32_t sh_sigset_t;
     334typedef void (*shsig_t)(shinstance *, int);
     335#ifdef _MSC_VER
     336    typedef uint32_t shsigset_t;
    337337#else
    338     typedef sigset_t sh_sigset_t;
    339 #endif
    340 struct sh_sigaction
     338    typedef sigset_t shsigset_t;
     339#endif
     340struct shsigaction
    341341{
    342     sh_sig_t    sh_handler;
    343     sh_sigset_t sh_mask;
     342    shsig_t     sh_handler;
     343    shsigset_t sh_mask;
    344344    int         sh_flags;
    345345};
    346 #define SH_SIG_DFL ((sh_sig_t)SIG_DFL)
    347 #define SH_SIG_IGN ((sh_sig_t)SIG_IGN)
     346#define SH_SIG_DFL ((shsig_t)SIG_DFL)
     347#define SH_SIG_IGN ((shsig_t)SIG_IGN)
    348348#ifdef _MSC_VER
    349349#   define SIG_BLOCK         1
     
    366366#endif
    367367
    368 int sh_sigaction(int, const struct sh_sigaction *, struct sh_sigaction *);
    369 sh_sig_t sh_signal(shinstance *, int, sh_sig_t);
     368int sh_sigaction(shinstance *, int, const struct shsigaction *, struct shsigaction *);
     369shsig_t sh_signal(shinstance *, int, shsig_t);
    370370int sh_siginterrupt(shinstance *, int, int);
    371 void sh_sigemptyset(sh_sigset_t *);
    372 int sh_sigprocmask(shinstance *, int, sh_sigset_t const *, sh_sigset_t *);
     371void sh_sigemptyset(shsigset_t *);
     372int sh_sigprocmask(shinstance *, int, shsigset_t const *, shsigset_t *);
    373373void sh_abort(shinstance *) __attribute__((__noreturn__));
    374374void sh_raise_sigint(shinstance *);
  • trunk/src/kash/trap.c

    r1233 r1240  
    8282//int pendingsigs;              /* indicates some signal received */
    8383
    84 static int getsigaction(shinstance *, int, sh_sig_t *);
     84static int getsigaction(shinstance *, int, shsig_t *);
    8585
    8686/*
     
    245245{
    246246        int action;
    247         sh_sig_t sigact = SH_SIG_DFL;
     247        shsig_t sigact = SH_SIG_DFL;
    248248        char *t, tsig;
    249249
     
    321321 */
    322322static int
    323 getsigaction(shinstance *psh, int signo, sh_sig_t *sigact)
    324 {
    325         struct sh_sigaction sa;
    326 
    327         if (sh_sigaction(signo, NULL, &sa) == -1)
     323getsigaction(shinstance *psh, int signo, shsig_t *sigact)
     324{
     325        struct shsigaction sa;
     326
     327        if (sh_sigaction(psh, signo, NULL, &sa) == -1)
    328328                return 0;
    329         *sigact = (sh_sig_t)sa.sh_handler;
     329        *sigact = (shsig_t)sa.sh_handler;
    330330        return 1;
    331331}
Note: See TracChangeset for help on using the changeset viewer.

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