VirtualBox

Changeset 1213 in kBuild for trunk/src


Ignore:
Timestamp:
Oct 7, 2007 7:13:10 PM (17 years ago)
Author:
bird
Message:

kill.c ++

Location:
trunk/src/kash
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kash/bltin/kill.c

    r1207 r1213  
    4747
    4848#include <ctype.h>
    49 #ifndef __sun__
    50 #include <err.h>
    51 #endif
    5249#include <errno.h>
    53 #include <signal.h>
    5450#include <stdio.h>
    5551#include <stdlib.h>
    5652#include <string.h>
    57 #include <termios.h>
    58 #include <unistd.h>
    59 #include <locale.h>
    60 #include <sys/ioctl.h>
     53#include "jobs.h"
     54#include "error.h"
     55#include "shinstance.h"
    6156
    6257#ifndef HAVE_SYS_SIGNAME
     
    6560#endif
    6661
    67 #ifdef SHELL            /* sh (aka ash) builtin */
    68 #define main killcmd
    69 #include "bltin/bltin.h"
    70 #include "jobs.h"
    71 #endif /* SHELL */
    72 
    73 static void nosig(char *);
    74 static void printsignals(FILE *);
     62static int nosig(shinstance *, char *);
     63static void printsignals(shinstance *, struct output *);
    7564static int signame_to_signum(char *);
    76 static void usage(void);
    77 int main(int, char *[]);
     65static int usage(shinstance *psh);
    7866
    7967int
    80 main(int argc, char *argv[])
     68killcmd(shinstance *psh, int argc, char *argv[])
    8169{
    8270        int errors, numsig, pid;
    8371        char *ep;
    8472
    85         setprogname(argv[0]);
    86         setlocale(LC_ALL, "");
    8773        if (argc < 2)
    88                 usage();
     74                return usage(psh);
    8975
    9076        numsig = SIGTERM;
     77#ifndef HAVE_SYS_SIGNAME
     78        init_sys_signame();
     79#endif
    9180
    9281        argc--, argv++;
     
    9483                argc--, argv++;
    9584                if (argc > 1)
    96                         usage();
     85                        return usage(psh);
    9786                if (argc == 1) {
    9887                        if (isdigit((unsigned char)**argv) == 0)
    99                                 usage();
     88                                return usage(psh);
    10089                        numsig = strtol(*argv, &ep, 10);
    10190                        if (*ep != '\0') {
    102                                 errx(EXIT_FAILURE, "illegal signal number: %s",
     91                                sh_errx(psh, EXIT_FAILURE, "illegal signal number: %s",
    10392                                                *argv);
    10493                                /* NOTREACHED */
     
    10796                                numsig -= 128;
    10897                        if (numsig <= 0 || numsig >= NSIG)
    109                                 nosig(*argv);
    110 #ifndef HAVE_SYS_SIGNAME
    111                         init_sys_signame();
    112 #endif
    113                         printf("%s\n", sys_signame[numsig]);
    114                         exit(0);
    115                 }
    116                 printsignals(stdout);
    117                 exit(0);
     98                                return nosig(psh, *argv);
     99                        outfmt(psh->out1, "%s\n", sys_signame[numsig]);
     100                        //sh_exit(psh, 0);
     101                        return 0;
     102                }
     103                printsignals(psh, psh->out1);
     104                //sh_exit(psh, 0);
     105                return 0;
    118106        }
    119107
     
    121109                argc--, argv++;
    122110                if (argc < 1) {
    123                         warnx("option requires an argument -- s");
    124                         usage();
     111                        sh_warnx(psh, "option requires an argument -- s");
     112                        return usage(psh);
    125113                }
    126114                if (strcmp(*argv, "0")) {
    127115                        if ((numsig = signame_to_signum(*argv)) < 0)
    128                                 nosig(*argv);
     116                                return nosig(psh, *argv);
    129117                } else
    130118                        numsig = 0;
     
    134122                if (isalpha((unsigned char)**argv)) {
    135123                        if ((numsig = signame_to_signum(*argv)) < 0)
    136                                 nosig(*argv);
     124                                return nosig(psh, *argv);
    137125                } else if (isdigit((unsigned char)**argv)) {
    138126                        numsig = strtol(*argv, &ep, 10);
    139127                        if (!*argv || *ep) {
    140                                 errx(EXIT_FAILURE, "illegal signal number: %s",
     128                                sh_errx(psh, EXIT_FAILURE, "illegal signal number: %s",
    141129                                                *argv);
    142130                                /* NOTREACHED */
    143131                        }
    144132                        if (numsig < 0 || numsig >= NSIG)
    145                                 nosig(*argv);
     133                                return nosig(psh, *argv);
    146134                } else
    147                         nosig(*argv);
     135                        return nosig(psh, *argv);
    148136                argc--, argv++;
    149137        }
    150138
    151139        if (argc == 0)
    152                 usage();
     140                return usage(psh);
    153141
    154142        for (errors = 0; argc; argc--, argv++) {
    155 #ifdef SHELL
    156143                if (*argv[0] == '%') {
    157144                        pid = getjobpgrp(psh, *argv);
    158145                        if (pid == 0) {
    159                                 warnx("illegal job id: %s", *argv);
     146                                sh_warnx(psh, "illegal job id: %s", *argv);
    160147                                errors = 1;
    161148                                continue;
    162149                        }
    163                 } else
    164 #endif
    165                 {
     150                } else {
    166151                        pid = strtol(*argv, &ep, 10);
    167152                        if (!**argv || *ep) {
    168                                 warnx("illegal process id: %s", *argv);
     153                                sh_warnx(psh, "illegal process id: %s", *argv);
    169154                                errors = 1;
    170155                                continue;
    171156                        }
    172157                }
    173                 if (kill(pid, numsig) == -1) {
    174                         warn("%s", *argv);
     158                if (sh_kill(psh, pid, numsig) == -1) {
     159                        sh_warn(psh, "%s", *argv);
    175160                        errors = 1;
    176161                }
    177 #ifdef SHELL
    178162                /* Wakeup the process if it was suspended, so it can
    179163                   exit without an explicit 'fg'. */
    180164                if (numsig == SIGTERM || numsig == SIGHUP)
    181                         kill(pid, SIGCONT);
    182 #endif
    183         }
    184 
    185         exit(errors);
    186         /* NOTREACHED */
     165                        sh_kill(psh, pid, SIGCONT);
     166        }
     167
     168        //sh_exit(psh, errors);
     169        ///* NOTREACHED */
     170        return errors;
    187171}
    188172
     
    191175{
    192176        int n;
    193 #ifndef HAVE_SYS_SIGNAME
    194         init_sys_signame();
    195 #endif
    196177        if (strncasecmp(sig, "sig", 3) == 0)
    197178                sig += 3;
     
    203184}
    204185
     186static int
     187nosig(shinstance *psh, char *name)
     188{
     189        sh_warnx(psh, "unknown signal %s; valid signals:", name);
     190        printsignals(psh, psh->out2);
     191        //sh_exit(psh, 1);
     192        ///* NOTREACHED */
     193        return 1;
     194}
     195
    205196static void
    206 nosig(char *name)
    207 {
    208 
    209         warnx("unknown signal %s; valid signals:", name);
    210         printsignals(stderr);
    211         exit(1);
    212         /* NOTREACHED */
    213 }
    214 
    215 static void
    216 printsignals(FILE *fp)
     197printsignals(shinstance *psh, struct output *out)
    217198{
    218199        int sig;
    219         int len, nl;
     200        size_t len, nl;
    220201        const char *name;
    221202        int termwidth = 80;
    222203
    223 #ifdef TIOCGWINSZ
    224         if (isatty(fileno(fp))) {
    225                 struct winsize win;
    226                 if (ioctl(fileno(fp), TIOCGWINSZ, &win) == 0 && win.ws_col > 0)
     204        if (shfile_isatty(&psh->fdtab, out->fd)) {
     205                sh_winsize win;
     206                if (shfile_ioctl(&psh->fdtab, out->fd, TIOCGWINSZ, &win) == 0 && win.ws_col > 0)
    227207                        termwidth = win.ws_col;
    228208        }
    229 #else
    230 #ifndef _MSC_VER
    231 #warning TIOCGWINSZ is not present.
    232 #endif
    233 #endif
    234 #ifndef HAVE_SYS_SIGNAME
    235     init_sys_signame();
    236 #endif
    237209
    238210        for (len = 0, sig = 1; sig < NSIG; sig++) {
     
    241213
    242214                if (len + nl >= termwidth) {
    243                         fprintf(fp, "\n");
     215                        outfmt(out, "\n");
    244216                        len = 0;
    245                 } else
    246                         if (len != 0)
    247                                 fprintf(fp, " ");
     217                } else if (len != 0)
     218                        outfmt(out, " ");
    248219                len += nl;
    249                 fprintf(fp, "%s", name);
     220                outfmt(out, "%s", name);
    250221        }
    251222        if (len != 0)
    252                 fprintf(fp, "\n");
    253 }
    254 
    255 static void
    256 usage(void)
    257 {
    258 
    259         fprintf(stderr, "usage: %s [-s signal_name] pid ...\n"
     223                outfmt(out, "\n");
     224}
     225
     226static int
     227usage(shinstance *psh)
     228{
     229        outfmt(psh->out2,
     230            "usage: %s [-s signal_name] pid ...\n"
    260231            "       %s -l [exit_status]\n"
    261232            "       %s -signal_name pid ...\n"
    262233            "       %s -signal_number pid ...\n",
    263             getprogname(), getprogname(), getprogname(), getprogname());
    264         exit(1);
    265         /* NOTREACHED */
    266 }
     234            psh->commandname, psh->commandname, psh->commandname, psh->commandname);
     235        //sh_exit(psh, 1);
     236        ///* NOTREACHED */
     237        return 1;
     238}
  • trunk/src/kash/error.h

    r881 r1213  
    3434 *      @(#)error.h     8.2 (Berkeley) 5/4/95
    3535 */
     36
     37#ifndef ___error_h
     38#define ___error_h
    3639
    3740#include <stdarg.h>
     
    117120#define longjmp(jmploc, val)    _longjmp(jmploc, val)
    118121#endif
     122
     123#endif
  • trunk/src/kash/shfile.h

    r1207 r1213  
    114114char *shfile_getcwd(shfdtab *, char *, int);
    115115int shfile_isatty(shfdtab *, int);
    116 int shfile_ioctl(shfdtab *, int, unsigned long, char *);
     116int shfile_ioctl(shfdtab *, int, unsigned long, void *);
    117117int shfile_access(shfdtab *, const char *, int);
     118#ifdef _MSC_VER
     119# define TIOCGWINSZ         0x4201
     120typedef struct sh_winsize
     121{
     122    unsigned ws_row;        /**< Rows, in characters. */
     123    unsigned ws_col;        /**< Columns, in characters. */
     124    unsigned ws_xpixel;     /**< Horizontal size, pixels. */
     125    unsigned ws_ypixel;     /**< Vertical size, pixels. */
     126} sh_winsize;
     127#else
     128typedef struct winsize sh_winsize;
     129#endif
    118130
    119131#endif
  • trunk/src/kash/shinstance.h

    r1211 r1213  
    2525 */
    2626
    27 #ifndef ___shinstance_h___
    28 #define ___shinstance_h___
     27#ifndef ___shinstance_h
     28#define ___shinstance_h
    2929
    3030#include <stdio.h> /* BUFSIZ */
    3131#include <signal.h> /* NSIG */
     32#ifndef _MSC_VER
     33# include <termios.h>
     34# include <sys/ioctl.h>
     35#endif
    3236
    3337#include "shtypes.h"
     
    4044#include "exec.h"
    4145#include "var.h"
     46
     47#ifdef _MSC_VER
     48# define strcasecmp stricmp
     49# define strncasecmp strnicmp
     50#endif
     51
    4252
    4353/* memalloc.c */
     
    330340#define SH_SIG_DFL ((sh_sig_t)SIG_DFL)
    331341#define SH_SIG_IGN ((sh_sig_t)SIG_IGN)
     342#ifdef _MSC_VER
     343# define SIG_BLOCK          1
     344# define SIG_UNBLOCK        2
     345# define SIG_SETMASK        3
     346# define SIGHUP             5
     347# define SIGQUIT            9
     348# define SIGPIPE            12
     349# define SIGTTOU            17
     350# define SIGTSTP            18
     351# define SIGTTIN            19
     352# define SIGCONT            20
     353#endif /* _MSC_VER */
    332354
    333355int sh_sigaction(int, const struct sh_sigaction *, struct sh_sigaction *);
     
    389411pid_t sh_getpgid(shinstance *, pid_t);
    390412int sh_setpgid(shinstance *, pid_t, pid_t);
     413int sh_kill(shinstance *, pid_t, int);
    391414int sh_killpg(shinstance *, pid_t, int);
    392415
  • trunk/src/kash/sys_signame.c

    r813 r1213  
    11/*
    2  * Fake sys_signame. 
     2 * Fake sys_signame.
    33 */
    44
    5 #include <signal.h>
     5#include "shinstance.h" /* for MSC */
    66#include <string.h>
    77#include <stdio.h>
     
    99static char sys_signame_initialized = 0;
    1010char sys_signame[NSIG][16];
    11              
     11
    1212void init_sys_signame(void)
    1313{
    1414    unsigned i;
    1515        if (sys_signame_initialized)
    16         return;
    17     for (i = 0; i < NSIG; ++i)
    18         sprintf(sys_signame[i], "%d", i);
     16                return;
     17        for (i = 0; i < NSIG; ++i)
     18                sprintf(sys_signame[i], "%d", i);
    1919#define SET_SIG_STR(sig) strcpy(sys_signame[SIG##sig], #sig);
    2020#ifdef SIGHUP
    21     SET_SIG_STR(HUP);
    22 #endif 
     21        SET_SIG_STR(HUP);
     22#endif
    2323#ifdef SIGINT
    24     SET_SIG_STR(INT);
    25 #endif 
     24        SET_SIG_STR(INT);
     25#endif
    2626#ifdef SIGQUIT
    27     SET_SIG_STR(QUIT);
    28 #endif 
     27        SET_SIG_STR(QUIT);
     28#endif
    2929#ifdef SIGILL
    30     SET_SIG_STR(ILL);
    31 #endif 
     30        SET_SIG_STR(ILL);
     31#endif
    3232#ifdef SIGTRAP
    33     SET_SIG_STR(TRAP);
    34 #endif 
     33        SET_SIG_STR(TRAP);
     34#endif
    3535#ifdef SIGABRT
    36     SET_SIG_STR(ABRT);
    37 #endif 
     36        SET_SIG_STR(ABRT);
     37#endif
    3838#ifdef SIGIOT
    39     SET_SIG_STR(IOT);
    40 #endif 
     39        SET_SIG_STR(IOT);
     40#endif
    4141#ifdef SIGBUS
    42     SET_SIG_STR(BUS);
    43 #endif 
     42        SET_SIG_STR(BUS);
     43#endif
    4444#ifdef SIGFPE
    45     SET_SIG_STR(FPE);
    46 #endif 
     45        SET_SIG_STR(FPE);
     46#endif
    4747#ifdef SIGKILL
    48     SET_SIG_STR(KILL);
    49 #endif 
     48        SET_SIG_STR(KILL);
     49#endif
    5050#ifdef SIGUSR1
    51     SET_SIG_STR(USR1);
    52 #endif 
     51        SET_SIG_STR(USR1);
     52#endif
    5353#ifdef SIGSEGV
    54     SET_SIG_STR(SEGV);
    55 #endif 
     54        SET_SIG_STR(SEGV);
     55#endif
    5656#ifdef SIGUSR2
    57     SET_SIG_STR(USR2);
    58 #endif 
     57        SET_SIG_STR(USR2);
     58#endif
    5959#ifdef SIGPIPE
    60     SET_SIG_STR(PIPE);
    61 #endif 
     60        SET_SIG_STR(PIPE);
     61#endif
    6262#ifdef SIGALRM
    63     SET_SIG_STR(ALRM);
    64 #endif 
     63        SET_SIG_STR(ALRM);
     64#endif
    6565#ifdef SIGTERM
    66     SET_SIG_STR(TERM);
    67 #endif 
     66        SET_SIG_STR(TERM);
     67#endif
    6868#ifdef SIGSTKFLT
    69     SET_SIG_STR(STKFLT);
    70 #endif 
     69        SET_SIG_STR(STKFLT);
     70#endif
    7171#ifdef SIGCHLD
    72     SET_SIG_STR(CHLD);
    73 #endif 
     72        SET_SIG_STR(CHLD);
     73#endif
    7474#ifdef SIGCONT
    75     SET_SIG_STR(CONT);
    76 #endif 
     75        SET_SIG_STR(CONT);
     76#endif
    7777#ifdef SIGSTOP
    78     SET_SIG_STR(STOP);
    79 #endif 
     78        SET_SIG_STR(STOP);
     79#endif
    8080#ifdef SIGTSTP
    81     SET_SIG_STR(TSTP);
    82 #endif 
     81        SET_SIG_STR(TSTP);
     82#endif
    8383#ifdef SIGTTIN
    84     SET_SIG_STR(TTIN);
    85 #endif 
     84        SET_SIG_STR(TTIN);
     85#endif
    8686#ifdef SIGTTOU
    87     SET_SIG_STR(TTOU);
    88 #endif 
     87        SET_SIG_STR(TTOU);
     88#endif
    8989#ifdef SIGURG
    90     SET_SIG_STR(URG);
    91 #endif 
     90        SET_SIG_STR(URG);
     91#endif
    9292#ifdef SIGXCPU
    93     SET_SIG_STR(XCPU);
    94 #endif 
     93        SET_SIG_STR(XCPU);
     94#endif
    9595#ifdef SIGXFSZ
    96     SET_SIG_STR(XFSZ);
    97 #endif 
     96        SET_SIG_STR(XFSZ);
     97#endif
    9898#ifdef SIGVTALRM
    99     SET_SIG_STR(VTALRM);
    100 #endif 
     99        SET_SIG_STR(VTALRM);
     100#endif
    101101#ifdef SIGPROF
    102     SET_SIG_STR(PROF);
    103 #endif 
     102        SET_SIG_STR(PROF);
     103#endif
    104104#ifdef SIGWINCH
    105     SET_SIG_STR(WINCH);
    106 #endif 
     105        SET_SIG_STR(WINCH);
     106#endif
    107107#ifdef SIGIO
    108     SET_SIG_STR(IO);
    109 #endif 
     108        SET_SIG_STR(IO);
     109#endif
    110110#ifdef SIGPWR
    111     SET_SIG_STR(PWR);
    112 #endif 
     111        SET_SIG_STR(PWR);
     112#endif
    113113#ifdef SIGSYS
    114     SET_SIG_STR(SYS);
    115 #endif 
     114        SET_SIG_STR(SYS);
     115#endif
    116116#ifdef SIGBREAK
    117     SET_SIG_STR(BREAK);
    118 #endif 
     117        SET_SIG_STR(BREAK);
     118#endif
    119119#undef SET_SIG_STR
    120     sys_signame_initialized = 1;
     120        sys_signame_initialized = 1;
    121121}
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