Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 31 Mar 2011 18:28:46 +0000 (UTC)
From:      "David E. O'Brien" <obrien@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org
Subject:   svn commit: r220216 - vendor/NetBSD/libedit/dist
Message-ID:  <201103311828.p2VISk4G014957@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: obrien
Date: Thu Mar 31 18:28:46 2011
New Revision: 220216
URL: http://svn.freebsd.org/changeset/base/220216

Log:
  Vendor import NetBSD's libedit of "2006/03/23 20:22:51 UTC".
  
  Obtained from:	NetBSD

Modified:
  vendor/NetBSD/libedit/dist/chared.h
  vendor/NetBSD/libedit/dist/common.c
  vendor/NetBSD/libedit/dist/emacs.c
  vendor/NetBSD/libedit/dist/key.c
  vendor/NetBSD/libedit/dist/key.h
  vendor/NetBSD/libedit/dist/map.c
  vendor/NetBSD/libedit/dist/readline.c
  vendor/NetBSD/libedit/dist/term.c
  vendor/NetBSD/libedit/dist/term.h
  vendor/NetBSD/libedit/dist/tty.c
  vendor/NetBSD/libedit/dist/vi.c

Modified: vendor/NetBSD/libedit/dist/chared.h
==============================================================================
--- vendor/NetBSD/libedit/dist/chared.h	Thu Mar 31 18:28:09 2011	(r220215)
+++ vendor/NetBSD/libedit/dist/chared.h	Thu Mar 31 18:28:46 2011	(r220216)
@@ -1,4 +1,4 @@
-/*	$NetBSD: chared.h,v 1.16 2005/08/08 14:05:37 christos Exp $	*/
+/*	$NetBSD: chared.h,v 1.17 2006/03/06 21:11:56 christos Exp $	*/
 
 /*-
  * Copyright (c) 1992, 1993
@@ -116,7 +116,6 @@ typedef struct el_chared_t {
 } el_chared_t;
 
 
-#define	STReof		"^D\b\b"
 #define	STRQQ		"\"\""
 
 #define	isglob(a)	(strchr("*[]?", (a)) != NULL)

Modified: vendor/NetBSD/libedit/dist/common.c
==============================================================================
--- vendor/NetBSD/libedit/dist/common.c	Thu Mar 31 18:28:09 2011	(r220215)
+++ vendor/NetBSD/libedit/dist/common.c	Thu Mar 31 18:28:46 2011	(r220216)
@@ -1,4 +1,4 @@
-/*	$NetBSD: common.c,v 1.18 2005/08/08 14:05:37 christos Exp $	*/
+/*	$NetBSD: common.c,v 1.19 2006/03/06 21:11:56 christos Exp $	*/
 
 /*-
  * Copyright (c) 1992, 1993
@@ -37,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)common.c	8.1 (Berkeley) 6/4/93";
 #else
-__RCSID("$NetBSD: common.c,v 1.18 2005/08/08 14:05:37 christos Exp $");
+__RCSID("$NetBSD: common.c,v 1.19 2006/03/06 21:11:56 christos Exp $");
 #endif
 #endif /* not lint && not SCCSID */
 
@@ -137,7 +137,7 @@ ed_delete_prev_word(EditLine *el, int c 
  */
 protected el_action_t
 /*ARGSUSED*/
-ed_delete_next_char(EditLine *el, int c __attribute__((__unused__)))
+ed_delete_next_char(EditLine *el, int c)
 {
 #ifdef notdef			/* XXX */
 #define	EL	el->el_line
@@ -154,9 +154,8 @@ ed_delete_next_char(EditLine *el, int c 
 #ifdef KSHVI
 				return (CC_ERROR);
 #else
-				term_overwrite(el, STReof, 4);
-					/* then do an EOF */
-				term__flush();
+				/* then do an EOF */
+				term_writechar(el, c);
 				return (CC_EOF);
 #endif
 			} else {

Modified: vendor/NetBSD/libedit/dist/emacs.c
==============================================================================
--- vendor/NetBSD/libedit/dist/emacs.c	Thu Mar 31 18:28:09 2011	(r220215)
+++ vendor/NetBSD/libedit/dist/emacs.c	Thu Mar 31 18:28:46 2011	(r220216)
@@ -1,4 +1,4 @@
-/*	$NetBSD: emacs.c,v 1.20 2005/08/08 14:05:37 christos Exp $	*/
+/*	$NetBSD: emacs.c,v 1.21 2006/03/06 21:11:56 christos Exp $	*/
 
 /*-
  * Copyright (c) 1992, 1993
@@ -37,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)emacs.c	8.1 (Berkeley) 6/4/93";
 #else
-__RCSID("$NetBSD: emacs.c,v 1.20 2005/08/08 14:05:37 christos Exp $");
+__RCSID("$NetBSD: emacs.c,v 1.21 2006/03/06 21:11:56 christos Exp $");
 #endif
 #endif /* not lint && not SCCSID */
 
@@ -52,15 +52,14 @@ __RCSID("$NetBSD: emacs.c,v 1.20 2005/08
  */
 protected el_action_t
 /*ARGSUSED*/
-em_delete_or_list(EditLine *el, int c __attribute__((__unused__)))
+em_delete_or_list(EditLine *el, int c)
 {
 
 	if (el->el_line.cursor == el->el_line.lastchar) {
 					/* if I'm at the end */
 		if (el->el_line.cursor == el->el_line.buffer) {
 					/* and the beginning */
-			term_overwrite(el, STReof, 4);	/* then do an EOF */
-			term__flush();
+			term_writec(el, c);	/* then do an EOF */
 			return (CC_EOF);
 		} else {
 			/*

Modified: vendor/NetBSD/libedit/dist/key.c
==============================================================================
--- vendor/NetBSD/libedit/dist/key.c	Thu Mar 31 18:28:09 2011	(r220215)
+++ vendor/NetBSD/libedit/dist/key.c	Thu Mar 31 18:28:46 2011	(r220216)
@@ -1,4 +1,4 @@
-/*	$NetBSD: key.c,v 1.17 2005/08/08 14:05:37 christos Exp $	*/
+/*	$NetBSD: key.c,v 1.19 2006/03/23 20:22:51 christos Exp $	*/
 
 /*-
  * Copyright (c) 1992, 1993
@@ -37,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)key.c	8.1 (Berkeley) 6/4/93";
 #else
-__RCSID("$NetBSD: key.c,v 1.17 2005/08/08 14:05:37 christos Exp $");
+__RCSID("$NetBSD: key.c,v 1.19 2006/03/23 20:22:51 christos Exp $");
 #endif
 #endif /* not lint && not SCCSID */
 
@@ -91,7 +91,6 @@ private int		 node__delete(EditLine *, k
 private int		 node_lookup(EditLine *, const char *, key_node_t *,
     int);
 private int		 node_enum(EditLine *, key_node_t *, int);
-private int		 key__decode_char(char *, int, int);
 
 #define	KEY_BUFSIZ	EL_BUFSIZ
 
@@ -497,7 +496,7 @@ node_lookup(EditLine *el, const char *st
 		/* If match put this char into el->el_key.buf.  Recurse */
 		if (ptr->ch == *str) {
 			/* match found */
-			ncnt = key__decode_char(el->el_key.buf, cnt,
+			ncnt = key__decode_char(el->el_key.buf, KEY_BUFSIZ, cnt,
 			    (unsigned char) ptr->ch);
 			if (ptr->next != NULL)
 				/* not yet at leaf */
@@ -551,7 +550,8 @@ node_enum(EditLine *el, key_node_t *ptr,
 		return (-1);
 	}
 	/* put this char at end of str */
-	ncnt = key__decode_char(el->el_key.buf, cnt, (unsigned char) ptr->ch);
+	ncnt = key__decode_char(el->el_key.buf, KEY_BUFSIZ, cnt,
+	    (unsigned char)ptr->ch);
 	if (ptr->next == NULL) {
 		/* print this key and function */
 		el->el_key.buf[ncnt + 1] = '"';
@@ -582,9 +582,10 @@ key_kprint(EditLine *el, const char *key
 		switch (ntype) {
 		case XK_STR:
 		case XK_EXE:
-			(void) fprintf(el->el_outfile, fmt, key,
-			    key__decode_str(val->str, unparsbuf,
-				ntype == XK_STR ? "\"\"" : "[]"));
+			(void) key__decode_str(val->str, unparsbuf,
+			    sizeof(unparsbuf), 
+			    ntype == XK_STR ? "\"\"" : "[]");
+			(void) fprintf(el->el_outfile, fmt, key, unparsbuf);
 			break;
 		case XK_CMD:
 			for (fp = el->el_map.help; fp->name; fp++)
@@ -609,83 +610,97 @@ key_kprint(EditLine *el, const char *key
 }
 
 
+#define ADDC(c) \
+	if (b < eb) \
+		*b++ = c; \
+	else \
+		b++
 /* key__decode_char():
  *	Put a printable form of char in buf.
  */
-private int
-key__decode_char(char *buf, int cnt, int ch)
+protected int
+key__decode_char(char *buf, int cnt, int off, int ch)
 {
+	char *sb = buf + off;
+	char *eb = buf + cnt;
+	char *b = sb;
 	if (ch == 0) {
-		buf[cnt++] = '^';
-		buf[cnt] = '@';
-		return (cnt);
+		ADDC('^');
+		ADDC('@');
+		return b - sb;
 	}
 	if (iscntrl(ch)) {
-		buf[cnt++] = '^';
+		ADDC('^');
 		if (ch == '\177')
-			buf[cnt] = '?';
+			ADDC('?');
 		else
-			buf[cnt] = ch | 0100;
+			ADDC(ch | 0100);
 	} else if (ch == '^') {
-		buf[cnt++] = '\\';
-		buf[cnt] = '^';
+		ADDC('\\');
+		ADDC('^');
 	} else if (ch == '\\') {
-		buf[cnt++] = '\\';
-		buf[cnt] = '\\';
+		ADDC('\\');
+		ADDC('\\');
 	} else if (ch == ' ' || (isprint(ch) && !isspace(ch))) {
-		buf[cnt] = ch;
+		ADDC(ch);
 	} else {
-		buf[cnt++] = '\\';
-		buf[cnt++] = (((unsigned int) ch >> 6) & 7) + '0';
-		buf[cnt++] = (((unsigned int) ch >> 3) & 7) + '0';
-		buf[cnt] = (ch & 7) + '0';
+		ADDC('\\');
+		ADDC((((unsigned int) ch >> 6) & 7) + '0');
+		ADDC((((unsigned int) ch >> 3) & 7) + '0');
+		ADDC((ch & 7) + '0');
 	}
-	return (cnt);
+	return b - sb;
 }
 
 
 /* key__decode_str():
  *	Make a printable version of the ey
  */
-protected char *
-key__decode_str(const char *str, char *buf, const char *sep)
+protected int
+key__decode_str(const char *str, char *buf, int len, const char *sep)
 {
-	char *b;
+	char *b = buf, *eb = b + len;
 	const char *p;
 
 	b = buf;
-	if (sep[0] != '\0')
-		*b++ = sep[0];
-	if (*str == 0) {
-		*b++ = '^';
-		*b++ = '@';
-		if (sep[0] != '\0' && sep[1] != '\0')
-			*b++ = sep[1];
-		*b++ = 0;
-		return (buf);
+	if (sep[0] != '\0') {
+		ADDC(sep[0]);
+	}
+	if (*str == '\0') {
+		ADDC('^');
+		ADDC('@');
+		if (sep[0] != '\0' && sep[1] != '\0') {
+			ADDC(sep[1]);
+		}
+		goto done;
 	}
 	for (p = str; *p != 0; p++) {
 		if (iscntrl((unsigned char) *p)) {
-			*b++ = '^';
-			if (*p == '\177')
-				*b++ = '?';
-			else
-				*b++ = *p | 0100;
+			ADDC('^');
+			if (*p == '\177') {
+				ADDC('?');
+			} else {
+				ADDC(*p | 0100);
+			}
 		} else if (*p == '^' || *p == '\\') {
-			*b++ = '\\';
-			*b++ = *p;
+			ADDC('\\');
+			ADDC(*p);
 		} else if (*p == ' ' || (isprint((unsigned char) *p) &&
 			!isspace((unsigned char) *p))) {
-			*b++ = *p;
+			ADDC(*p);
 		} else {
-			*b++ = '\\';
-			*b++ = (((unsigned int) *p >> 6) & 7) + '0';
-			*b++ = (((unsigned int) *p >> 3) & 7) + '0';
-			*b++ = (*p & 7) + '0';
+			ADDC('\\');
+			ADDC((((unsigned int) *p >> 6) & 7) + '0');
+			ADDC((((unsigned int) *p >> 3) & 7) + '0');
+			ADDC((*p & 7) + '0');
 		}
 	}
-	if (sep[0] != '\0' && sep[1] != '\0')
-		*b++ = sep[1];
-	*b++ = 0;
-	return (buf);		/* should check for overflow */
+	if (sep[0] != '\0' && sep[1] != '\0') {
+		ADDC(sep[1]);
+	}
+done:
+	ADDC('\0');
+	if (b - buf >= len)
+	    buf[len - 1] = '\0';
+	return b - buf;
 }

Modified: vendor/NetBSD/libedit/dist/key.h
==============================================================================
--- vendor/NetBSD/libedit/dist/key.h	Thu Mar 31 18:28:09 2011	(r220215)
+++ vendor/NetBSD/libedit/dist/key.h	Thu Mar 31 18:28:46 2011	(r220216)
@@ -1,4 +1,4 @@
-/*	$NetBSD: key.h,v 1.8 2003/08/07 16:44:32 agc Exp $	*/
+/*	$NetBSD: key.h,v 1.10 2006/03/23 20:22:51 christos Exp $	*/
 
 /*-
  * Copyright (c) 1992, 1993
@@ -74,6 +74,8 @@ protected int		 key_delete(EditLine *, c
 protected void		 key_print(EditLine *, const char *);
 protected void	         key_kprint(EditLine *, const char *, key_value_t *,
     int);
-protected char		*key__decode_str(const char *, char *, const char *);
+protected int		 key__decode_str(const char *, char *, int,
+    const char *);
+protected int		 key__decode_char(char *, int, int, int);
 
 #endif /* _h_el_key */

Modified: vendor/NetBSD/libedit/dist/map.c
==============================================================================
--- vendor/NetBSD/libedit/dist/map.c	Thu Mar 31 18:28:09 2011	(r220215)
+++ vendor/NetBSD/libedit/dist/map.c	Thu Mar 31 18:28:46 2011	(r220216)
@@ -1,4 +1,4 @@
-/*	$NetBSD: map.c,v 1.22 2005/08/09 13:58:44 christos Exp $	*/
+/*	$NetBSD: map.c,v 1.23 2006/03/06 21:11:56 christos 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.22 2005/08/09 13:58:44 christos Exp $");
+__RCSID("$NetBSD: map.c,v 1.23 2006/03/06 21:11:56 christos Exp $");
 #endif
 #endif /* not lint && not SCCSID */
 
@@ -1128,7 +1128,7 @@ map_print_key(EditLine *el, el_action_t 
 	el_bindings_t *bp, *ep;
 
 	if (in[0] == '\0' || in[1] == '\0') {
-		(void) key__decode_str(in, outbuf, "");
+		(void) key__decode_str(in, outbuf, sizeof(outbuf), "");
 		ep = &el->el_map.help[el->el_map.nfunc];
 		for (bp = el->el_map.help; bp < ep; bp++)
 			if (bp->func == map[(unsigned char) *in]) {
@@ -1156,40 +1156,47 @@ map_print_some_keys(EditLine *el, el_act
 	lastbuf[0] = last;
 	lastbuf[1] = 0;
 	if (map[first] == ED_UNASSIGNED) {
-		if (first == last)
+		if (first == last) {
+			(void) key__decode_str(firstbuf, unparsbuf, 
+			    sizeof(unparsbuf), STRQQ);
 			(void) fprintf(el->el_outfile,
-			    "%-15s->  is undefined\n",
-			    key__decode_str(firstbuf, unparsbuf, STRQQ));
+			    "%-15s->  is undefined\n", unparsbuf);
+		}
 		return;
 	}
 	ep = &el->el_map.help[el->el_map.nfunc];
 	for (bp = el->el_map.help; bp < ep; bp++) {
 		if (bp->func == map[first]) {
 			if (first == last) {
+				(void) key__decode_str(firstbuf, unparsbuf, 
+				    sizeof(unparsbuf), STRQQ);
 				(void) fprintf(el->el_outfile, "%-15s->  %s\n",
-				    key__decode_str(firstbuf, unparsbuf, STRQQ),
-				    bp->name);
+				    unparsbuf, bp->name);
 			} else {
+				(void) key__decode_str(firstbuf, unparsbuf, 
+				    sizeof(unparsbuf), STRQQ);
+				(void) key__decode_str(lastbuf, extrabuf, 
+				    sizeof(extrabuf), STRQQ);
 				(void) fprintf(el->el_outfile,
 				    "%-4s to %-7s->  %s\n",
-				    key__decode_str(firstbuf, unparsbuf, STRQQ),
-				    key__decode_str(lastbuf, extrabuf, STRQQ),
-				    bp->name);
+				    unparsbuf, extrabuf, bp->name);
 			}
 			return;
 		}
 	}
 #ifdef MAP_DEBUG
 	if (map == el->el_map.key) {
+		(void) key__decode_str(firstbuf, unparsbuf, 
+		    sizeof(unparsbuf), STRQQ);
 		(void) fprintf(el->el_outfile,
-		    "BUG!!! %s isn't bound to anything.\n",
-		    key__decode_str(firstbuf, unparsbuf, STRQQ));
+		    "BUG!!! %s isn't bound to anything.\n", unparsbuf);
 		(void) fprintf(el->el_outfile, "el->el_map.key[%d] == %d\n",
 		    first, el->el_map.key[first]);
 	} else {
+		(void) key__decode_str(firstbuf, unparsbuf, 
+		    sizeof(unparsbuf), STRQQ);
 		(void) fprintf(el->el_outfile,
-		    "BUG!!! %s isn't bound to anything.\n",
-		    key__decode_str(firstbuf, unparsbuf, STRQQ));
+		    "BUG!!! %s isn't bound to anything.\n", unparsbuf);
 		(void) fprintf(el->el_outfile, "el->el_map.alt[%d] == %d\n",
 		    first, el->el_map.alt[first]);
 	}

Modified: vendor/NetBSD/libedit/dist/readline.c
==============================================================================
--- vendor/NetBSD/libedit/dist/readline.c	Thu Mar 31 18:28:09 2011	(r220215)
+++ vendor/NetBSD/libedit/dist/readline.c	Thu Mar 31 18:28:46 2011	(r220216)
@@ -1,4 +1,4 @@
-/*	$NetBSD: readline.c,v 1.58 2005/07/14 15:00:58 christos Exp $	*/
+/*	$NetBSD: readline.c,v 1.66 2006/03/21 17:52:50 christos Exp $	*/
 
 /*-
  * Copyright (c) 1997 The NetBSD Foundation, Inc.
@@ -38,7 +38,7 @@
 
 #include "config.h"
 #if !defined(lint) && !defined(SCCSID)
-__RCSID("$NetBSD: readline.c,v 1.58 2005/07/14 15:00:58 christos Exp $");
+__RCSID("$NetBSD: readline.c,v 1.66 2006/03/21 17:52:50 christos Exp $");
 #endif /* not lint && not SCCSID */
 
 #include <sys/types.h>
@@ -160,6 +160,7 @@ static Function *map[256];
 static unsigned char	 _el_rl_complete(EditLine *, int);
 static unsigned char	 _el_rl_tstp(EditLine *, int);
 static char		*_get_prompt(EditLine *);
+static int		 _getc_function(EditLine *, char *);
 static HIST_ENTRY	*_move_history(int);
 static int		 _history_expand_command(const char *, size_t, size_t,
     char **);
@@ -198,6 +199,23 @@ _move_history(int op)
 
 
 /*
+ * read one key from user defined input function
+ */
+static int
+/*ARGSUSED*/
+_getc_function(EditLine *el, char *c)
+{
+	int i;
+
+	i = (*rl_getc_function)(NULL, 0);
+	if (i == -1)
+		return 0;
+	*c = i;
+	return 1;
+}
+
+
+/*
  * READLINE compatibility stuff
  */
 
@@ -242,6 +260,10 @@ rl_initialize(void)
 	max_input_history = INT_MAX;
 	el_set(e, EL_HIST, history, h);
 
+	/* setup getc function if valid */
+	if (rl_getc_function)
+		el_set(e, EL_GETCFN, _getc_function);
+
 	/* for proper prompt printing in readline() */
 	rl_prompt = strdup("");
 	if (rl_prompt == NULL) {
@@ -706,6 +728,7 @@ _history_expand_command(const char *comm
 				what = realloc(from, size);
 				if (what == NULL) {
 					free(from);
+					free(tmp);
 					return 0;
 				}
 				len = 0;
@@ -718,6 +741,7 @@ _history_expand_command(const char *comm
 								(size <<= 1));
 						if (nwhat == NULL) {
 							free(what);
+							free(tmp);
 							return 0;
 						}
 						what = nwhat;
@@ -730,10 +754,13 @@ _history_expand_command(const char *comm
 					free(what);
 					if (search) {
 						from = strdup(search);
-						if (from == NULL)
+						if (from == NULL) {
+							free(tmp);
 							return 0;
+						}
 					} else {
 						from = NULL;
+						free(tmp);
 						return (-1);
 					}
 				}
@@ -745,6 +772,7 @@ _history_expand_command(const char *comm
 				with = realloc(to, size);
 				if (with == NULL) {
 					free(to);
+					free(tmp);
 					return -1;
 				}
 				len = 0;
@@ -756,6 +784,7 @@ _history_expand_command(const char *comm
 						nwith = realloc(with, size);
 						if (nwith == NULL) {
 							free(with);
+							free(tmp);
 							return -1;
 						}
 						with = nwith;
@@ -824,12 +853,14 @@ history_expand(char *str, char **output)
 			return 0;
 	}
 
-#define ADD_STRING(what, len)						\
+#define ADD_STRING(what, len, fr)					\
 	{								\
 		if (idx + len + 1 > size) {				\
 			char *nresult = realloc(result, (size += len + 1));\
 			if (nresult == NULL) {				\
 				free(*output);				\
+				if (/*CONSTCOND*/fr)			\
+					free(tmp);			\
 				return 0;				\
 			}						\
 			result = nresult;				\
@@ -841,6 +872,7 @@ history_expand(char *str, char **output)
 
 	result = NULL;
 	size = idx = 0;
+	tmp = NULL;
 	for (i = 0; str[i];) {
 		int qchar, loop_again;
 		size_t len, start, j;
@@ -878,24 +910,29 @@ loop:
 			goto loop;
 		}
 		len = i - start;
-		tmp = &str[start];
-		ADD_STRING(tmp, len);
+		ADD_STRING(&str[start], len, 0);
 
 		if (str[i] == '\0' || str[i] != history_expansion_char) {
 			len = j - i;
-			tmp = &str[i];
-			ADD_STRING(tmp, len);
+			ADD_STRING(&str[i], len, 0);
 			if (start == 0)
 				ret = 0;
 			else
 				ret = 1;
 			break;
 		}
+		if (tmp) {
+			free(tmp);
+			tmp = NULL;
+		}
 		ret = _history_expand_command (str, i, (j - i), &tmp);
 		if (ret > 0 && tmp) {
 			len = strlen(tmp);
-			ADD_STRING(tmp, len);
+			ADD_STRING(tmp, len, 1);
+		}
+		if (tmp) {
 			free(tmp);
+			tmp = NULL;
 		}
 		i = j;
 	}
@@ -1083,7 +1120,7 @@ read_history(const char *filename)
 
 	if (h == NULL || e == NULL)
 		rl_initialize();
-	return (history(h, &ev, H_LOAD, filename));
+	return (history(h, &ev, H_LOAD, filename) == -1);
 }
 
 
@@ -1097,7 +1134,7 @@ write_history(const char *filename)
 
 	if (h == NULL || e == NULL)
 		rl_initialize();
-	return (history(h, &ev, H_SAVE, filename));
+	return (history(h, &ev, H_SAVE, filename) == -1);
 }
 
 
@@ -1614,7 +1651,7 @@ rl_callback_read_char()
 
 	if (buf == NULL || count-- <= 0)
 		return;
-	if (count == 0 && buf[0] == CTRL('d'))
+	if (count == 0 && buf[0] == e->el_tty.t_c[TS_IO][C_EOF])
 		done = 1;
 	if (buf[count] == '\n' || buf[count] == '\r')
 		done = 2;
@@ -1654,7 +1691,7 @@ void
 rl_redisplay(void)
 {
 	char a[2];
-	a[0] = CTRL('r');
+	a[0] = e->el_tty.t_c[TS_IO][C_REPRINT];
 	a[1] = '\0';
 	el_push(e, a);
 }

Modified: vendor/NetBSD/libedit/dist/term.c
==============================================================================
--- vendor/NetBSD/libedit/dist/term.c	Thu Mar 31 18:28:09 2011	(r220215)
+++ vendor/NetBSD/libedit/dist/term.c	Thu Mar 31 18:28:46 2011	(r220216)
@@ -1,4 +1,4 @@
-/*	$NetBSD: term.c,v 1.41 2005/08/08 14:05:37 christos Exp $	*/
+/*	$NetBSD: term.c,v 1.45 2006/03/18 19:23:14 christos Exp $	*/
 
 /*-
  * Copyright (c) 1992, 1993
@@ -37,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)term.c	8.2 (Berkeley) 4/30/95";
 #else
-__RCSID("$NetBSD: term.c,v 1.41 2005/08/08 14:05:37 christos Exp $");
+__RCSID("$NetBSD: term.c,v 1.45 2006/03/18 19:23:14 christos Exp $");
 #endif
 #endif /* not lint && not SCCSID */
 
@@ -398,7 +398,8 @@ term_alloc(EditLine *el, const struct te
          * New string is shorter; no need to allocate space
          */
 	if (clen <= tlen) {
-		(void) strcpy(*str, cap);	/* XXX strcpy is safe */
+		if (*str)
+			(void) strcpy(*str, cap);	/* XXX strcpy is safe */
 		return;
 	}
 	/*
@@ -472,8 +473,12 @@ term_alloc_display(EditLine *el)
 		return (-1);
 	for (i = 0; i < c->v; i++) {
 		b[i] = (char *) el_malloc((size_t) (sizeof(char) * (c->h + 1)));
-		if (b[i] == NULL)
+		if (b[i] == NULL) {
+			while (--i >= 0)
+				el_free((ptr_t) b[i]);
+			el_free((ptr_t) b);
 			return (-1);
+		}
 	}
 	b[c->v] = NULL;
 	el->el_display = b;
@@ -483,8 +488,12 @@ term_alloc_display(EditLine *el)
 		return (-1);
 	for (i = 0; i < c->v; i++) {
 		b[i] = (char *) el_malloc((size_t) (sizeof(char) * (c->h + 1)));
-		if (b[i] == NULL)
+		if (b[i] == NULL) {
+			while (--i >= 0)
+				el_free((ptr_t) b[i]);
+			el_free((ptr_t) b);
 			return (-1);
+		}
 	}
 	b[c->v] = NULL;
 	el->el_vdisplay = b;
@@ -1250,6 +1259,19 @@ term__flush(void)
 	(void) fflush(term_outfile);
 }
 
+/* term_writec():
+ *	Write the given character out, in a human readable form
+ */
+protected void
+term_writec(EditLine *el, int c)
+{
+	char buf[8];
+	int cnt = key__decode_char(buf, sizeof(buf), 0, c);
+	buf[cnt] = '\0';
+	term_overwrite(el, buf, cnt);
+	term__flush();
+}
+
 
 /* term_telltc():
  *	Print the current termcap characteristics
@@ -1277,11 +1299,17 @@ term_telltc(EditLine *el, int argc __att
 		(void) fprintf(el->el_outfile, "\tIt %s magic margins\n",
 		    EL_HAS_MAGIC_MARGINS ? "has" : "does not have");
 
-	for (t = tstr, ts = el->el_term.t_str; t->name != NULL; t++, ts++)
+	for (t = tstr, ts = el->el_term.t_str; t->name != NULL; t++, ts++) {
+		const char *ub;
+		if (*ts && **ts) {
+		    (void) key__decode_str(*ts, upbuf, sizeof(upbuf), "");
+		    ub = upbuf;
+		} else {
+		    ub = "(empty)";
+		}
 		(void) fprintf(el->el_outfile, "\t%25s (%s) == %s\n",
-		    t->long_name,
-		    t->name, *ts && **ts ?
-		    key__decode_str(*ts, upbuf, "") : "(empty)");
+		    t->long_name, t->name, ub);
+	}
 	(void) fputc('\n', el->el_outfile);
 	return (0);
 }

Modified: vendor/NetBSD/libedit/dist/term.h
==============================================================================
--- vendor/NetBSD/libedit/dist/term.h	Thu Mar 31 18:28:09 2011	(r220215)
+++ vendor/NetBSD/libedit/dist/term.h	Thu Mar 31 18:28:46 2011	(r220216)
@@ -1,4 +1,4 @@
-/*	$NetBSD: term.h,v 1.16 2005/03/15 00:10:40 christos Exp $	*/
+/*	$NetBSD: term.h,v 1.17 2006/03/06 21:11:56 christos Exp $	*/
 
 /*-
  * Copyright (c) 1992, 1993
@@ -102,6 +102,7 @@ protected int	term_set(EditLine *, const
 protected int	term_settc(EditLine *, int, const char **);
 protected int	term_telltc(EditLine *, int, const char **);
 protected int	term_echotc(EditLine *, int, const char **);
+protected void	term_writec(EditLine *, int);
 protected int	term__putc(int);
 protected void	term__flush(void);
 

Modified: vendor/NetBSD/libedit/dist/tty.c
==============================================================================
--- vendor/NetBSD/libedit/dist/tty.c	Thu Mar 31 18:28:09 2011	(r220215)
+++ vendor/NetBSD/libedit/dist/tty.c	Thu Mar 31 18:28:46 2011	(r220216)
@@ -1,4 +1,4 @@
-/*	$NetBSD: tty.c,v 1.23 2005/06/01 11:37:52 lukem Exp $	*/
+/*	$NetBSD: tty.c,v 1.25 2006/03/18 09:09:41 christos 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.23 2005/06/01 11:37:52 lukem Exp $");
+__RCSID("$NetBSD: tty.c,v 1.25 2006/03/18 09:09:41 christos Exp $");
 #endif
 #endif /* not lint && not SCCSID */
 
@@ -529,8 +529,11 @@ tty_setup(EditLine *el)
 #endif /* DEBUG_TTY */
 			return (-1);
 		}
-	} else
+	}
+#ifdef notdef
+	else
 		tty__setchar(&el->el_tty.t_ex, el->el_tty.t_c[EX_IO]);
+#endif
 
 	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;
@@ -1200,10 +1203,14 @@ tty_stty(EditLine *el, int argc __attrib
 				st = len =
 				    strlen(el->el_tty.t_t[z][m->m_type].t_name);
 			}
-			x = (el->el_tty.t_t[z][i].t_setmask & m->m_value)
-			    ?  '+' : '\0';
-			x = (el->el_tty.t_t[z][i].t_clrmask & m->m_value)
-			    ? '-' : x;
+			if (i != -1) {
+			    x = (el->el_tty.t_t[z][i].t_setmask & m->m_value)
+				?  '+' : '\0';
+			    x = (el->el_tty.t_t[z][i].t_clrmask & m->m_value)
+				? '-' : x;
+			} else {
+			    x = '\0';
+			}
 
 			if (x != '\0' || aflag) {
 

Modified: vendor/NetBSD/libedit/dist/vi.c
==============================================================================
--- vendor/NetBSD/libedit/dist/vi.c	Thu Mar 31 18:28:09 2011	(r220215)
+++ vendor/NetBSD/libedit/dist/vi.c	Thu Mar 31 18:28:46 2011	(r220216)
@@ -1,4 +1,4 @@
-/*	$NetBSD: vi.c,v 1.24 2005/08/10 12:46:24 christos Exp $	*/
+/*	$NetBSD: vi.c,v 1.25 2006/03/06 21:11:56 christos Exp $	*/
 
 /*-
  * Copyright (c) 1992, 1993
@@ -41,7 +41,7 @@
 #if 0
 static char sccsid[] = "@(#)vi.c	8.1 (Berkeley) 6/4/93";
 #else
-__RCSID("$NetBSD: vi.c,v 1.24 2005/08/10 12:46:24 christos Exp $");
+__RCSID("$NetBSD: vi.c,v 1.25 2006/03/06 21:11:56 christos Exp $");
 #endif
 #endif /* not lint && not SCCSID */
 
@@ -600,13 +600,12 @@ vi_delete_prev_char(EditLine *el, int c 
  */
 protected el_action_t
 /*ARGSUSED*/
-vi_list_or_eof(EditLine *el, int c __attribute__((__unused__)))
+vi_list_or_eof(EditLine *el, int c)
 {
 
 	if (el->el_line.cursor == el->el_line.lastchar) {
 		if (el->el_line.cursor == el->el_line.buffer) {
-			term_overwrite(el, STReof, 4);	/* then do a EOF */
-			term__flush();
+			term_writec(el, c);	/* then do a EOF */
 			return (CC_EOF);
 		} else {
 			/*



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201103311828.p2VISk4G014957>