VirtualBox

Changeset 1199 in kBuild for trunk/src/kash


Ignore:
Timestamp:
Oct 6, 2007 10:04:05 PM (17 years ago)
Author:
bird
Message:

moving globals into shinstance...

Location:
trunk/src/kash
Files:
26 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kash/Makefile.kmk

    r1198 r1199  
    1515kmk_ash_TEMPLATE = BIN
    1616kmk_ash_DEFS = lint SHELL SMALL
     17kmk_ash_DEFS.debug = DEBUG
    1718kmk_ash_DEFS.linux = BSD
    1819kmk_ash_DEFS.solaris = BSD
     
    4243        show.c \
    4344        syntax.c \
     45        output.c \
    4446        \
    45         output.c \
    4647        exec.c \
    4748        expand.c \
  • trunk/src/kash/bltin/bltin.h

    r880 r1199  
    5555#define printf out1fmt
    5656#define putc(c, file)   outc(c, file)
    57 #define putchar(c)      out1c(c)
     57#define putchar(c)      out1c(psh, c)
    5858#define FILE struct output
    5959#define fprintf outfmt
  • trunk/src/kash/cd.c

    r1198 r1199  
    161161        int badstat;
    162162
    163         TRACE(("docd(\"%s\", %d) called\n", dest, print));
     163        TRACE((psh, "docd(\"%s\", %d) called\n", dest, print));
    164164
    165165        /*
     
    410410                INTOFF;
    411411                if (pipe(pip) < 0)
    412                         error("Pipe call failed");
     412                        error(psh, "Pipe call failed");
    413413                jp = makejob((union node *)NULL, 1);
    414414                if (forkshell(jp, (union node *)NULL, FORK_NOJOB) == 0) {
     
    420420                        }
    421421                        (void) execl("/bin/pwd", "pwd", (char *)0);
    422                         error("Cannot exec /bin/pwd");
     422                        error(psh, "Cannot exec /bin/pwd");
    423423                }
    424424                (void) close(pip[1]);
     
    434434                status = waitforjob(jp);
    435435                if (status != 0)
    436                         error((char *)0);
     436                        error(psh, (char *)0);
    437437                if (i < 0 || p == pwd || p[-1] != '\n') {
    438438                        if (noerror) {
     
    440440                                return;
    441441                        }
    442                         error("pwd command failed");
     442                        error(psh, "pwd command failed");
    443443                }
    444444                p[-1] = '\0';
  • trunk/src/kash/error.c

    r1198 r1199  
    162162#ifdef DEBUG
    163163        if (msg) {
    164                 TRACE(("exverror(%d, \"", cond));
    165                 TRACEV((msg, ap));
    166                 TRACE(("\") pid=%d\n", getpid()));
     164                TRACE((psh, "exverror(%d, \"", cond));
     165                TRACEV((psh, msg, ap));
     166                TRACE((psh, "\") pid=%d\n", getpid()));
    167167        } else
    168                 TRACE(("exverror(%d, NULL) pid=%d\n", cond, getpid()));
     168                TRACE((psh, "exverror(%d, NULL) pid=%d\n", cond, getpid()));
    169169#endif
    170170        if (msg)
  • trunk/src/kash/eval.c

    r1198 r1199  
    226226{
    227227        if (n == NULL) {
    228                 TRACE(("evaltree(NULL) called\n"));
     228                TRACE((psh, "evaltree(NULL) called\n"));
    229229                psh->exitstatus = 0;
    230230                goto out;
     
    233233        psh->displayhist = 1;   /* show history substitutions done with fc */
    234234#endif
    235         TRACE(("pid %d, evaltree(%p: %d, %d) called\n",
    236             getpid(), n, n->type, flags));
     235        TRACE((psh, "pid %d, evaltree(%p: %d, %d) called\n",
     236               getpid(), n, n->type, flags));
    237237        switch (n->type) {
    238238        case NSEMI:
     
    500500        int pip[2];
    501501
    502         TRACE(("evalpipe(0x%lx) called\n", (long)n));
     502        TRACE((psh, "evalpipe(0x%lx) called\n", (long)n));
    503503        pipelen = 0;
    504504        for (lp = n->npipe.cmdlist ; lp ; lp = lp->next)
     
    540540        if (n->npipe.backgnd == 0) {
    541541                psh->exitstatus = waitforjob(psh, jp);
    542                 TRACE(("evalpipe:  job done exit status %d\n", psh->exitstatus));
     542                TRACE((psh, "evalpipe:  job done exit status %d\n", psh->exitstatus));
    543543        }
    544544        INTON;
     
    605605out:
    606606        popstackmark(psh, &smark);
    607         TRACE(("evalbackcmd done: fd=%d buf=0x%x nleft=%d jp=0x%x\n",
     607        TRACE((psh, "evalbackcmd done: fd=%d buf=0x%x nleft=%d jp=0x%x\n",
    608608                result->fd, result->buf, result->nleft, result->jp));
    609609}
     
    716716        psh->vforked = 0;
    717717        /* First expand the arguments. */
    718         TRACE(("evalcommand(0x%lx, %d) called\n", (long)cmd, flags));
     718        TRACE((psh, "evalcommand(0x%lx, %d) called\n", (long)cmd, flags));
    719719        setstackmark(psh, &smark);
    720720        psh->exitstatus = 0;
     
    760760
    761761        for (sp = arglist.list ; sp ; sp = sp->next) {
    762                 TRACE(("evalcommand arg: %s\n", sp->text));
     762                TRACE((psh, "evalcommand arg: %s\n", sp->text));
    763763                *argv++ = sp->text;
    764764        }
     
    864864                        switch (pid = vfork()) {
    865865                        case -1:
    866                                 TRACE(("Vfork failed, errno=%d\n", errno));
     866                                TRACE((psh, "Vfork failed, errno=%d\n", errno));
    867867                                INTON;
    868868                                error(psh, "Cannot vfork");
     
    932932        case CMDFUNCTION:
    933933#ifdef DEBUG
    934                 trputs("Shell function:  ");  trargs(argv);
     934                trputs(psh, "Shell function:  ");  trargs(psh, argv);
    935935#endif
    936936                redirect(psh, cmd->ncmd.redirect, REDIR_PUSH);
     
    985985        case CMDSPLBLTIN:
    986986#ifdef DEBUG
    987                 trputs("builtin command:  ");  trargs(argv);
     987                trputs(psh, "builtin command:  ");  trargs(psh, argv);
    988988#endif
    989989                mode = (cmdentry.u.bltin == execcmd) ? 0 : REDIR_PUSH;
     
    10691069        default:
    10701070#ifdef DEBUG
    1071                 trputs("normal command:  ");  trargs(argv);
     1071                trputs(psh, "normal command:  ");  trargs(psh, argv);
    10721072#endif
    10731073                clearredir(psh, psh->vforked);
  • trunk/src/kash/exec.c

    r1198 r1199  
    144144        const int has_ext = 1;
    145145#endif
    146         TRACE(("shellexec: argv[0]=%s idx=%d\n", argv[0], idx));
     146        TRACE((psh, "shellexec: argv[0]=%s idx=%d\n", argv[0], idx));
    147147        if (strchr(argv[0], '/') != NULL) {
    148148                cmdname = stalloc(psh, strlen(argv[0]) + 5);
    149149                strcpy(cmdname, argv[0]);
    150150                tryexec(cmdname, argv, envp, vforked, has_ext);
    151                 TRACE(("shellexec: cmdname=%s\n", cmdname));
     151                TRACE((psh, "shellexec: cmdname=%s\n", cmdname));
    152152                stunalloc(psh, cmdname);
    153153                e = errno;
     
    176176                break;
    177177        }
    178         TRACE(("shellexec failed for '%s', errno %d, vforked %d, suppressint %d\n",
     178        TRACE((psh, "shellexec failed for '%s', errno %d, vforked %d, suppressint %d\n",
    179179                argv[0], e, vforked, suppressint ));
    180         exerror(EXEXEC, "%s: %s", argv[0], errmsg(e, E_EXEC));
     180        exerror(psh, EXEXEC, "%s: %s", argv[0], errmsg(psh, e, E_EXEC));
    181181        /* NOTREACHED */
    182182}
     
    216216                         * with a normal fork(2).
    217217                         */
    218                         exraise(EXSHELLPROC);
     218                        exraise(psh, EXSHELLPROC);
    219219                }
    220220                initshellproc();
     
    230230#endif
    231231                setparam(argv + 1);
    232                 exraise(EXSHELLPROC);
     232                exraise(psh, EXSHELLPROC);
    233233        }
    234234        errno = e;
     
    274274                        break;
    275275                if (ap == &newargs[NEWARGS])
    276 bad:              error("Bad #! line");
     276bad:              error(psh, "Bad #! line");
    277277                STARTSTACKSTR(psh, outp);
    278278                do {
     
    287287                for (;;) {
    288288                        if (equal(p, "sh") || equal(p, "ash")) {
    289                                 TRACE(("hash bang self\n"));
     289                                TRACE((psh, "hash bang self\n"));
    290290                                return;
    291291                        }
     
    301301        i = (char *)ap - (char *)newargs;               /* size in bytes */
    302302        if (i == 0)
    303                 error("Bad #! line");
     303                error(psh, "Bad #! line");
    304304        for (ap2 = argv ; *ap2++ != NULL ; );
    305305        new = ckmalloc(i + ((char *)ap2 - (char *)argv));
     
    309309        ap = argv;
    310310        while (*ap2++ = *ap++);
    311         TRACE(("hash bang '%s'\n", new[0]));
     311        TRACE((psh, "hash bang '%s'\n", new[0]));
    312312        shellexec(new, envp, pathval(), 0, 0);
    313313        /* NOTREACHED */
     
    464464                                printentry(cmdp, verbose);
    465465                        }
    466                         output_flushall();
     466                        output_flushall(psh);
    467467                }
    468468                argptr++;
     
    487487                        stunalloc(psh, name);
    488488                } while (--idx >= 0);
    489                 out1str(name);
     489                out1str(psh, name);
    490490                break;
    491491        case CMDSPLBLTIN:
    492                 out1fmt("special builtin %s", cmdp->cmdname);
     492                out1fmt(psh, "special builtin %s", cmdp->cmdname);
    493493                break;
    494494        case CMDBUILTIN:
    495                 out1fmt("builtin %s", cmdp->cmdname);
     495                out1fmt(psh, "builtin %s", cmdp->cmdname);
    496496                break;
    497497        case CMDFUNCTION:
    498                 out1fmt("function %s", cmdp->cmdname);
     498                out1fmt(psh, "function %s", cmdp->cmdname);
    499499                if (verbose) {
    500500                        struct procstat ps;
     
    502502                        commandtext(&ps, cmdp->param.func);
    503503                        INTON;
    504                         out1str("() { ");
    505                         out1str(ps.cmd);
    506                         out1str("; }");
     504                        out1str(psh, "() { ");
     505                        out1str(psh, ps.cmd);
     506                        out1str(psh, "; }");
    507507                }
    508508                break;
    509509        default:
    510                 error("internal error: %s cmdtype %d", cmdp->cmdname, cmdp->cmdtype);
     510                error(psh, "internal error: %s cmdtype %d", cmdp->cmdname, cmdp->cmdtype);
    511511        }
    512512        if (cmdp->rehash)
    513                 out1c('*');
    514         out1c('\n');
     513                out1c(psh, '*');
     514        out1c(psh, '\n');
    515515}
    516516
     
    641641                        if (idx < prev)
    642642                                goto loop;
    643                         TRACE(("searchexec \"%s\": no change\n", name));
     643                        TRACE((psh, "searchexec \"%s\": no change\n", name));
    644644                        goto success;
    645645                }
     
    668668                        if ((cmdp = cmdlookup(name, 0)) == NULL ||
    669669                            cmdp->cmdtype != CMDFUNCTION)
    670                                 error("%s not defined in %s", name, fullname);
     670                                error(psh, "%s not defined in %s", name, fullname);
    671671                        stunalloc(psh, fullname);
    672672                        goto success;
     
    686686                }
    687687#endif
    688                 TRACE(("searchexec \"%s\" returns \"%s\"\n", name, fullname));
     688                TRACE((psh, "searchexec \"%s\" returns \"%s\"\n", name, fullname));
    689689                INTOFF;
    690690                if (act & DO_ALTPATH) {
     
    703703                delete_cmd_entry();
    704704        if (act & DO_ERR)
    705                 outfmt(out2, "%s: %s\n", name, errmsg(e, E_EXEC));
     705                outfmt(out2, "%s: %s\n", name, errmsg(psh, e, E_EXEC));
    706706        entry->cmdtype = CMDUNKNOWN;
    707707        return;
     
    10941094
    10951095        if (p_flag && (v_flag || V_flag))
    1096                 error("cannot specify -p with -v or -V");
     1096                error(psh, "cannot specify -p with -v or -V");
    10971097
    10981098        while ((arg = *argptr++)) {
    10991099                if (!v_flag)
    1100                         out1str(arg);
     1100                        out1str(psh, arg);
    11011101                /* First look at the keywords */
    11021102                for (pp = parsekwd; *pp; pp++)
     
    11081108                                err = 1;
    11091109                        else
    1110                                 out1str(" is a shell keyword\n");
     1110                                out1str(psh, " is a shell keyword\n");
    11111111                        continue;
    11121112                }
    11131113
    11141114                /* Then look at the aliases */
    1115                 if ((ap = lookupalias(arg, 1)) != NULL) {
     1115                if ((ap = lookupalias(psh, arg, 1)) != NULL) {
    11161116                        if (!v_flag)
    1117                                 out1fmt(" is an alias for \n");
    1118                         out1fmt("%s\n", ap->val);
     1117                                out1fmt(psh, " is an alias for \n");
     1118                        out1fmt(psh, "%s\n", ap->val);
    11191119                        continue;
    11201120                }
     
    11401140                                } while (--j >= 0);
    11411141                                if (!v_flag)
    1142                                         out1fmt(" is%s ",
     1142                                        out1fmt(psh, " is%s ",
    11431143                                            cmdp ? " a tracked alias for" : "");
    1144                                 out1fmt("%s\n", name);
     1144                                out1fmt(psh, "%s\n", name);
    11451145                        } else {
    11461146                                if (access(arg, X_OK) == 0) {
    11471147                                        if (!v_flag)
    1148                                                 out1fmt(" is ");
    1149                                         out1fmt("%s\n", arg);
     1148                                                out1fmt(psh, " is ");
     1149                                        out1fmt(psh, "%s\n", arg);
    11501150                                } else {
    11511151                                        if (!v_flag)
    1152                                                 out1fmt(": %s\n",
     1152                                                out1fmt(psh, ": %s\n",
    11531153                                                    strerror(errno));
    11541154                                        else
     
    11601160                case CMDFUNCTION:
    11611161                        if (!v_flag)
    1162                                 out1str(" is a shell function\n");
     1162                                out1str(psh, " is a shell function\n");
    11631163                        else
    1164                                 out1fmt("%s\n", arg);
     1164                                out1fmt(psh, "%s\n", arg);
    11651165                        break;
    11661166
    11671167                case CMDBUILTIN:
    11681168                        if (!v_flag)
    1169                                 out1str(" is a shell builtin\n");
     1169                                out1str(psh, " is a shell builtin\n");
    11701170                        else
    1171                                 out1fmt("%s\n", arg);
     1171                                out1fmt(psh, "%s\n", arg);
    11721172                        break;
    11731173
    11741174                case CMDSPLBLTIN:
    11751175                        if (!v_flag)
    1176                                 out1str(" is a special shell builtin\n");
     1176                                out1str(psh, " is a special shell builtin\n");
    11771177                        else
    1178                                 out1fmt("%s\n", arg);
     1178                                out1fmt(psh, "%s\n", arg);
    11791179                        break;
    11801180
    11811181                default:
    11821182                        if (!v_flag)
    1183                                 out1str(": not found\n");
     1183                                out1str(psh, ": not found\n");
    11841184                        err = 127;
    11851185                        break;
  • trunk/src/kash/expand.c

    r1198 r1199  
    385385                --p;
    386386        if (*p != CTLARI)
    387                 error("missing CTLARI (shouldn't happen)");
     387                error(psh, "missing CTLARI (shouldn't happen)");
    388388        if (p > start && *(p-1) == CTLESC)
    389389                for (p = start; *p != CTLARI; p++)
     
    453453                                break;
    454454                        while ((i = read(in.fd, buf, sizeof buf)) < 0 && errno == EINTR);
    455                         TRACE(("expbackq: read returns %d\n", i));
     455                        TRACE((psh, "expbackq: read returns %d\n", i));
    456456                        if (i <= 0)
    457457                                break;
     
    480480        if (quoted == 0)
    481481                recordregion(startloc, dest - stackblock(psh), 0);
    482         TRACE(("evalbackq: size=%d: \"%.*s\"\n",
     482        TRACE((psh, "evalbackq: size=%d: \"%.*s\"\n",
    483483                (dest - stackblock(psh)) - startloc,
    484484                (dest - stackblock(psh)) - startloc,
     
    523523                if (*p != CTLENDVAR) {
    524524                        outfmt(&errout, "%s\n", startp);
    525                         error((char *)NULL);
    526                 }
    527                 error("%.*s: parameter %snot set", p - str - 1,
     525                        error(psh, (char *)NULL);
     526                }
     527                error(psh, "%.*s: parameter %snot set", p - str - 1,
    528528                      str, (varflags & VSNUL) ? "null or "
    529529                                              : nullstr);
     
    658658                case VSTRIMRIGHTMAX:
    659659                case VSLENGTH:
    660                         error("%.*s: parameter not set", p - var - 1, var);
     660                        error(psh, "%.*s: parameter not set", p - var - 1, var);
    661661                        /* NOTREACHED */
    662662                }
     
    15561556        int i;
    15571557
    1558         out1fmt("%d", argc - 1);
    1559         out1c('\0');
     1558        out1fmt(psh, "%d", argc - 1);
     1559        out1c(psh, '\0');
    15601560        for (i = 1, len = 0; i < argc; i++)
    15611561                len += strlen(argv[i]);
    1562         out1fmt("%zd", len);
    1563         out1c('\0');
     1562        out1fmt(psh, "%zd", len);
     1563        out1c(psh, '\0');
    15641564        for (i = 1; i < argc; i++) {
    1565                 out1str(argv[i]);
    1566                 out1c('\0');
     1565                out1str(psh, argv[i]);
     1566                out1c(psh, '\0');
    15671567        }
    15681568        return (0);
  • trunk/src/kash/generated/arith.c

    r1198 r1199  
    346346        i = arith(p);
    347347
    348         out1fmt("%ld\n", i);
     348        out1fmt(psh, "%ld\n", i);
    349349        return (! i);
    350350}
  • trunk/src/kash/generated/init.c

    r1198 r1199  
    118118
    119119
    120 extern void rmaliases(void);
     120extern void rmaliases(struct shinstance *);
    121121
    122122extern int loopnest;            /* current loop nesting level */
     
    256256      /* from alias.c: */
    257257      {
    258               rmaliases();
     258              rmaliases(psh);
    259259      }
    260260
  • trunk/src/kash/histedit.c

    r1198 r1199  
    105105                                sethistsize(histsizeval());
    106106                        else
    107                                 out2str("sh: can't initialize history\n");
     107                                out2str(psh, "sh: can't initialize history\n");
    108108                }
    109109                if (editing && !el && isatty(0)) { /* && isatty(2) ??? */
     
    144144                        } else {
    145145bad:
    146                                 out2str("sh: can't initialize editing\n");
     146                                out2str(psh, "sh: can't initialize editing\n");
    147147                        }
    148148                        INTON;
     
    207207{
    208208        if (argc != 2) {
    209                 out2str("usage: inputrc file\n");
     209                out2str(psh, "usage: inputrc file\n");
    210210                return 1;
    211211        }
    212212        if (el != NULL) {
    213213                if (el_source(el, argv[1])) {
    214                         out2str("inputrc: failed\n");
     214                        out2str(psh, "inputrc: failed\n");
    215215                        return 1;
    216216                } else
    217217                        return 0;
    218218        } else {
    219                 out2str("sh: inputrc ignored, not editing\n");
     219                out2str(psh, "sh: inputrc ignored, not editing\n");
    220220                return 1;
    221221        }
     
    259259
    260260        if (hist == NULL)
    261                 error("history not active");
     261                error(psh, "history not active");
    262262
    263263        if (argc == 1)
    264                 error("missing history argument");
     264                error(psh, "missing history argument");
    265265
    266266        optreset = 1; optind = 1; /* initialize getopt */
     
    284284                        break;
    285285                case ':':
    286                         error("option -%c expects argument", optopt);
     286                        error(psh, "option -%c expects argument", optopt);
    287287                        /* NOTREACHED */
    288288                case '?':
    289289                default:
    290                         error("unknown option: -%c", optopt);
     290                        error(psh, "unknown option: -%c", optopt);
    291291                        /* NOTREACHED */
    292292                }
     
    315315                        active = 0;
    316316                        displayhist = 0;
    317                         error("called recursively too many times");
     317                        error(psh, "called recursively too many times");
    318318                }
    319319                /*
     
    358358                break;
    359359        default:
    360                 error("too many args");
     360                error(psh, "too many args");
    361361                /* NOTREACHED */
    362362        }
     
    387387                snprintf(editfile, sizeof(editfile), "%s_shXXXXXX", _PATH_TMP);
    388388                if ((fd = mkstemp(editfile)) < 0)
    389                         error("can't create temporary file %s", editfile);
     389                        error(psh, "can't create temporary file %s", editfile);
    390390                if ((efp = fdopen(fd, "w")) == NULL) {
    391391                        close(fd);
    392                         error("can't allocate stdio buffer for temp");
     392                        error(psh, "can't allocate stdio buffer for temp");
    393393                }
    394394        }
     
    407407                if (lflg) {
    408408                        if (!nflg)
    409                                 out1fmt("%5d ", he.num);
    410                         out1str(he.str);
     409                                out1fmt(psh, "%5d ", he.num);
     410                        out1str(psh, he.str);
    411411                } else {
    412412                        const char *s = pat ?
     
    415415                        if (sflg) {
    416416                                if (displayhist) {
    417                                         out2str(s);
     417                                        out2str(psh, s);
    418418                                }
    419419
     
    523523                }
    524524                if (retval == -1)
    525                         error("history number %s not found (internal error)",
     525                        error(psh, "history number %s not found (internal error)",
    526526                               str);
    527527        } else {
     
    531531                retval = history(hist, &he, H_PREV_STR, str);
    532532                if (retval == -1)
    533                         error("history pattern not found: %s", str);
     533                        error(psh, "history pattern not found: %s", str);
    534534        }
    535535        return (he.num);
  • trunk/src/kash/input.c

    r1198 r1199  
    221221                                        flags &=~ O_NONBLOCK;
    222222                                        if (fcntl(0, F_SETFL, flags) >= 0) {
    223                                                 out2str("sh: turning off NDELAY mode\n");
     223                                                out2str(psh, "sh: turning off NDELAY mode\n");
    224224                                                goto retry;
    225225                                        }
     
    317317
    318318        if (vflag(psh)) {
    319                 out2str(parsenextc);
     319                out2str(psh, parsenextc);
    320320                flushout(out2);
    321321        }
     
    397397        INTOFF;
    398398        if ((fd = open(fname, O_RDONLY)) < 0)
    399                 error("Can't open %s", fname);
     399                error(psh, "Can't open %s", fname);
    400400        if (fd < 10) {
    401401                fd2 = copyfd(fd, 10);
    402402                close(fd);
    403403                if (fd2 < 0)
    404                         error("Out of file descriptors");
     404                        error(psh, "Out of file descriptors");
    405405                fd = fd2;
    406406        }
  • trunk/src/kash/jobs.c

    r1198 r1199  
    186186                }
    187187#else
    188                 out2str("sh: Need FIOCLEX or FD_CLOEXEC to support job control");
     188                out2str(psh, "sh: Need FIOCLEX or FD_CLOEXEC to support job control");
    189189                goto out;
    190190#endif
     
    192192                        if ((initialpgrp = tcgetpgrp(ttyfd)) < 0) {
    193193out:
    194                                 out2str("sh: can't access tty; job control turned off\n");
     194                                out2str(psh, "sh: can't access tty; job control turned off\n");
    195195                                mflag(psh) = 0;
    196196                                return;
     
    207207                if (ioctl(ttyfd, TIOCGETD, (char *)&ldisc) < 0
    208208                    || ldisc != NTTYDISC) {
    209                         out2str("sh: need new tty driver to run job control; job control turned off\n");
     209                        out2str(psh, "sh: need new tty driver to run job control; job control turned off\n");
    210210                        mflag(psh) = 0;
    211211                        return;
     
    216216                setsignal(SIGTTIN, 0);
    217217                if (getpgid(0) != rootpid && setpgid(0, rootpid) == -1)
    218                         error("Cannot set process group (%s) at %d",
     218                        error(psh, "Cannot set process group (%s) at %d",
    219219                            strerror(errno), __LINE__);
    220220                if (tcsetpgrp(ttyfd, rootpid) == -1)
    221                         error("Cannot set tty process group (%s) at %d",
     221                        error(psh, "Cannot set tty process group (%s) at %d",
    222222                            strerror(errno), __LINE__);
    223223        } else { /* turning job control off */
    224224                if (getpgid(0) != initialpgrp && setpgid(0, initialpgrp) == -1)
    225                         error("Cannot set process group (%s) at %d",
     225                        error(psh, "Cannot set process group (%s) at %d",
    226226                            strerror(errno), __LINE__);
    227227                if (tcsetpgrp(ttyfd, initialpgrp) == -1)
    228                         error("Cannot set tty process group (%s) at %d",
     228                        error(psh, "Cannot set tty process group (%s) at %d",
    229229                            strerror(errno), __LINE__);
    230230                close(ttyfd);
     
    263263        jp = getjob(*argptr, 0);
    264264        if (jp->jobctl == 0)
    265                 error("job not created under job control");
    266         out1fmt("%s", jp->ps[0].cmd);
     265                error(psh, "job not created under job control");
     266        out1fmt(psh, "%s", jp->ps[0].cmd);
    267267        for (i = 1; i < jp->nprocs; i++)
    268                 out1fmt(" | %s", jp->ps[i].cmd );
    269         out1c('\n');
    270         output_flushall();
     268                out1fmt(psh, " | %s", jp->ps[i].cmd );
     269        out1c(psh, '\n');
     270        output_flushall(psh);
    271271
    272272        for (i = 0; i < jp->nprocs; i++)
     
    275275
    276276        if (i >= jp->nprocs) {
    277                 error("Cannot set tty process group (%s) at %d",
     277                error(psh, "Cannot set tty process group (%s) at %d",
    278278                    strerror(errno), __LINE__);
    279279        }
     
    340340        nextopt("");
    341341        do {
    342                 jp = getjob(*argptr, 0);
     342                jp = getjob(psh, *psh->argptr, 0);
    343343                if (jp->jobctl == 0)
    344                         error("job not created under job control");
     344                        error(psh, "job not created under job control");
    345345                set_curjob(jp, 1);
    346                 out1fmt("[%ld] %s", (long)(jp - jobtab + 1), jp->ps[0].cmd);
     346                out1fmt(psh, "[%ld] %s", (long)(jp - jobtab + 1), jp->ps[0].cmd);
    347347                for (i = 1; i < jp->nprocs; i++)
    348                         out1fmt(" | %s", jp->ps[i].cmd );
    349                 out1c('\n');
    350                 output_flushall();
     348                        out1fmt(psh, " | %s", jp->ps[i].cmd );
     349                out1c(psh, '\n');
     350                output_flushall(psh);
    351351                restartjob(jp);
    352         } while (*argptr && *++argptr);
     352        } while (*psh->argptr && *++psh->argptr);
    353353        return 0;
    354354}
     
    368368                        break;
    369369        if (i >= jp->nprocs)
    370                 error("Cannot continue job (%s)", strerror(errno));
     370                error(psh, "Cannot continue job (%s)", strerror(errno));
    371371        for (ps = jp->ps, i = jp->nprocs ; --i >= 0 ; ps++) {
    372372                if (WIFSTOPPED(ps->status)) {
     
    425425        if (mode & SHOW_SIGNALLED && !(mode & SHOW_ISSIG)) {
    426426                if (jp->state == JOBDONE && !(mode & SHOW_NO_FREE)) {
    427                         TRACE(("showjob: freeing job %d\n", jp - jobtab + 1));
     427                        TRACE((psh, "showjob: freeing job %d\n", jp - jobtab + 1));
    428428                        freejob(jp);
    429429                }
     
    538538        int silent = 0, gotpid;
    539539
    540         TRACE(("showjobs(%x) called\n", mode));
     540        TRACE((psh, "showjobs(%x) called\n", mode));
    541541
    542542        /* If not even one one job changed, there is nothing to do */
     
    551551        if (mflag(psh) && gotpid != -1 && tcgetpgrp(ttyfd) != getpid()) {
    552552                if (tcsetpgrp(ttyfd, getpid()) == -1)
    553                         error("Cannot set tty process group (%s) at %d",
     553                        error(psh, "Cannot set tty process group (%s) at %d",
    554554                            strerror(errno), __LINE__);
    555                 TRACE(("repaired tty process group\n"));
     555                TRACE((psh, "repaired tty process group\n"));
    556556                silent = 1;
    557557        }
     
    668668        jp = getjob(*argptr, 0);
    669669        for (i = 0 ; i < jp->nprocs ; ) {
    670                 out1fmt("%ld", (long)jp->ps[i].pid);
    671                 out1c(++i < jp->nprocs ? ' ' : '\n');
     670                out1fmt(psh, "%ld", (long)jp->ps[i].pid);
     671                out1c(psh, ++i < jp->nprocs ? ' ' : '\n');
    672672        }
    673673        return 0;
     
    762762        }
    763763        if (!noerror)
    764                 error(err_msg, name);
     764                error(psh, err_msg, name);
    765765        return 0;
    766766}
     
    824824        }
    825825        INTON;
    826         TRACE(("makejob(0x%lx, %d) returns %%%d\n", (long)node, nprocs,
    827             jp - jobtab + 1));
     826        TRACE((psh, "makejob(0x%lx, %d) returns %%%d\n", (long)node, nprocs,
     827               jp - jobtab + 1));
    828828        return jp;
    829829}
     
    850850        int pid;
    851851
    852         TRACE(("forkshell(%%%d, %p, %d) called\n", jp - jobtab, n, mode));
     852        TRACE((psh, "forkshell(%%%d, %p, %d) called\n", jp - jobtab, n, mode));
    853853        switch ((pid = fork())) {
    854854        case -1:
    855                 TRACE(("Fork failed, errno=%d\n", errno));
     855                TRACE((psh, "Fork failed, errno=%d\n", errno));
    856856                INTON;
    857                 error("Cannot fork");
     857                error(psh, "Cannot fork");
    858858                break;
    859859        case 0:
     
    888888                        commandtext(ps, n);
    889889        }
    890         TRACE(("In parent shell:  child = %d\n", pid));
     890        TRACE((psh, "In parent shell:  child = %d\n", pid));
    891891        return pid;
    892892}
     
    901901
    902902        wasroot = rootshell;
    903         TRACE(("Child shell %d\n", getpid()));
     903        TRACE((psh, "Child shell %d\n", getpid()));
    904904        if (!vforked)
    905905                rootshell = 0;
     
    919919                if (mode == FORK_FG) {
    920920                        if (tcsetpgrp(ttyfd, pgrp) == -1)
    921                                 error("Cannot set tty process group (%s) at %d",
     921                                error(psh, "Cannot set tty process group (%s) at %d",
    922922                                    strerror(errno), __LINE__);
    923923                }
     
    931931                        close(0);
    932932                        if (open(devnull, O_RDONLY) != 0)
    933                                 error(nullerr, devnull);
     933                                error(psh, nullerr, devnull);
    934934                }
    935935        }
     
    942942                        close(0);
    943943                        if (open(devnull, O_RDONLY) != 0)
    944                                 error(nullerr, devnull);
     944                                error(psh, nullerr, devnull);
    945945                }
    946946        }
     
    985985
    986986        INTOFF;
    987         TRACE(("waitforjob(%%%d) called\n", jp - jobtab + 1));
     987        TRACE((psh, "waitforjob(%%%d) called\n", jp - jobtab + 1));
    988988        while (jp->state == JOBRUNNING) {
    989989                dowait(1, jp);
     
    992992        if (jp->jobctl) {
    993993                if (tcsetpgrp(ttyfd, mypgrp) == -1)
    994                         error("Cannot set tty process group (%s) at %d",
     994                        error(psh, "Cannot set tty process group (%s) at %d",
    995995                            strerror(errno), __LINE__);
    996996        }
     
    10081008        else
    10091009                st = WTERMSIG(status) + 128;
    1010         TRACE(("waitforjob: job %d, nproc %d, status %x, st %x\n",
     1010        TRACE((psh, "waitforjob: job %d, nproc %d, status %x, st %x\n",
    10111011                jp - jobtab + 1, jp->nprocs, status, st ));
    10121012#if JOBS
     
    10481048        extern volatile char gotsig[];
    10491049
    1050         TRACE(("dowait(%d) called\n", block));
     1050        TRACE((psh, "dowait(%d) called\n", block));
    10511051        do {
    10521052                pid = waitproc(block, job, &status);
    1053                 TRACE(("wait returns pid %d, status %d\n", pid, status));
     1053                TRACE((psh, "wait returns pid %d, status %d\n", pid, status));
    10541054        } while (pid == -1 && errno == EINTR && gotsig[SIGINT - 1] == 0);
    10551055        if (pid <= 0)
     
    10651065                                        continue;
    10661066                                if (sp->pid == pid) {
    1067                                         TRACE(("Job %d: changing status of proc %d from 0x%x to 0x%x\n", jp - jobtab + 1, pid, sp->status, status));
     1067                                        TRACE((psh, "Job %d: changing status of proc %d from 0x%x to 0x%x\n", jp - jobtab + 1, pid, sp->status, status));
    10681068                                        sp->status = status;
    10691069                                        thisjob = jp;
     
    10771077                                int state = done ? JOBDONE : JOBSTOPPED;
    10781078                                if (jp->state != state) {
    1079                                         TRACE(("Job %d: changing state from %d to %d\n", jp - jobtab + 1, jp->state, state));
     1079                                        TRACE((psh, "Job %d: changing state from %d to %d\n", jp - jobtab + 1, jp->state, state));
    10801080                                        jp->state = state;
    10811081#if JOBS
     
    10971097                        showjob(out2, thisjob, mode);
    10981098                else {
    1099                         TRACE(("Not printing status, rootshell=%d, job=%p\n",
     1099                        TRACE((psh, "Not printing status, rootshell=%d, job=%p\n",
    11001100                                rootshell, job));
    11011101                        thisjob->changed = 1;
     
    11961196                        continue;
    11971197                if (jp->state == JOBSTOPPED) {
    1198                         out2str("You have stopped jobs.\n");
     1198                        out2str(psh, "You have stopped jobs.\n");
    11991199                        job_warning = 2;
    12001200                        return (1);
     
    12331233        } else
    12341234                *cmdnextc = '\0';
    1235         TRACE(("commandtext: ps->cmd %x, end %x, left %d\n\t\"%s\"\n",
     1235        TRACE((psh, "commandtext: ps->cmd %x, end %x, left %d\n\t\"%s\"\n",
    12361236                ps->cmd, cmdnextc, cmdnleft, ps->cmd));
    12371237}
  • trunk/src/kash/main.c

    r1198 r1199  
    207207#endif
    208208        opentrace(psh);
    209         trputs("Shell args:  ");  trargs(argv);
     209        trputs(psh, "Shell args:  ");  trargs(psh, argv);
    210210#endif
    211211
     
    271271        int numeof = 0;
    272272
    273         TRACE(("cmdloop(%d) called\n", top));
     273        TRACE((psh, "cmdloop(%d) called\n", top));
    274274        setstackmark(psh, &smark);
    275275        for (;;) {
  • trunk/src/kash/miscbltin.c

    r1198 r1199  
    113113
    114114        if (prompt && isatty(0)) {
    115                 out2str(prompt);
    116                 output_flushall();
     115                out2str(psh, prompt);
     116                output_flushall(psh);
    117117        }
    118118
    119119        if (*(ap = argptr) == NULL)
    120                 error("arg count");
     120                error(psh, "arg count");
    121121
    122122        if ((ifs = bltinlookup("IFS", 1)) == NULL)
     
    261261                        o[i] = '\0';
    262262
    263                         out1fmt("u=%s,g=%s,o=%s\n", u, g, o);
     263                        out1fmt(psh, "u=%s,g=%s,o=%s\n", u, g, o);
    264264                } else {
    265                         out1fmt("%.4o\n", mask);
     265                        out1fmt(psh, "%.4o\n", mask);
    266266                }
    267267        } else {
     
    270270                        do {
    271271                                if (*ap >= '8' || *ap < '0')
    272                                         error("Illegal number: %s", argv[1]);
     272                                        error(psh, "Illegal number: %s", argv[1]);
    273273                                mask = (mask << 3) + (*ap - '0');
    274274                        } while (*++ap != '\0');
     
    288288                        INTON;
    289289                        if (!set)
    290                                 error("Illegal mode: %s", ap);
     290                                error(psh, "Illegal mode: %s", ap);
    291291
    292292                        umask(~mask & 0777);
     
    384384                ;
    385385        if (!l->name)
    386                 error("internal error (%c)", what);
     386                error(psh, "internal error (%c)", what);
    387387
    388388        set = *argptr ? 1 : 0;
     
    391391
    392392                if (all || argptr[1])
    393                         error("too many arguments");
     393                        error(psh, "too many arguments");
    394394                if (strcmp(p, "unlimited") == 0)
    395395                        val = RLIM_INFINITY;
     
    404404                        }
    405405                        if (c)
    406                                 error("bad number");
     406                                error(psh, "bad number");
    407407                        val *= l->factor;
    408408                }
     
    416416                                val = limit.rlim_max;
    417417
    418                         out1fmt("%-20s ", l->name);
     418                        out1fmt(psh, "%-20s ", l->name);
    419419                        if (val == RLIM_INFINITY)
    420420                                out1fmt("unlimited\n");
     
    423423                                val /= l->factor;
    424424#ifdef BSD4_4
    425                                 out1fmt("%lld\n", (long long) val);
     425                                out1fmt(psh, "%lld\n", (long long) val);
    426426#else
    427                                 out1fmt("%ld\n", (long) val);
     427                                out1fmt(psh, "%ld\n", (long) val);
    428428#endif
    429429                        }
     
    439439                        limit.rlim_cur = val;
    440440                if (setrlimit(l->cmd, &limit) < 0)
    441                         error("error setting limit (%s)", strerror(errno));
     441                        error(psh, "error setting limit (%s)", strerror(errno));
    442442        } else {
    443443                if (how & SOFT)
     
    447447
    448448                if (val == RLIM_INFINITY)
    449                         out1fmt("unlimited\n");
     449                        out1fmt(psh, "unlimited\n");
    450450                else
    451451                {
    452452                        val /= l->factor;
    453453#ifdef BSD4_4
    454                         out1fmt("%lld\n", (long long) val);
     454                        out1fmt(psh, "%lld\n", (long long) val);
    455455#else
    456                         out1fmt("%ld\n", (long) val);
     456                        out1fmt(psh, "%ld\n", (long) val);
    457457#endif
    458458                }
  • trunk/src/kash/options.c

    r1198 r1199  
    213213#ifdef DEBUG
    214214        if (&psh->optlist[i].val == &debug(psh))
    215                 opentrace();
     215                opentrace(psh);
    216216#endif
    217217}
  • trunk/src/kash/output.c

    r1198 r1199  
    7171#include "error.h"
    7272
    73 
    74 #define OUTBUFSIZ BUFSIZ
     73#include "shinstance.h"
     74
     75//#define OUTBUFSIZ BUFSIZ
    7576#define BLOCK_OUT -2            /* output to a fixed block of memory */
    76 #define MEM_OUT -3              /* output to dynamically allocated memory */
     77//#define MEM_OUT -3            /* output to dynamically allocated memory */
    7778#define OUTPUT_ERR 01           /* error occurred on output */
    7879
    7980
    80 struct output output = {NULL, 0, NULL, OUTBUFSIZ, 1, 0};
    81 struct output errout = {NULL, 0, NULL, 100, 2, 0};
    82 struct output memout = {NULL, 0, NULL, 0, MEM_OUT, 0};
    83 struct output *out1 = &output;
    84 struct output *out2 = &errout;
     81//struct output output = {NULL, 0, NULL, OUTBUFSIZ, 1, 0};
     82//struct output errout = {NULL, 0, NULL, 100, 2, 0};
     83//struct output memout = {NULL, 0, NULL, 0, MEM_OUT, 0};
     84//struct output *out1 = &output;
     85//struct output *out2 = &errout;
    8586
    8687
     
    9293
    9394RESET {
    94         out1 = &output;
    95         out2 = &errout;
    96         if (memout.buf != NULL) {
    97                 ckfree(memout.buf);
    98                 memout.buf = NULL;
     95        psh->out1 = &psh->output;
     96        psh->out2 = &psh->errout;
     97        if (psh->memout.buf != NULL) {
     98                ckfree(psh->memout.buf);
     99                psh->memout.buf = NULL;
    99100        }
    100101}
     
    120121
    121122void
    122 out1str(const char *p)
    123 {
    124         outstr(p, out1);
    125 }
    126 
    127 
    128 void
    129 out2str(const char *p)
    130 {
    131         outstr(p, out2);
     123out1str(shinstance *psh, const char *p)
     124{
     125        outstr(p, psh->out1);
     126}
     127
     128
     129void
     130out2str(shinstance *psh, const char *p)
     131{
     132        outstr(p, psh->out2);
    132133}
    133134
     
    138139        while (*p)
    139140                outc(*p++, file);
    140         if (file == out2)
     141        if (file == file->psh->out2)
    141142                flushout(file);
    142143}
     
    150151{
    151152        int offset;
     153        shinstance *psh = dest->psh;
    152154
    153155        if (dest->fd == BLOCK_OUT) {
     
    177179
    178180void
    179 output_flushall(void)
    180 {
    181         flushout(&output);
    182         flushout(&errout);
     181output_flushall(shinstance *psh)
     182{
     183        flushout(&psh->output);
     184        flushout(&psh->errout);
    183185}
    184186
     
    190192        if (dest->buf == NULL || dest->nextc == dest->buf || dest->fd < 0)
    191193                return;
    192         if (xwrite(psh, dest->fd, dest->buf, dest->nextc - dest->buf) < 0)
     194        if (xwrite(dest->psh, dest->fd, dest->buf, dest->nextc - dest->buf) < 0)
    193195                dest->flags |= OUTPUT_ERR;
    194196        dest->nextc = dest->buf;
     
    198200
    199201void
    200 freestdout(void)
     202freestdout(shinstance *psh)
    201203{
    202204        INTOFF;
    203         if (output.buf) {
    204                 ckfree(output.buf);
    205                 output.buf = NULL;
    206                 output.nleft = 0;
     205        if (psh->output.buf) {
     206                ckfree(psh->output.buf);
     207                psh->output.buf = NULL;
     208                psh->output.nleft = 0;
    207209        }
    208210        INTON;
     
    222224
    223225void
    224 out1fmt(const char *fmt, ...)
     226out1fmt(shinstance *psh, const char *fmt, ...)
    225227{
    226228        va_list ap;
    227229
    228230        va_start(ap, fmt);
    229         doformat(out1, fmt, ap);
     231        doformat(psh->out1, fmt, ap);
    230232        va_end(ap);
    231233}
    232234
    233235void
    234 dprintf(const char *fmt, ...)
     236dprintf(shinstance *psh, const char *fmt, ...)
    235237{
    236238        va_list ap;
    237239
    238240        va_start(ap, fmt);
    239         doformat(out2, fmt, ap);
     241        doformat(psh->out2, fmt, ap);
    240242        va_end(ap);
    241         flushout(out2);
     243        flushout(psh->out2);
    242244}
    243245
     
    250252        va_start(ap, fmt);
    251253        strout.nextc = outbuf;
    252         strout.nleft = length;
     254        strout.nleft = (int)length;
    253255        strout.fd = BLOCK_OUT;
    254256        strout.flags = 0;
     
    414416                                num /= base;
    415417                        }
    416                         len = (temp + TEMPSIZE - 1) - p;
     418                        len = (int)((temp + TEMPSIZE - 1) - p);
    417419                        if (prec < 0)
    418420                                prec = 1;
     
    445447                        pad = 0;
    446448                        if (width) {
    447                                 len = strlen(p);
     449                                len = (int)strlen(p);
    448450                                if (prec >= 0 && len > prec)
    449451                                        len = prec;
     
    480482
    481483int
    482 xwrite(shinstance *psh, int fd, char *buf, int nbytes)
     484xwrite(shinstance *psh, int fd, char *buf, size_t nbytes)
    483485{
    484486        int ntry;
    485         int i;
    486         int n;
     487        long i;
     488        size_t n;
    487489
    488490        n = nbytes;
     
    492494                if (i > 0) {
    493495                        if ((n -= i) <= 0)
    494                                 return nbytes;
     496                                return (int)nbytes;
    495497                        buf += i;
    496498                        ntry = 0;
    497499                } else if (i == 0) {
    498500                        if (++ntry > 10)
    499                                 return nbytes - n;
     501                                return (int)(nbytes - n);
    500502                } else if (errno != EINTR) {
    501503                        return -1;
     
    505507
    506508
     509#ifdef not_used
    507510/*
    508511 * Version of ioctl that retries after a signal is caught.
     
    518521        return i;
    519522}
     523#endif /* not_used */
  • trunk/src/kash/output.h

    r1198 r1199  
    5454extern struct output *out1;
    5555extern struct output *out2;*/
     56#ifdef _MSC_VER
     57# ifndef __attribute__
     58#  define __attribute__(a)
     59# endif
     60#endif
    5661
    57 void open_mem(struct shinstance *, char *, int, struct output *);
     62void open_mem(char *, int, struct output *);
    5863void out1str(struct shinstance *, const char *);
    5964void out2str(struct shinstance *, const char *);
     
    7277    __attribute__((__format__(__printf__,3,4)));
    7378void doformat(struct output *, const char *, va_list);
    74 int xwrite(struct shinstance *, int, char *, int);
     79int xwrite(struct shinstance *, int, char *, size_t);
    7580int xioctl(struct shinstance *, int, unsigned long, char *);
    7681
  • trunk/src/kash/parser.c

    r1198 r1199  
    257257
    258258        negate = 0;
    259         TRACE(("pipeline: entered\n"));
     259        TRACE((psh, "pipeline: entered\n"));
    260260        while (readtoken() == TNOT)
    261261                negate = !negate;
     
    313313
    314314        while (readtoken() == TNOT) {
    315                 TRACE(("command: TNOT recognized\n"));
     315                TRACE((psh, "command: TNOT recognized\n"));
    316316                negate = !negate;
    317317        }
     
    353353                n1->nbinary.ch1 = list(0);
    354354                if ((got=readtoken()) != TDO) {
    355 TRACE(("expecting DO got %s %s\n", tokname[got], got == TWORD ? wordtext : ""));
     355TRACE((psh, "expecting DO got %s %s\n", tokname[got], got == TWORD ? wordtext : ""));
    356356                        synexpect(TDO);
    357357                }
     
    554554
    555555        while (readtoken() == TNOT) {
    556                 TRACE(("command: TNOT recognized\n"));
     556                TRACE((psh, "command: TNOT recognized\n"));
    557557                negate = !negate;
    558558        }
     
    622622void fixredir(union node *n, const char *text, int err)
    623623        {
    624         TRACE(("Fix redir %s %d\n", text, err));
     624        TRACE((psh, "Fix redir %s %d\n", text, err));
    625625        if (!err)
    626626                n->ndup.vname = NULL;
     
    654654                if (quoteflag == 0)
    655655                        n->type = NXHERE;
    656                 TRACE(("Here document %d\n", n->type));
     656                TRACE((psh, "Here document %d\n", n->type));
    657657                if (here->striptabs) {
    658658                        while (*wordtext == '\t')
     
    753753                                        lasttoken = t = pp -
    754754                                            parsekwd + KWDOFFSET;
    755                                         TRACE(("keyword %s recognized\n", tokname[t]));
     755                                        TRACE((psh, "keyword %s recognized\n", tokname[t]));
    756756                                        goto out;
    757757                                }
    758758                        }
    759759                        if(!noalias &&
    760                             (ap = lookupalias(wordtext, 1)) != NULL) {
     760                            (ap = lookupalias(psh, wordtext, 1)) != NULL) {
    761761                                pushstring(ap->val, strlen(ap->val), ap);
    762762                                checkkwd = savecheckkwd;
     
    769769#ifdef DEBUG
    770770        if (!alreadyseen)
    771             TRACE(("token %s %s\n", tokname[t], t == TWORD ? wordtext : ""));
     771            TRACE((psh, "token %s %s\n", tokname[t], t == TWORD ? wordtext : ""));
    772772        else
    773             TRACE(("reread token %s %s\n", tokname[t], t == TWORD ? wordtext : ""));
     773            TRACE((psh, "reread token %s %s\n", tokname[t], t == TWORD ? wordtext : ""));
    774774#endif
    775775        return (t);
     
    16201620{
    16211621        if (commandname)
    1622                 outfmt(&errout, "%s: %d: ", commandname, startlinno);
    1623         outfmt(&errout, "Syntax error: %s\n", msg);
    1624         error((char *)NULL);
     1622                outfmt(&psh->errout, "%s: %d: ", commandname, startlinno);
     1623        outfmt(&psh->errout, "Syntax error: %s\n", msg);
     1624        error(psh, (char *)NULL);
    16251625        /* NOTREACHED */
    16261626}
  • trunk/src/kash/redir.c

    r1198 r1199  
    149149                                default:
    150150                                        INTON;
    151                                         error("%d: %s", fd, strerror(errno));
     151                                        error(psh, "%d: %s", fd, strerror(errno));
    152152                                        /* NOTREACHED */
    153153                                }
     
    244244        return;
    245245ecreate:
    246         error("cannot create %s: %s", fname, errmsg(errno, E_CREAT));
     246        error(psh, "cannot create %s: %s", fname, errmsg(psh, errno, E_CREAT));
    247247eopen:
    248         error("cannot open %s: %s", fname, errmsg(errno, E_OPEN));
     248        error(psh, "cannot open %s: %s", fname, errmsg(psh, errno, E_OPEN));
    249249}
    250250
     
    263263
    264264        if (pipe(pip) < 0)
    265                 error("Pipe call failed");
     265                error(psh, "Pipe call failed");
    266266        if (redir->type == NHERE) {
    267267                len = strlen(redir->nhere.doc->narg.text);
     
    385385                        return EMPTY;
    386386                else
    387                         error("%d: %s", from, strerror(errno));
     387                        error(psh, "%d: %s", from, strerror(errno));
    388388        }
    389389        return newfd;
  • trunk/src/kash/shfile.h

    r1198 r1199  
    7575char *shfile_getcwd(shfdtab *, char *, int);
    7676int shfile_isatty(shfdtab *, int);
     77/*int shfile_ioctl(shfdtab *, int, unsigned long, char *);*/
    7778
    7879#endif
  • trunk/src/kash/shinstance.c

    r1198 r1199  
    5252        psh->stacknxt = psh->stackbase.space;
    5353
     54        /* output.c */
     55        psh->output.bufsize = OUTBUFSIZ;
     56        psh->output.fd = 1;
     57        psh->errout.bufsize = 100;
     58        psh->errout.fd = 2;
     59        psh->memout.fd = MEM_OUT;
     60        psh->out1 = &psh->output;
     61        psh->out2 = &psh->errout;
     62
     63        /* .c */
    5464    }
    5565    return psh;
  • trunk/src/kash/shinstance.h

    r1198 r1199  
    8484    struct output      *out1;
    8585    struct output      *out2;
     86    /* output.c */
     87#define OUTBUFSIZ BUFSIZ
     88#define MEM_OUT -3                      /**< output to dynamically allocated memory */
    8689
    8790    /* options.h */
  • trunk/src/kash/show.c

    r1198 r1199  
    6161static void sharg(union node *, FILE *);
    6262static void indent(int, char *, FILE *);
    63 static void trstring(char *);
    64 
    65 
    66 void
    67 showtree(union node *n)
    68 {
    69         trputs("showtree called\n");
     63static void trstring(shinstance *, char *);
     64
     65
     66void
     67showtree(shinstance *psh, union node *n)
     68{
     69        trputs(psh, "showtree called\n");
    7070        shtree(n, 1, NULL, stdout);
    7171}
     
    274274#ifdef DEBUG
    275275void
    276 trputc(int c)
     276trputc(shinstance *psh, int c)
    277277{
    278278        if (debug(psh) != 1)
     
    311311#ifdef DEBUG
    312312void
    313 trputs(const char *s)
     313trputs(shinstance *psh, const char *s)
    314314{
    315315        if (debug(psh) != 1)
     
    320320
    321321static void
    322 trstring(char *s)
     322trstring(shinstance *psh, char *s)
    323323{
    324324        char *p;
     
    367367                return;
    368368        while (*ap) {
    369                 trstring(*ap++);
     369                trstring(psh, *ap++);
    370370                if (*ap)
    371371                        putc(' ', tracefile);
     
    379379#ifdef DEBUG
    380380void
    381 opentrace(void)
     381opentrace(shinstance *psh)
    382382{
    383383        char s[100];
     
    424424                fcntl(fileno(tracefile), F_SETFL, flags | O_APPEND);
    425425#endif
    426         setlinebuf(tracefile);
     426        setvbuf(tracefile, (char *)NULL, _IOLBF, 0); //setlinebuf(tracefile);
    427427        fputs("\nTracing started.\n", tracefile);
    428428}
  • trunk/src/kash/show.h

    r880 r1199  
    4040void trargs(struct shinstance *, char **);
    4141#ifdef DEBUG
    42 void trputc(int);
    43 void trputs(const char *);
     42void trputc(struct shinstance *, int);
     43void trputs(struct shinstance *, const char *);
    4444void opentrace(struct shinstance *);
    4545#endif
  • trunk/src/kash/trap.c

    r1198 r1199  
    127127        int n;
    128128
    129         out1str("EXIT ");
     129        out1str(psh, "EXIT ");
    130130#ifndef HAVE_SYS_SIGNAME
    131131        init_sys_signame();
     
    133133
    134134        for (n = 1; n < NSIG; n++) {
    135                 out1fmt("%s", sys_signame[n]);
     135                out1fmt(psh, "%s", sys_signame[n]);
    136136                if ((n == NSIG/2) ||  n == (NSIG - 1))
    137                         out1str("\n");
     137                        out1str(psh, "\n");
    138138                else
    139                         out1c(' ');
     139                        out1c(psh, ' ');
    140140        }
    141141}
     
    158158                for (signo = 0 ; signo <= NSIG ; signo++)
    159159                        if (trap[signo] != NULL) {
    160                                 out1fmt("trap -- ");
     160                                out1fmt(psh, "trap -- ");
    161161                                print_quoted(trap[signo]);
    162                                 out1fmt(" %s\n",
     162                                out1fmt(psh, " %s\n",
    163163                                    (signo) ? sys_signame[signo] : "EXIT");
    164164                        }
     
    182182                        }
    183183                        else
    184                                 error("bad option %s\n", *ap);
     184                                error(psh, "bad option %s\n", *ap);
    185185                }
    186186                else
     
    195195
    196196                if (signo < 0 || signo > NSIG)
    197                         error("%s: bad trap", *ap);
     197                        error(psh, "%s: bad trap", *ap);
    198198
    199199                INTOFF;
     
    375375
    376376void
    377 onsig(int signo)
     377onsig(shinstance *psh, int signo)
    378378{
    379379        signal(signo, onsig);
    380380        if (signo == SIGINT && trap[SIGINT] == NULL) {
    381                 onint();
     381                onint(psh);
    382382                return;
    383383        }
     
    447447        char *p;
    448448
    449         TRACE(("pid %d, exitshell(%d)\n", getpid(), status));
     449        TRACE((psh, "pid %d, exitshell(%d)\n", getpid(), status));
    450450        if (setjmp(loc1.loc)) {
    451451                goto l1;
     
    460460        }
    461461l1:   handler = &loc2;                  /* probably unnecessary */
    462         output_flushall();
     462        output_flushall(psh);
    463463#if JOBS
    464464        setjobctl(0);
  • trunk/src/kash/var.c

    r1198 r1199  
    332332        namelen = p - name;
    333333        if (isbad)
    334                 error("%.*s: bad variable name", namelen, name);
     334                error(psh, "%.*s: bad variable name", namelen, name);
    335335        len = namelen + 2;              /* 2 is space for '=' and '\0' */
    336336        if (val == NULL) {
     
    370370        if (vp != NULL) {
    371371                if (vp->flags & VREADONLY)
    372                         error("%.*s: is read only", vp->name_len, s);
     372                        error(psh, "%.*s: is read only", vp->name_len, s);
    373373                if (flags & VNOSET)
    374374                        return;
     
    575575
    576576        if (strcspn(p, "|&;<>()$`\\\"' \t\n*?[]#~=%") == strlen(p)) {
    577                 out1fmt("%s", p);
     577                out1fmt(psh, "%s", p);
    578578                return;
    579579        }
    580580        while (*p) {
    581581                if (*p == '\'') {
    582                         out1fmt("\\'");
     582                        out1fmt(psh, "\\'");
    583583                        p++;
    584584                        continue;
     
    586586                q = index(p, '\'');
    587587                if (!q) {
    588                         out1fmt("'%s'", p );
     588                        out1fmt(psh, "'%s'", p );
    589589                        return;
    590590                }
    591                 out1fmt("'%.*s'", (int)(q - p), p );
     591                out1fmt(psh, "'%.*s'", (int)(q - p), p );
    592592                p = q;
    593593        }
     
    648648                vp = *vpp;
    649649                if (name)
    650                         out1fmt("%s ", name);
     650                        out1fmt(psh, "%s ", name);
    651651                for (p = vp->text ; *p != '=' ; p++)
    652                         out1c(*p);
     652                        out1c(psh, *p);
    653653                if (!(vp->flags & VUNSET) && show_value) {
    654                         out1fmt("=");
    655                         print_quoted(++p);
    656                 }
    657                 out1c('\n');
     654                        out1fmt(psh, "=");
     655                        print_quoted(psh, ++p);
     656                }
     657                out1c(psh, '\n');
    658658        }
    659659        return 0;
     
    707707
    708708        if (! in_function(psh))
    709                 error("Not in a function");
     709                error(psh, "Not in a function");
    710710        while ((name = *argptr++) != NULL) {
    711711                mklocal(name, 0);
     
    774774                localvars = lvp->next;
    775775                vp = lvp->vp;
    776                 TRACE(("poplocalvar %s", vp ? vp->text : "-"));
     776                TRACE((psh, "poplocalvar %s", vp ? vp->text : "-"));
    777777                if (vp == NULL) {       /* $- saved */
    778778                        memcpy(optlist, lvp->text, sizeof_optlist);
     
    801801                setvar(argv[1], argv[2], 0);
    802802        else
    803                 error("List assignment not implemented");
     803                error(psh, "List assignment not implemented");
    804804        return 0;
    805805}
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