📄 changelog.0
字号:
to fill line[]. * history.c(c_fc): use local hline buffer instead of global line[]; use str_zcpy() to fill hline[]; * history.c(histrpl): added hline and hsize parameters; changed all calls. * history.c(hist_init): EASY_HISTORY: use local hilne buffer instead of global line[]. * lex.h(line[]): deleted. * syn.c(compile): do not set s->str to null for STTY and SHIST.Wed Nov 2 11:48:36 NST 1994 Michael Rendell (michael@panda.cs.mun.ca) * lex.c(getsc_): case SDDPAREN: set csstate before going to SPAREN state. * Makefile.in(RCSFILES): removed POSIX from list (now covered in man page).Tue Nov 1 09:27:46 NST 1994 Michael Rendell (michael@panda.cs.mun.ca) * eval.c(comsub): save/restore source before/after compile(). * c_ulimit.c(c_ulimit): allow value to be arithmetic expression (as per Korn book). * c_sh.c(c_read): call set_prompt() before printing prompt. * expr.c(v_evaluate): treat an empty expression as 0.Mon Oct 31 09:23:57 NST 1994 Michael Rendell (michael@panda.cs.mun.ca) * vi.c(grabhist,grabsearch): check that history line doesn't overflow edit buffer. * history.c(hist_finish): (EASY_HISTORY) changed for-loop condition to prevent passing the end of history. * eval.c(expand): when stuffing MAGIC, cast c to char. * misc.c(strip_nuls): new function. * lex.c(getsc_): case STTY/SFILE/SSTDIN: call strip_nuls() after reading commands. * edit.c(set_editmode): reversed strstr() arguments - check for vi/emacs in $EDITOR/$VISUAL string. * syn.c(yyparse): allow EOF as well as newline after a command. * lex.c(getsc_): case SSTRING: don't fake newlineSun Oct 30 10:55:20 NST 1994 Michael Rendell (michael@panda.cs.mun.ca) * c_ksh.c(c_print): echo: check for -n, -e and -E options. * exec.c(comexec): don't allow command -p if restricted.Fri Oct 28 10:24:48 NDT 1994 Michael Rendell (michael@panda.cs.mun.ca) * var.c(typeset): in fake_assign code, was freeing t->val.s + t->type instead of t->val.s - now uses free_me variable instead of aflag. * Makefile.in(depend): change blank lines in depend output to sh.h so dumb make(1)s won't die. * mail.c: changed checking to use atime/mtime instead of size; changed struct mbox mb_size field to mb_mtime, changed all references. * main.c(shell): do not execute (or set the exit status for) a null command. * lex.c(readhere): read the newline after the eof marker.Wed Oct 26 09:11:08 NDT 1994 Michael Rendell (michael@panda.cs.mun.ca) * eval.c(globit): added FMARKDIRS support. * emacs.c(x_ftab[]): added entries for ansi arrow key bindings. * exec.c(execute,iosetup): move tracing of redirections from execute() to iosetup() so expanded name can be printed. * exec.c(execute): case TDBRACKET: read was being called instead of test. * ksh_stat.h(S_ISCDF): new define. * c_test.c: added -H for context dependent files (HP bizarreness). * main.c(initcoms[]): added alias local=typeset. * Makefile.in(stamp-h,config.status): added double quotes CONFIG_FILES and LDSTATIC assignments for dmake. * aclocal.m4(KSH_SYS_SIGLIST): do something with sys_siglist so it isn't optimized away. * aclocal.m4(KSH_CLOCK_T): do extra check for clock_t in sys/times.h. * acconfig.h(CLOCK_T_IN_SYS_TIMES_H): new define. * sh.h(SIGNALS): use _SIGMAX if NSIG, _MINIX not defined. (fixes from Brian Campbell <brianc@qnx.com>) * emacs.c(x_transpose): changed behavior if FGMACS flag set (fix from <guy@netapp.com>).Tue Oct 25 17:11:58 NDT 1994 Michael Rendell (michael@panda.cs.mun.ca) * tty.c(KSH_VDISABLE): new define. * edit.c(x_init): use KSH_VDISABLE.Tue Oct 25 09:55:09 NDT 1994 Michael Rendell (michael@panda.cs.mun.ca) * made pdksh-5.0.9 distribution * c_ulimit.c(c_ulimit): changed SOFT, HARD from enum to defines to avoid problems with ancient compilers. * vi.c(CHAR_LEN,char_len): changed macro to function; added FVISHOW8 support. * misc.c(options[]), sh.h(FVISHOW8): added FVISHOW8 option.Sun Oct 23 11:02:26 NDT 1994 Michael Rendell (michael@maple.cs.mun.ca) * main.c(shell): keep unwinding if LINTR and not interactive. * lex.c(yylex): do redumentery quote parsing for $(..).Thu Oct 20 11:02:27 NDT 1994 Michael Rendell (michael@panda.cs.mun.ca) * exec.c(execute): case TSELECT: set rv to 1 if eof is read. * exec.c(execute): case TFOR/TSELECT/TWHILE/TUNTIL: set rv to 0 before entering loop, but after setjmp incase of a continue; rv to 0 after a break. * exec.c(execute): case TFOR/TSELECT: do readonly check before assigning value. * c_ksh.c(c_getopts): do readonly check before assigning value. * misc.c(print_columns),c_ksh.c(kill_fmt_entry), misc.c(options_fmt_entry),exec.c(select_fmt_entry): new functions. * c_ksh.c(c_kill),misc.c(printoptions),exec.c(pr_menu): use print_columns() call a call-back routine to format information in columns.Wed Oct 19 10:26:25 NDT 1994 Michael Rendell (michael@arlene.cs.mun.ca) * misc.c(cclass): require MAGIC before - and ]. * eval.c(expand): prefix - and ] with MAGIC if appropriate. * var.c(typeset): don't allow export flag of readonly variables to be cleared. * eval.c(globit): added call to intrcheck().Mon Oct 17 11:48:05 NDT 1994 Michael Rendell (michael@arlene.cs.mun.ca) * lex.c(readhere): check for and report write errors.Sun Oct 16 16:10:59 NDT 1994 Michael Rendell (michael@arlene.cs.mun.ca) * c_ksh.c(c_cd): don't allow cd if restricted. * exec.c(comexec): if restricted and command contains /, print error. * exec.c(ioestup): if restricted, don't allow file creations. * main.c(is_restricted): new function. * main.c(main): save and reset FRESTRICTED during .profile/ENV reading; set FRESTRICTED if argv[0] or SHELL refers to restricted shell; make PATH, ENV, SHELL readonly if restricted. * var.c(typeset): check for restricted shell and PATH/ENV/SHELL.Thu Oct 13 21:01:14 NDT 1994 Michael Rendell (michael@panda.cs.mun.ca) * main.c(shell): only call j_notify() for interactive shells. * c_sh.c(c_read): check if variable is readonly before assigning value.Wed Oct 12 14:08:46 NDT 1994 Michael Rendell (michael@panda.cs.mun.ca) * lex.h(COPROC),tree.h(TCOPROC,XCOPROC): added defines. * lex.c(yylex): return COPROC for |& token. * syn.c(tokentab): added COPROC. * syn.c(c_list): accept COPROC, create TCOPROC node. * tree.c(ptree): added case for TCOPROC. * exec.c(execute): added case for TCOPROC. * io.c(check_fd,get_coproc_fd): new functions. * c_sh.c(c_read),c_ksh.c(c_print): changed to use check_fd(); added -p option; for c_print() ensure SIGPIPE doesn't kill shell. * exec.c(iosetup): changed to use check_fd() for IODUP; when checking fore close, require exactly the string '-', not any string starting with '-'; added strerror() to error message. * jobs.c(exchild): don't open /dev/null if XCOPROC; close coproc.read/write/childread in child if XCOPROC; don't pass XCOPROC flag on to execute(); set coproc.job to job in parent if XCOPROC. * jobs.c(check_job): clear coproc.job if said job dies. * trap.c(block_pipe,restore_pipe): new functions. * sh.h(struct coproc, EF_COPROC_DUPED): new structure and define. * c_sh.c(c_exec): if EF_COPROC_DUPED set, clean up co-process stuff. * main.c(cleanup_parents_env): new function. * jobs.c(exchild): call cleanup_parents_env() after fork(). * tree.h(IORDUP): new define. * lex.c(yylex): changed redirection parsing to not accept & only after a single < or >; set IORDUP flag for x<&y; fixed <</<>/>> check to not allow >< (again). * tree.c(pioact): use IORDUP flag to print <& or >&. * jobs.c(exchild): set JF_ORIGFG flag if job started in foreground. * jobs.c(j_waitj): don't get default tty settings if JF_ORIGFG not set. * misc.c(parse_args): treat -A as a flag that is handled later (used to require argument); do array setting after argument sorting. * var.c(set_array): changed second argument from 0/1 flag to -1/1 flag; changed all calls.Thu Oct 6 11:55:27 NDT 1994 Michael Rendell (michael@arlene.cs.mun.ca) * table.c(tinit): added initial table size argument; call texpand if size isn't 0; changed all calls. * main.c(main): try to make sure table size is big enough for builtins and keywords (cut down on amount of re-hashing). * eval.c(expand): added next and prev fields to struct SubType; removed fixed length subtype array, changed code to allocate SubTypes as needed.Wed Oct 5 09:25:06 NDT 1994 Michael Rendell (michael@arlene.cs.mun.ca) * main.c(main): moved initio() above inittraps() as later can print stuff. * table.h(IMPORT): new flag. * var.c(typeset): if IMPORT flag set, don't allow array references, insist on assignment. * var.c(import): deleted function. * main.c(main): use typeset() instead of import(). * sh.h: include expand.h. * expand.h(Xnleft): new define. * expand.h(struct XString, Xinit): added areap field; added area argument to Xinit; changed all calls. * lex.h(struct source): added xs field. * shf.c(shf_gets,shf_getse): changed name fromshf_gets to shf_getse; return pointer to null byte instead of start of buffer. * lex.c(pushs): if type is SFILE or SSTDIN, initialize s->xs. * lex.c(getsc_): case SFILE/SSTDIN: use s->xs instead of fixed size line buffer. * syn.c(compile): don't change s->str if SFILE. * main.c(main): call pushs() explicitly for each of SSTRING, SFILE, SSTDIN, STTY. * aclocal.m4(KSH_GCC_FUNC_ATTR): changed GCC_FUNC_ATTR to HAVE_GCC_FUNC_ATTR. * config.h.bot: changed use of GCC_FUNC_ATTR; deleted GCC_FA_NORETURN, GCC_FA_CONST, GCC_FA_FORMAT defines, created generic GCC_FUNC_ATTR define; changed all uses of GCC_FA_*. * main.c(main): set s->file for SSTDIN input. * main.c(shell): pass LERROR on if not interactive. * expand.h(Xcheck,XcheckN): added XcheckN define, changed Xcheck to use XcheckN; made XcheckN call Xcheck_grow_() do do any real work (to cut down on code size). * misc.c(Xcheck_grow_): new function. * exec.c(search),c_sh.c(c_read): changed to use Xstring() routines (used to use the fixed size buffer line[]). * exec.c(findcom): avoid re-saving search() result in ATEMP.Tue Oct 4 15:32:37 NDT 1994 Michael Rendell (michael@arlene.cs.mun.ca) * jobs.c(j_jobs): return int value indicating error/ok; changed all calls. * misc.c(getn): added int * argument to hold result; changed return value to indicate success/failure; changed all calls. * misc.c(bi_getn): new function. * misc.c(getn_): deleted function. * io.c(internal_error,error_prefix,warningf): new functions. * *.c: changed errorf() calls reporting internal errors to use internal_error() function; changed many shellf()s to warningf(). * io.c(errorf),lex.c(yyerror): changed to use error_prefix(). * alloc.c(aprint): ifdef'd out. * tree.c(phash): deleted function.Mon Oct 3 15:08:24 NDT 1994 Michael Rendell (michael@arlene.cs.mun.ca) * sh.h(kshname): new variable * main.c(main): changed name to kshname, deleted local variable. * exec.c(comsub): update kshname. * var.c(popblock): restore kshname. * io.c(errorf,bi_errorf): print shell name before error message. * c_ksh.c(c_cd): print new directory on stdout, not stderr. * sh.h(GI_MINUS): new define. * misc.c(ksh_getopts): changed so once - or + introduces option, all options must start with same character. * sh.h(builtin_argv0): new variable. * exec.c(call_builtin): set/clear builtin_argv0, builtin_flag; changed argument to a struct tbl *; changed all calls. * io.c(bi_errorf): new function. * c_ksh.c,c_sh.c,c_ulimit.c,emacs.c,history.c,jobs.c: changed all uses of errorf() to bi_errorf(). * emacs.c(x_bind): changed return value to int; changed all calls. * history.c(histrpl): return 0 if there is an error; changed all calls. * misc.c(parse_args): use bi_errorf(); return -1 for error; changed all calls. * misc.c(ksh_getopts): call bi_errorf instead of errorf which means ksh_getopts() may return after an error, so changed all calls to check for '?' return. * exec.c(iosetup): use shellf() to report errors and return value indicating success or failure. * exec.c(execute): if iosetup fails, cause fatal error for special builtins, return otherwise; print PS4 and redirections.Fri Sep 30 15:17:37 NDT 1994 Michael Rendell (michael@arlene.cs.mun.ca) * c_ulimit.c(c_ulimit): accept unlimited as a valid value. * c_test.c(c_test): changed posix special case code to use while loop. * c_ksh.c(c_whence): for whence -p, don't look for built-ins or fuctions.Thu Sep 29 10:34:59 NDT 1994 Michael Rendell (michael@arlene.cs.mun.ca) * c_ksh.c(c_alias): added -r option so the sysv-bounre shell hash -r will work. * eval.c(debunk): use strchr() to find first MAGIC, if any.Wed Sep 28 15:34:32 NDT 1994 Michael Rendell (michael@arlene.cs.mun.ca) * sh.h(O_NONBLOCK): define to O_NDELAY or FNDELAY if not defined. * main.c(main): if stdin is O_NONBLOCK'd, clear O_NONBLOCK. * misc.c(options[], parse_args): make -c a normal flag, not an option
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -