Module Name: src Committed By: tls Date: Sun Aug 10 06:51:57 UTC 2014
Modified Files: src/lib/libedit [tls-earlyentropy]: Makefile chared.c chared.h editline.3 el.c eln.c filecomplete.c hist.h histedit.h history.c map.c map.h parse.c read.c readline.c tty.c tty.h vi.c src/lib/libedit/TEST [tls-earlyentropy]: tc1.c wtc1.c Log Message: Rebase. To generate a diff of this commit: cvs rdiff -u -r1.51 -r1.51.8.1 src/lib/libedit/Makefile cvs rdiff -u -r1.39 -r1.39.4.1 src/lib/libedit/chared.c cvs rdiff -u -r1.21 -r1.21.22.1 src/lib/libedit/chared.h cvs rdiff -u -r1.80 -r1.80.4.1 src/lib/libedit/editline.3 cvs rdiff -u -r1.72 -r1.72.6.1 src/lib/libedit/el.c cvs rdiff -u -r1.15 -r1.15.2.1 src/lib/libedit/eln.c cvs rdiff -u -r1.31 -r1.31.18.1 src/lib/libedit/filecomplete.c cvs rdiff -u -r1.13 -r1.13.18.1 src/lib/libedit/hist.h cvs rdiff -u -r1.51 -r1.51.4.1 src/lib/libedit/histedit.h cvs rdiff -u -r1.46 -r1.46.16.1 src/lib/libedit/history.c cvs rdiff -u -r1.33 -r1.33.6.1 src/lib/libedit/map.c cvs rdiff -u -r1.9 -r1.9.22.1 src/lib/libedit/map.h cvs rdiff -u -r1.26 -r1.26.18.1 src/lib/libedit/parse.c cvs rdiff -u -r1.70 -r1.70.4.1 src/lib/libedit/read.c cvs rdiff -u -r1.110 -r1.110.2.1 src/lib/libedit/readline.c cvs rdiff -u -r1.42 -r1.42.8.1 src/lib/libedit/tty.c cvs rdiff -u -r1.14 -r1.14.8.1 src/lib/libedit/tty.h cvs rdiff -u -r1.43 -r1.43.16.1 src/lib/libedit/vi.c cvs rdiff -u -r1.5 -r1.5.22.1 src/lib/libedit/TEST/tc1.c cvs rdiff -u -r1.6 -r1.6.16.1 src/lib/libedit/TEST/wtc1.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/lib/libedit/Makefile diff -u src/lib/libedit/Makefile:1.51 src/lib/libedit/Makefile:1.51.8.1 --- src/lib/libedit/Makefile:1.51 Fri Aug 10 12:20:10 2012 +++ src/lib/libedit/Makefile Sun Aug 10 06:51:57 2014 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.51 2012/08/10 12:20:10 joerg Exp $ +# $NetBSD: Makefile,v 1.51.8.1 2014/08/10 06:51:57 tls Exp $ # @(#)Makefile 8.1 (Berkeley) 6/4/93 USE_SHLIBDIR= yes @@ -127,7 +127,7 @@ tc1: libedit.a tc1.o .include <bsd.subdir.mk> # XXX -.if defined(HAVE_GCC) && ${HAVE_GCC} >= 45 +.if defined(HAVE_GCC) COPTS.editline.c+= -Wno-cast-qual COPTS.tokenizer.c+= -Wno-cast-qual COPTS.tokenizern.c+= -Wno-cast-qual Index: src/lib/libedit/chared.c diff -u src/lib/libedit/chared.c:1.39 src/lib/libedit/chared.c:1.39.4.1 --- src/lib/libedit/chared.c:1.39 Fri Jul 12 22:39:50 2013 +++ src/lib/libedit/chared.c Sun Aug 10 06:51:57 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: chared.c,v 1.39 2013/07/12 22:39:50 christos Exp $ */ +/* $NetBSD: chared.c,v 1.39.4.1 2014/08/10 06:51:57 tls Exp $ */ /*- * Copyright (c) 1992, 1993 @@ -37,7 +37,7 @@ #if 0 static char sccsid[] = "@(#)chared.c 8.1 (Berkeley) 6/4/93"; #else -__RCSID("$NetBSD: chared.c,v 1.39 2013/07/12 22:39:50 christos Exp $"); +__RCSID("$NetBSD: chared.c,v 1.39.4.1 2014/08/10 06:51:57 tls Exp $"); #endif #endif /* not lint && not SCCSID */ @@ -434,6 +434,8 @@ ch_init(EditLine *el) el->el_chared.c_kill.last = el->el_chared.c_kill.buf; el->el_chared.c_resizefun = NULL; el->el_chared.c_resizearg = NULL; + el->el_chared.c_aliasfun = NULL; + el->el_chared.c_aliasarg = NULL; el->el_map.current = el->el_map.key; @@ -757,3 +759,11 @@ ch_resizefun(EditLine *el, el_zfunc_t f, el->el_chared.c_resizearg = a; return 0; } + +protected int +ch_aliasfun(EditLine *el, el_afunc_t f, void *a) +{ + el->el_chared.c_aliasfun = f; + el->el_chared.c_aliasarg = a; + return 0; +} Index: src/lib/libedit/chared.h diff -u src/lib/libedit/chared.h:1.21 src/lib/libedit/chared.h:1.21.22.1 --- src/lib/libedit/chared.h:1.21 Sat Aug 28 15:44:59 2010 +++ src/lib/libedit/chared.h Sun Aug 10 06:51:57 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: chared.h,v 1.21 2010/08/28 15:44:59 christos Exp $ */ +/* $NetBSD: chared.h,v 1.21.22.1 2014/08/10 06:51:57 tls Exp $ */ /*- * Copyright (c) 1992, 1993 @@ -104,6 +104,7 @@ typedef struct c_kill_t { } c_kill_t; typedef void (*el_zfunc_t)(EditLine *, void *); +typedef const char *(*el_afunc_t)(void *, const char *); /* * Note that we use both data structures because the user can bind @@ -116,7 +117,9 @@ typedef struct el_chared_t { c_vcmd_t c_vcmd; c_macro_t c_macro; el_zfunc_t c_resizefun; + el_afunc_t c_aliasfun; void * c_resizearg; + void * c_aliasarg; } el_chared_t; @@ -165,6 +168,7 @@ protected int c_hpos(EditLine *); protected int ch_init(EditLine *); protected void ch_reset(EditLine *, int); protected int ch_resizefun(EditLine *, el_zfunc_t, void *); +protected int ch_aliasfun(EditLine *, el_afunc_t, void *); protected int ch_enlargebufs(EditLine *, size_t); protected void ch_end(EditLine *); Index: src/lib/libedit/editline.3 diff -u src/lib/libedit/editline.3:1.80 src/lib/libedit/editline.3:1.80.4.1 --- src/lib/libedit/editline.3:1.80 Fri Jul 12 17:48:29 2013 +++ src/lib/libedit/editline.3 Sun Aug 10 06:51:57 2014 @@ -1,6 +1,6 @@ -.\" $NetBSD: editline.3,v 1.80 2013/07/12 17:48:29 christos Exp $ +.\" $NetBSD: editline.3,v 1.80.4.1 2014/08/10 06:51:57 tls Exp $ .\" -.\" Copyright (c) 1997-2013 The NetBSD Foundation, Inc. +.\" Copyright (c) 1997-2014 The NetBSD Foundation, Inc. .\" All rights reserved. .\" .\" This file was contributed to The NetBSD Foundation by Luke Mewburn. @@ -26,7 +26,7 @@ .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE .\" POSSIBILITY OF SUCH DAMAGE. .\" -.Dd July 12, 2013 +.Dd May 10, 2014 .Dt EDITLINE 3 .Os .Sh NAME @@ -761,6 +761,11 @@ Load the history list stored in .It Dv H_SAVE , Fa "const char *file" Save the history list to .Fa file . +.It Dv H_SAVE_FP , Fa "FILE *fp" +Save the history list to the opened +.Ft FILE +pointer +.Fa fp . .It Dv H_SETUNIQUE , Fa "int unique" Set flag that adjacent identical event strings should not be entered into the history. @@ -881,17 +886,22 @@ and the readline emulation appeared in appeared in .Nx 1.5 . .Sh AUTHORS +.An -nosplit The .Nm -library was written by Christos Zoulas. -Luke Mewburn wrote this manual and implemented +library was written by +.An Christos Zoulas . +.An Luke Mewburn +wrote this manual and implemented .Dv CC_REDISPLAY , .Dv CC_REFRESH_BEEP , .Dv EL_EDITMODE , and .Dv EL_RPROMPT . -Jaromir Dolecek implemented the readline emulation. -Johny Mattsson implemented wide-character support. +.An Jaromir Dolecek +implemented the readline emulation. +.An Johny Mattsson +implemented wide-character support. .Sh BUGS At this time, it is the responsibility of the caller to check the result of the Index: src/lib/libedit/el.c diff -u src/lib/libedit/el.c:1.72 src/lib/libedit/el.c:1.72.6.1 --- src/lib/libedit/el.c:1.72 Tue Jan 22 20:23:21 2013 +++ src/lib/libedit/el.c Sun Aug 10 06:51:57 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: el.c,v 1.72 2013/01/22 20:23:21 christos Exp $ */ +/* $NetBSD: el.c,v 1.72.6.1 2014/08/10 06:51:57 tls Exp $ */ /*- * Copyright (c) 1992, 1993 @@ -37,7 +37,7 @@ #if 0 static char sccsid[] = "@(#)el.c 8.2 (Berkeley) 1/3/94"; #else -__RCSID("$NetBSD: el.c,v 1.72 2013/01/22 20:23:21 christos Exp $"); +__RCSID("$NetBSD: el.c,v 1.72.6.1 2014/08/10 06:51:57 tls Exp $"); #endif #endif /* not lint && not SCCSID */ @@ -194,6 +194,13 @@ FUN(el,set)(EditLine *el, int op, ...) break; } + case EL_ALIAS_TEXT: { + el_afunc_t p = va_arg(ap, el_afunc_t); + void *arg = va_arg(ap, void *); + rv = ch_aliasfun(el, p, arg); + break; + } + case EL_PROMPT_ESC: case EL_RPROMPT_ESC: { el_pfunc_t p = va_arg(ap, el_pfunc_t); Index: src/lib/libedit/eln.c diff -u src/lib/libedit/eln.c:1.15 src/lib/libedit/eln.c:1.15.2.1 --- src/lib/libedit/eln.c:1.15 Wed Feb 26 13:50:29 2014 +++ src/lib/libedit/eln.c Sun Aug 10 06:51:57 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: eln.c,v 1.15 2014/02/26 13:50:29 christos Exp $ */ +/* $NetBSD: eln.c,v 1.15.2.1 2014/08/10 06:51:57 tls Exp $ */ /*- * Copyright (c) 2009 The NetBSD Foundation, Inc. @@ -34,7 +34,7 @@ */ #include "config.h" #if !defined(lint) && !defined(SCCSID) -__RCSID("$NetBSD: eln.c,v 1.15 2014/02/26 13:50:29 christos Exp $"); +__RCSID("$NetBSD: eln.c,v 1.15.2.1 2014/08/10 06:51:57 tls Exp $"); #endif /* not lint && not SCCSID */ #include "histedit.h" @@ -125,6 +125,13 @@ el_set(EditLine *el, int op, ...) break; } + case EL_ALIAS_TEXT: { + el_afunc_t p = va_arg(ap, el_afunc_t); + void *arg = va_arg(ap, void *); + ret = ch_aliasfun(el, p, arg); + break; + } + case EL_PROMPT_ESC: case EL_RPROMPT_ESC: { el_pfunc_t p = va_arg(ap, el_pfunc_t); @@ -158,10 +165,10 @@ el_set(EditLine *el, int op, ...) const char *argv[20]; int i; const wchar_t **wargv; - for (i = 1; i < (int)__arraycount(argv); ++i) - if ((argv[i] = va_arg(ap, char *)) == NULL) + for (i = 1; i < (int)__arraycount(argv) - 1; ++i) + if ((argv[i] = va_arg(ap, const char *)) == NULL) break; - argv[0] = NULL; + argv[0] = argv[i] = NULL; wargv = (const wchar_t **) ct_decode_argv(i + 1, argv, &el->el_lgcyconv); if (!wargv) { Index: src/lib/libedit/filecomplete.c diff -u src/lib/libedit/filecomplete.c:1.31 src/lib/libedit/filecomplete.c:1.31.18.1 --- src/lib/libedit/filecomplete.c:1.31 Fri Sep 16 16:13:16 2011 +++ src/lib/libedit/filecomplete.c Sun Aug 10 06:51:57 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: filecomplete.c,v 1.31 2011/09/16 16:13:16 plunky Exp $ */ +/* $NetBSD: filecomplete.c,v 1.31.18.1 2014/08/10 06:51:57 tls Exp $ */ /*- * Copyright (c) 1997 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include "config.h" #if !defined(lint) && !defined(SCCSID) -__RCSID("$NetBSD: filecomplete.c,v 1.31 2011/09/16 16:13:16 plunky Exp $"); +__RCSID("$NetBSD: filecomplete.c,v 1.31.18.1 2014/08/10 06:51:57 tls Exp $"); #endif /* not lint && not SCCSID */ #include <sys/types.h> @@ -490,7 +490,8 @@ fn_complete(EditLine *el, if (what_to_do == '?') goto display_matches; - if (matches[2] == NULL && strcmp(matches[0], matches[1]) == 0) { + if (matches[2] == NULL && + (matches[1] == NULL || strcmp(matches[0], matches[1]) == 0)) { /* * We found exact match. Add a space after * it, unless we do filename completion and the Index: src/lib/libedit/hist.h diff -u src/lib/libedit/hist.h:1.13 src/lib/libedit/hist.h:1.13.18.1 --- src/lib/libedit/hist.h:1.13 Thu Jul 28 20:50:55 2011 +++ src/lib/libedit/hist.h Sun Aug 10 06:51:57 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: hist.h,v 1.13 2011/07/28 20:50:55 christos Exp $ */ +/* $NetBSD: hist.h,v 1.13.18.1 2014/08/10 06:51:57 tls Exp $ */ /*- * Copyright (c) 1992, 1993 @@ -73,6 +73,7 @@ typedef struct el_history_t { #define HIST_SET(el, num) HIST_FUN(el, H_SET, num) #define HIST_LOAD(el, fname) HIST_FUN(el, H_LOAD fname) #define HIST_SAVE(el, fname) HIST_FUN(el, H_SAVE fname) +#define HIST_SAVE_FP(el, fp) HIST_FUN(el, H_SAVE_FP fp) protected int hist_init(EditLine *); protected void hist_end(EditLine *); Index: src/lib/libedit/histedit.h diff -u src/lib/libedit/histedit.h:1.51 src/lib/libedit/histedit.h:1.51.4.1 --- src/lib/libedit/histedit.h:1.51 Fri Jul 12 17:48:29 2013 +++ src/lib/libedit/histedit.h Sun Aug 10 06:51:57 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: histedit.h,v 1.51 2013/07/12 17:48:29 christos Exp $ */ +/* $NetBSD: histedit.h,v 1.51.4.1 2014/08/10 06:51:57 tls Exp $ */ /*- * Copyright (c) 1992, 1993 @@ -156,6 +156,7 @@ unsigned char _el_fn_complete(EditLine * #define EL_PROMPT_ESC 21 /* , prompt_func, Char); set/get */ #define EL_RPROMPT_ESC 22 /* , prompt_func, Char); set/get */ #define EL_RESIZE 23 /* , el_zfunc_t, void *); set */ +#define EL_ALIAS_TEXT 24 /* , el_afunc_t, void *); set */ #define EL_BUILTIN_GETCFN (NULL) @@ -224,6 +225,7 @@ int history(History *, HistEvent *, int #define H_NEXT_EVDATA 23 /* , const int, histdata_t *); */ #define H_DELDATA 24 /* , int, histdata_t *);*/ #define H_REPLACE 25 /* , const char *, histdata_t); */ +#define H_SAVE_FP 26 /* , FILE *); */ Index: src/lib/libedit/history.c diff -u src/lib/libedit/history.c:1.46 src/lib/libedit/history.c:1.46.16.1 --- src/lib/libedit/history.c:1.46 Fri Nov 18 20:39:18 2011 +++ src/lib/libedit/history.c Sun Aug 10 06:51:57 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: history.c,v 1.46 2011/11/18 20:39:18 christos Exp $ */ +/* $NetBSD: history.c,v 1.46.16.1 2014/08/10 06:51:57 tls Exp $ */ /*- * Copyright (c) 1992, 1993 @@ -37,7 +37,7 @@ #if 0 static char sccsid[] = "@(#)history.c 8.1 (Berkeley) 6/4/93"; #else -__RCSID("$NetBSD: history.c,v 1.46 2011/11/18 20:39:18 christos Exp $"); +__RCSID("$NetBSD: history.c,v 1.46.16.1 2014/08/10 06:51:57 tls Exp $"); #endif #endif /* not lint && not SCCSID */ @@ -105,6 +105,7 @@ private int history_getunique(TYPE(Histo private int history_set_fun(TYPE(History) *, TYPE(History) *); private int history_load(TYPE(History) *, const char *); private int history_save(TYPE(History) *, const char *); +private int history_save_fp(TYPE(History) *, FILE *); private int history_prev_event(TYPE(History) *, TYPE(HistEvent) *, int); private int history_next_event(TYPE(History) *, TYPE(HistEvent) *, int); private int history_next_string(TYPE(History) *, TYPE(HistEvent) *, const Char *); @@ -784,13 +785,12 @@ done: } -/* history_save(): +/* history_save_fp(): * TYPE(History) save function */ private int -history_save(TYPE(History) *h, const char *fname) +history_save_fp(TYPE(History) *h, FILE *fp) { - FILE *fp; TYPE(HistEvent) ev; int i = -1, retval; size_t len, max_size; @@ -800,9 +800,6 @@ history_save(TYPE(History) *h, const cha static ct_buffer_t conv; #endif - if ((fp = fopen(fname, "w")) == NULL) - return -1; - if (fchmod(fileno(fp), S_IRUSR|S_IWUSR) == -1) goto done; if (fputs(hist_cookie, fp) == EOF) @@ -831,11 +828,29 @@ history_save(TYPE(History) *h, const cha oomem: h_free(ptr); done: - (void) fclose(fp); return i; } +/* history_save(): + * History save function + */ +private int +history_save(TYPE(History) *h, const char *fname) +{ + FILE *fp; + int i; + + if ((fp = fopen(fname, "w")) == NULL) + return -1; + + i = history_save_fp(h, fp); + + (void) fclose(fp); + return i; +} + + /* history_prev_event(): * Find the previous event, with number given */ @@ -1016,6 +1031,12 @@ FUNW(history)(TYPE(History) *h, TYPE(His he_seterrev(ev, _HE_HIST_WRITE); break; + case H_SAVE_FP: + retval = history_save_fp(h, va_arg(va, FILE *)); + if (retval == -1) + he_seterrev(ev, _HE_HIST_WRITE); + break; + case H_PREV_EVENT: retval = history_prev_event(h, ev, va_arg(va, int)); break; Index: src/lib/libedit/map.c diff -u src/lib/libedit/map.c:1.33 src/lib/libedit/map.c:1.33.6.1 --- src/lib/libedit/map.c:1.33 Tue Jan 1 15:34:02 2013 +++ src/lib/libedit/map.c Sun Aug 10 06:51:57 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: map.c,v 1.33 2013/01/01 15:34:02 christos Exp $ */ +/* $NetBSD: map.c,v 1.33.6.1 2014/08/10 06:51:57 tls Exp $ */ /*- * Copyright (c) 1992, 1993 @@ -37,7 +37,7 @@ #if 0 static char sccsid[] = "@(#)map.c 8.1 (Berkeley) 6/4/93"; #else -__RCSID("$NetBSD: map.c,v 1.33 2013/01/01 15:34:02 christos Exp $"); +__RCSID("$NetBSD: map.c,v 1.33.6.1 2014/08/10 06:51:57 tls Exp $"); #endif #endif /* not lint && not SCCSID */ @@ -1396,7 +1396,7 @@ protected int map_addfunc(EditLine *el, const Char *name, const Char *help, el_func_t func) { void *p; - size_t nf = (size_t)el->el_map.nfunc + 1; + size_t nf = el->el_map.nfunc + 1; if (name == NULL || help == NULL || func == NULL) return -1; Index: src/lib/libedit/map.h diff -u src/lib/libedit/map.h:1.9 src/lib/libedit/map.h:1.9.22.1 --- src/lib/libedit/map.h:1.9 Wed Dec 30 22:37:40 2009 +++ src/lib/libedit/map.h Sun Aug 10 06:51:57 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: map.h,v 1.9 2009/12/30 22:37:40 christos Exp $ */ +/* $NetBSD: map.h,v 1.9.22.1 2014/08/10 06:51:57 tls Exp $ */ /*- * Copyright (c) 1992, 1993 @@ -57,7 +57,7 @@ typedef struct el_map_t { int type; /* Emacs or vi */ el_bindings_t *help; /* The help for the editor functions */ el_func_t *func; /* List of available functions */ - int nfunc; /* The number of functions/help items */ + size_t nfunc; /* The number of functions/help items */ } el_map_t; #define MAP_EMACS 0 Index: src/lib/libedit/parse.c diff -u src/lib/libedit/parse.c:1.26 src/lib/libedit/parse.c:1.26.18.1 --- src/lib/libedit/parse.c:1.26 Tue Aug 16 16:25:15 2011 +++ src/lib/libedit/parse.c Sun Aug 10 06:51:57 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: parse.c,v 1.26 2011/08/16 16:25:15 christos Exp $ */ +/* $NetBSD: parse.c,v 1.26.18.1 2014/08/10 06:51:57 tls Exp $ */ /*- * Copyright (c) 1992, 1993 @@ -37,7 +37,7 @@ #if 0 static char sccsid[] = "@(#)parse.c 8.1 (Berkeley) 6/4/93"; #else -__RCSID("$NetBSD: parse.c,v 1.26 2011/08/16 16:25:15 christos Exp $"); +__RCSID("$NetBSD: parse.c,v 1.26.18.1 2014/08/10 06:51:57 tls Exp $"); #endif #endif /* not lint && not SCCSID */ @@ -276,10 +276,11 @@ parse__string(Char *out, const Char *in) protected int parse_cmd(EditLine *el, const Char *cmd) { - el_bindings_t *b; + el_bindings_t *b = el->el_map.help; + size_t i; - for (b = el->el_map.help; b->name != NULL; b++) - if (Strcmp(b->name, cmd) == 0) - return b->func; + for (i = 0; i < el->el_map.nfunc; i++) + if (Strcmp(b[i].name, cmd) == 0) + return b[i].func; return -1; } Index: src/lib/libedit/read.c diff -u src/lib/libedit/read.c:1.70 src/lib/libedit/read.c:1.70.4.1 --- src/lib/libedit/read.c:1.70 Mon May 27 23:55:55 2013 +++ src/lib/libedit/read.c Sun Aug 10 06:51:57 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: read.c,v 1.70 2013/05/27 23:55:55 christos Exp $ */ +/* $NetBSD: read.c,v 1.70.4.1 2014/08/10 06:51:57 tls Exp $ */ /*- * Copyright (c) 1992, 1993 @@ -37,7 +37,7 @@ #if 0 static char sccsid[] = "@(#)read.c 8.1 (Berkeley) 6/4/93"; #else -__RCSID("$NetBSD: read.c,v 1.70 2013/05/27 23:55:55 christos Exp $"); +__RCSID("$NetBSD: read.c,v 1.70.4.1 2014/08/10 06:51:57 tls Exp $"); #endif #endif /* not lint && not SCCSID */ @@ -597,7 +597,7 @@ FUN(el,gets)(EditLine *el, int *nread) el->el_line.cursor = el->el_line.buffer; break; } - if ((unsigned int)cmdnum >= (unsigned int)el->el_map.nfunc) { /* BUG CHECK command */ + if ((size_t)cmdnum >= el->el_map.nfunc) { /* BUG CHECK command */ #ifdef DEBUG_EDIT (void) fprintf(el->el_errfile, "ERROR: illegal command from key 0%o\r\n", ch); Index: src/lib/libedit/readline.c diff -u src/lib/libedit/readline.c:1.110 src/lib/libedit/readline.c:1.110.2.1 --- src/lib/libedit/readline.c:1.110 Tue Jan 21 13:51:44 2014 +++ src/lib/libedit/readline.c Sun Aug 10 06:51:57 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: readline.c,v 1.110 2014/01/21 13:51:44 christos Exp $ */ +/* $NetBSD: readline.c,v 1.110.2.1 2014/08/10 06:51:57 tls Exp $ */ /*- * Copyright (c) 1997 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include "config.h" #if !defined(lint) && !defined(SCCSID) -__RCSID("$NetBSD: readline.c,v 1.110 2014/01/21 13:51:44 christos Exp $"); +__RCSID("$NetBSD: readline.c,v 1.110.2.1 2014/08/10 06:51:57 tls Exp $"); #endif /* not lint && not SCCSID */ #include <sys/types.h> @@ -1970,7 +1970,7 @@ rl_callback_read_char(void) } else wbuf = NULL; (*(void (*)(const char *))rl_linefunc)(wbuf); - //el_set(e, EL_UNBUFFERED, 1); + el_set(e, EL_UNBUFFERED, 1); } } Index: src/lib/libedit/tty.c diff -u src/lib/libedit/tty.c:1.42 src/lib/libedit/tty.c:1.42.8.1 --- src/lib/libedit/tty.c:1.42 Tue May 15 15:59:01 2012 +++ src/lib/libedit/tty.c Sun Aug 10 06:51:57 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: tty.c,v 1.42 2012/05/15 15:59:01 christos Exp $ */ +/* $NetBSD: tty.c,v 1.42.8.1 2014/08/10 06:51:57 tls Exp $ */ /*- * Copyright (c) 1992, 1993 @@ -37,7 +37,7 @@ #if 0 static char sccsid[] = "@(#)tty.c 8.1 (Berkeley) 6/4/93"; #else -__RCSID("$NetBSD: tty.c,v 1.42 2012/05/15 15:59:01 christos Exp $"); +__RCSID("$NetBSD: tty.c,v 1.42.8.1 2014/08/10 06:51:57 tls Exp $"); #endif #endif /* not lint && not SCCSID */ @@ -48,6 +48,7 @@ __RCSID("$NetBSD: tty.c,v 1.42 2012/05/1 #include <errno.h> #include <unistd.h> /* for isatty */ #include <strings.h> /* for ffs */ +#include <stdlib.h> /* for abort */ #include "el.h" #include "tty.h" @@ -459,6 +460,7 @@ private void tty__getchar(struct termios private void tty__setchar(struct termios *, unsigned char *); private speed_t tty__getspeed(struct termios *); private int tty_setup(EditLine *); +private void tty_setup_flags(EditLine *, struct termios *, int); #define t_qu t_ts @@ -517,17 +519,7 @@ tty_setup(EditLine *el) el->el_tty.t_tabs = tty__gettabs(&el->el_tty.t_ex); el->el_tty.t_eight = tty__geteightbit(&el->el_tty.t_ex); - el->el_tty.t_ex.c_iflag &= ~el->el_tty.t_t[EX_IO][MD_INP].t_clrmask; - el->el_tty.t_ex.c_iflag |= el->el_tty.t_t[EX_IO][MD_INP].t_setmask; - - el->el_tty.t_ex.c_oflag &= ~el->el_tty.t_t[EX_IO][MD_OUT].t_clrmask; - el->el_tty.t_ex.c_oflag |= el->el_tty.t_t[EX_IO][MD_OUT].t_setmask; - - el->el_tty.t_ex.c_cflag &= ~el->el_tty.t_t[EX_IO][MD_CTL].t_clrmask; - el->el_tty.t_ex.c_cflag |= el->el_tty.t_t[EX_IO][MD_CTL].t_setmask; - - el->el_tty.t_ex.c_lflag &= ~el->el_tty.t_t[EX_IO][MD_LIN].t_clrmask; - el->el_tty.t_ex.c_lflag |= el->el_tty.t_t[EX_IO][MD_LIN].t_setmask; + tty_setup_flags(el, &el->el_tty.t_ex, EX_IO); /* * Reset the tty chars to reasonable defaults @@ -562,17 +554,7 @@ tty_setup(EditLine *el) } } - el->el_tty.t_ed.c_iflag &= ~el->el_tty.t_t[ED_IO][MD_INP].t_clrmask; - el->el_tty.t_ed.c_iflag |= el->el_tty.t_t[ED_IO][MD_INP].t_setmask; - - el->el_tty.t_ed.c_oflag &= ~el->el_tty.t_t[ED_IO][MD_OUT].t_clrmask; - el->el_tty.t_ed.c_oflag |= el->el_tty.t_t[ED_IO][MD_OUT].t_setmask; - - el->el_tty.t_ed.c_cflag &= ~el->el_tty.t_t[ED_IO][MD_CTL].t_clrmask; - el->el_tty.t_ed.c_cflag |= el->el_tty.t_t[ED_IO][MD_CTL].t_setmask; - - el->el_tty.t_ed.c_lflag &= ~el->el_tty.t_t[ED_IO][MD_LIN].t_clrmask; - el->el_tty.t_ed.c_lflag |= el->el_tty.t_t[ED_IO][MD_LIN].t_setmask; + tty_setup_flags(el, &el->el_tty.t_ed, ED_IO); tty__setchar(&el->el_tty.t_ed, el->el_tty.t_c[ED_IO]); tty_bind_char(el, 1); @@ -938,6 +920,58 @@ tty_bind_char(EditLine *el, int force) } +private tcflag_t * +tty__get_flag(struct termios *t, int kind) { + switch (kind) { + case MD_INP: + return &t->c_iflag; + case MD_OUT: + return &t->c_oflag; + case MD_CTL: + return &t->c_cflag; + case MD_LIN: + return &t->c_lflag; + default: + abort(); + /*NOTREACHED*/ + } +} + + +private tcflag_t +tty_update_flag(EditLine *el, tcflag_t f, int mode, int kind) +{ + f &= ~el->el_tty.t_t[mode][kind].t_clrmask; + f |= el->el_tty.t_t[mode][kind].t_setmask; + return f; +} + + +private void +tty_update_flags(EditLine *el, int kind) +{ + tcflag_t *tt, *ed, *ex; + tt = tty__get_flag(&el->el_tty.t_ts, kind); + ed = tty__get_flag(&el->el_tty.t_ed, kind); + ex = tty__get_flag(&el->el_tty.t_ex, kind); + + if (*tt != *ex && (kind != MD_CTL || *tt != *ed)) { + *ed = tty_update_flag(el, *tt, ED_IO, kind); + *ex = tty_update_flag(el, *tt, EX_IO, kind); + } +} + + +private void +tty_update_char(EditLine *el, int mode, int c) { + if (!((el->el_tty.t_t[mode][MD_CHAR].t_setmask & C_SH(c))) + && (el->el_tty.t_c[TS_IO][c] != el->el_tty.t_c[EX_IO][c])) + el->el_tty.t_c[mode][c] = el->el_tty.t_c[TS_IO][c]; + if (el->el_tty.t_t[mode][MD_CHAR].t_clrmask & C_SH(c)) + el->el_tty.t_c[mode][c] = el->el_tty.t_vdisable; +} + + /* tty_rawmode(): * Set terminal into 1 character at a time mode. */ @@ -973,112 +1007,42 @@ tty_rawmode(EditLine *el) (void) cfsetospeed(&el->el_tty.t_ed, el->el_tty.t_speed); } if (tty__cooked_mode(&el->el_tty.t_ts)) { - if (el->el_tty.t_ts.c_cflag != el->el_tty.t_ex.c_cflag) { - el->el_tty.t_ex.c_cflag = - el->el_tty.t_ts.c_cflag; - el->el_tty.t_ex.c_cflag &= - ~el->el_tty.t_t[EX_IO][MD_CTL].t_clrmask; - el->el_tty.t_ex.c_cflag |= - el->el_tty.t_t[EX_IO][MD_CTL].t_setmask; - - el->el_tty.t_ed.c_cflag = - el->el_tty.t_ts.c_cflag; - el->el_tty.t_ed.c_cflag &= - ~el->el_tty.t_t[ED_IO][MD_CTL].t_clrmask; - el->el_tty.t_ed.c_cflag |= - el->el_tty.t_t[ED_IO][MD_CTL].t_setmask; - } - if ((el->el_tty.t_ts.c_lflag != el->el_tty.t_ex.c_lflag) && - (el->el_tty.t_ts.c_lflag != el->el_tty.t_ed.c_lflag)) { - el->el_tty.t_ex.c_lflag = - el->el_tty.t_ts.c_lflag; - el->el_tty.t_ex.c_lflag &= - ~el->el_tty.t_t[EX_IO][MD_LIN].t_clrmask; - el->el_tty.t_ex.c_lflag |= - el->el_tty.t_t[EX_IO][MD_LIN].t_setmask; - - el->el_tty.t_ed.c_lflag = - el->el_tty.t_ts.c_lflag; - el->el_tty.t_ed.c_lflag &= - ~el->el_tty.t_t[ED_IO][MD_LIN].t_clrmask; - el->el_tty.t_ed.c_lflag |= - el->el_tty.t_t[ED_IO][MD_LIN].t_setmask; - } - if ((el->el_tty.t_ts.c_iflag != el->el_tty.t_ex.c_iflag) && - (el->el_tty.t_ts.c_iflag != el->el_tty.t_ed.c_iflag)) { - el->el_tty.t_ex.c_iflag = - el->el_tty.t_ts.c_iflag; - el->el_tty.t_ex.c_iflag &= - ~el->el_tty.t_t[EX_IO][MD_INP].t_clrmask; - el->el_tty.t_ex.c_iflag |= - el->el_tty.t_t[EX_IO][MD_INP].t_setmask; - - el->el_tty.t_ed.c_iflag = - el->el_tty.t_ts.c_iflag; - el->el_tty.t_ed.c_iflag &= - ~el->el_tty.t_t[ED_IO][MD_INP].t_clrmask; - el->el_tty.t_ed.c_iflag |= - el->el_tty.t_t[ED_IO][MD_INP].t_setmask; - } - if ((el->el_tty.t_ts.c_oflag != el->el_tty.t_ex.c_oflag) && - (el->el_tty.t_ts.c_oflag != el->el_tty.t_ed.c_oflag)) { - el->el_tty.t_ex.c_oflag = - el->el_tty.t_ts.c_oflag; - el->el_tty.t_ex.c_oflag &= - ~el->el_tty.t_t[EX_IO][MD_OUT].t_clrmask; - el->el_tty.t_ex.c_oflag |= - el->el_tty.t_t[EX_IO][MD_OUT].t_setmask; - - el->el_tty.t_ed.c_oflag = - el->el_tty.t_ts.c_oflag; - el->el_tty.t_ed.c_oflag &= - ~el->el_tty.t_t[ED_IO][MD_OUT].t_clrmask; - el->el_tty.t_ed.c_oflag |= - el->el_tty.t_t[ED_IO][MD_OUT].t_setmask; - } + int i; + + for (i = MD_INP; i <= MD_LIN; i++) + tty_update_flags(el, i); + if (tty__gettabs(&el->el_tty.t_ex) == 0) el->el_tty.t_tabs = 0; else el->el_tty.t_tabs = EL_CAN_TAB ? 1 : 0; - { - int i; + tty__getchar(&el->el_tty.t_ts, el->el_tty.t_c[TS_IO]); + /* + * Check if the user made any changes. + * If he did, then propagate the changes to the + * edit and execute data structures. + */ + for (i = 0; i < C_NCC; i++) + if (el->el_tty.t_c[TS_IO][i] != + el->el_tty.t_c[EX_IO][i]) + break; - tty__getchar(&el->el_tty.t_ts, el->el_tty.t_c[TS_IO]); + if (i != C_NCC) { /* - * Check if the user made any changes. - * If he did, then propagate the changes to the - * edit and execute data structures. - */ + * Propagate changes only to the unprotected + * chars that have been modified just now. + */ for (i = 0; i < C_NCC; i++) - if (el->el_tty.t_c[TS_IO][i] != - el->el_tty.t_c[EX_IO][i]) - break; - - if (i != C_NCC) { - /* - * Propagate changes only to the unprotected - * chars that have been modified just now. - */ - for (i = 0; i < C_NCC; i++) { - if (!((el->el_tty.t_t[ED_IO][MD_CHAR].t_setmask & C_SH(i))) - && (el->el_tty.t_c[TS_IO][i] != el->el_tty.t_c[EX_IO][i])) - el->el_tty.t_c[ED_IO][i] = el->el_tty.t_c[TS_IO][i]; - if (el->el_tty.t_t[ED_IO][MD_CHAR].t_clrmask & C_SH(i)) - el->el_tty.t_c[ED_IO][i] = el->el_tty.t_vdisable; - } - tty_bind_char(el, 0); - tty__setchar(&el->el_tty.t_ed, el->el_tty.t_c[ED_IO]); - - for (i = 0; i < C_NCC; i++) { - if (!((el->el_tty.t_t[EX_IO][MD_CHAR].t_setmask & C_SH(i))) - && (el->el_tty.t_c[TS_IO][i] != el->el_tty.t_c[EX_IO][i])) - el->el_tty.t_c[EX_IO][i] = el->el_tty.t_c[TS_IO][i]; - if (el->el_tty.t_t[EX_IO][MD_CHAR].t_clrmask & C_SH(i)) - el->el_tty.t_c[EX_IO][i] = el->el_tty.t_vdisable; - } - tty__setchar(&el->el_tty.t_ex, el->el_tty.t_c[EX_IO]); - } + tty_update_char(el, ED_IO, i); + + tty_bind_char(el, 0); + tty__setchar(&el->el_tty.t_ed, el->el_tty.t_c[ED_IO]); + + for (i = 0; i < C_NCC; i++) + tty_update_char(el, EX_IO, i); + + tty__setchar(&el->el_tty.t_ex, el->el_tty.t_c[EX_IO]); } } if (tty_setty(el, TCSADRAIN, &el->el_tty.t_ed) == -1) { @@ -1129,17 +1093,7 @@ tty_quotemode(EditLine *el) el->el_tty.t_qu = el->el_tty.t_ed; - el->el_tty.t_qu.c_iflag &= ~el->el_tty.t_t[QU_IO][MD_INP].t_clrmask; - el->el_tty.t_qu.c_iflag |= el->el_tty.t_t[QU_IO][MD_INP].t_setmask; - - el->el_tty.t_qu.c_oflag &= ~el->el_tty.t_t[QU_IO][MD_OUT].t_clrmask; - el->el_tty.t_qu.c_oflag |= el->el_tty.t_t[QU_IO][MD_OUT].t_setmask; - - el->el_tty.t_qu.c_cflag &= ~el->el_tty.t_t[QU_IO][MD_CTL].t_clrmask; - el->el_tty.t_qu.c_cflag |= el->el_tty.t_t[QU_IO][MD_CTL].t_setmask; - - el->el_tty.t_qu.c_lflag &= ~el->el_tty.t_t[QU_IO][MD_LIN].t_clrmask; - el->el_tty.t_qu.c_lflag |= el->el_tty.t_t[QU_IO][MD_LIN].t_setmask; + tty_setup_flags(el, &el->el_tty.t_qu, QU_IO); if (tty_setty(el, TCSADRAIN, &el->el_tty.t_qu) == -1) { #ifdef DEBUG_TTY @@ -1320,6 +1274,7 @@ tty_stty(EditLine *el, int argc __attrib } } + tty_setup_flags(el, tios, z); if (el->el_tty.t_mode == z) { if (tty_setty(el, TCSADRAIN, tios) == -1) { #ifdef DEBUG_TTY @@ -1357,3 +1312,14 @@ tty_printchar(EditLine *el, unsigned cha (void) fprintf(el->el_errfile, "\n"); } #endif /* notyet */ + + +private void +tty_setup_flags(EditLine *el, struct termios *tios, int mode) +{ + int kind; + for (kind = MD_INP; kind <= MD_LIN; kind++) { + tcflag_t *f = tty__get_flag(tios, kind); + *f = tty_update_flag(el, *f, mode, kind); + } +} Index: src/lib/libedit/tty.h diff -u src/lib/libedit/tty.h:1.14 src/lib/libedit/tty.h:1.14.8.1 --- src/lib/libedit/tty.h:1.14 Tue May 15 15:59:01 2012 +++ src/lib/libedit/tty.h Sun Aug 10 06:51:57 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: tty.h,v 1.14 2012/05/15 15:59:01 christos Exp $ */ +/* $NetBSD: tty.h,v 1.14.8.1 2014/08/10 06:51:57 tls Exp $ */ /*- * Copyright (c) 1992, 1993 @@ -442,6 +442,7 @@ #define QU_IO 2 /* used only for quoted chars */ #define NN_IO 3 /* The number of entries */ +/* Don't re-order */ #define MD_INP 0 #define MD_OUT 1 #define MD_CTL 2 Index: src/lib/libedit/vi.c diff -u src/lib/libedit/vi.c:1.43 src/lib/libedit/vi.c:1.43.16.1 --- src/lib/libedit/vi.c:1.43 Mon Jan 16 14:57:45 2012 +++ src/lib/libedit/vi.c Sun Aug 10 06:51:57 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: vi.c,v 1.43 2012/01/16 14:57:45 christos Exp $ */ +/* $NetBSD: vi.c,v 1.43.16.1 2014/08/10 06:51:57 tls Exp $ */ /*- * Copyright (c) 1992, 1993 @@ -42,7 +42,7 @@ #if 0 static char sccsid[] = "@(#)vi.c 8.1 (Berkeley) 6/4/93"; #else -__RCSID("$NetBSD: vi.c,v 1.43 2012/01/16 14:57:45 christos Exp $"); +__RCSID("$NetBSD: vi.c,v 1.43.16.1 2014/08/10 06:51:57 tls Exp $"); #endif #endif /* not lint && not SCCSID */ @@ -918,34 +918,26 @@ vi_comment_out(EditLine *el, Int c __att * NB: posix implies that we should enter insert mode, however * this is against historical precedent... */ -#ifdef __weak_reference -__weakref_visible char *my_get_alias_text(const char *) - __weak_reference(get_alias_text); -#endif protected el_action_t /*ARGSUSED*/ vi_alias(EditLine *el, Int c __attribute__((__unused__))) { -#ifdef __weak_reference char alias_name[3]; - char *alias_text; + const char *alias_text; - if (my_get_alias_text == 0) { + if (el->el_chared.c_aliasfun == NULL) return CC_ERROR; - } alias_name[0] = '_'; alias_name[2] = 0; if (el_getc(el, &alias_name[1]) != 1) return CC_ERROR; - alias_text = my_get_alias_text(alias_name); + alias_text = (*el->el_chared.c_aliasfun)(el->el_chared.c_aliasarg, + alias_name); if (alias_text != NULL) FUN(el,push)(el, ct_decode_string(alias_text, &el->el_scratch)); return CC_NORM; -#else - return CC_ERROR; -#endif } /* vi_to_history_line(): Index: src/lib/libedit/TEST/tc1.c diff -u src/lib/libedit/TEST/tc1.c:1.5 src/lib/libedit/TEST/tc1.c:1.5.22.1 --- src/lib/libedit/TEST/tc1.c:1.5 Sun Apr 18 21:17:47 2010 +++ src/lib/libedit/TEST/tc1.c Sun Aug 10 06:51:57 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: tc1.c,v 1.5 2010/04/18 21:17:47 christos Exp $ */ +/* $NetBSD: tc1.c,v 1.5.22.1 2014/08/10 06:51:57 tls Exp $ */ /*- * Copyright (c) 1992, 1993 @@ -42,7 +42,7 @@ __COPYRIGHT("@(#) Copyright (c) 1992, 19 #if 0 static char sccsid[] = "@(#)test.c 8.1 (Berkeley) 6/4/93"; #else -__RCSID("$NetBSD: tc1.c,v 1.5 2010/04/18 21:17:47 christos Exp $"); +__RCSID("$NetBSD: tc1.c,v 1.5.22.1 2014/08/10 06:51:57 tls Exp $"); #endif #endif /* not lint && not SCCSID */ @@ -189,7 +189,7 @@ main(int argc, char *argv[]) #endif if (gotsig) { - (void) fprintf(stderr, "Got signal %d.\n", gotsig); + (void) fprintf(stderr, "Got signal %d.\n", (int)gotsig); gotsig = 0; el_reset(el); } Index: src/lib/libedit/TEST/wtc1.c diff -u src/lib/libedit/TEST/wtc1.c:1.6 src/lib/libedit/TEST/wtc1.c:1.6.16.1 --- src/lib/libedit/TEST/wtc1.c:1.6 Fri Nov 18 20:30:01 2011 +++ src/lib/libedit/TEST/wtc1.c Sun Aug 10 06:51:57 2014 @@ -170,7 +170,7 @@ main(int argc, char *argv[]) #endif if (gotsig) { - (void)fprintf(stderr, "Got signal %d.\n", gotsig); + (void)fprintf(stderr, "Got signal %d.\n", (int)gotsig); gotsig = 0; el_reset(el); }