Module Name: src Committed By: christos Date: Fri Feb 18 20:53:05 UTC 2011
Modified Files: src/lib/libedit: read.c Log Message: PR/44599: Steven Vernon: libedit acts as if no data read if editmode is turned off because nread is uninitialized in the edit disabled case. >Confidential: no >Severity: serious >Priority: medium >Responsible: lib-bug-people >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Fri Feb 18 19:35:00 +0000 2011 >Release: sources as of 2011/02/04 >Organization: To generate a diff of this commit: cvs rdiff -u -r1.57 -r1.58 src/lib/libedit/read.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/read.c diff -u src/lib/libedit/read.c:1.57 src/lib/libedit/read.c:1.58 --- src/lib/libedit/read.c:1.57 Wed Jul 21 14:18:52 2010 +++ src/lib/libedit/read.c Fri Feb 18 15:53:05 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: read.c,v 1.57 2010/07/21 18:18:52 christos Exp $ */ +/* $NetBSD: read.c,v 1.58 2011/02/18 20:53:05 christos 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.57 2010/07/21 18:18:52 christos Exp $"); +__RCSID("$NetBSD: read.c,v 1.58 2011/02/18 20:53:05 christos Exp $"); #endif #endif /* not lint && not SCCSID */ @@ -469,7 +469,7 @@ int retval; el_action_t cmdnum = 0; int num; /* how many chars we have read at NL */ - Char ch; + Char ch, *cp; int crlf = 0; int nrb; #ifdef FIONREAD @@ -481,9 +481,9 @@ *nread = 0; if (el->el_flags & NO_TTY) { - Char *cp = el->el_line.buffer; size_t idx; + cp = el->el_line.buffer; while ((num = (*el->el_read.read_char)(el, cp)) == 1) { /* make sure there is space for next character */ if (cp + 1 >= el->el_line.limit) { @@ -504,10 +504,7 @@ el->el_errno = errno; } - el->el_line.cursor = el->el_line.lastchar = cp; - *cp = '\0'; - *nread = (int)(el->el_line.cursor - el->el_line.buffer); - goto done; + goto noedit; } @@ -530,7 +527,6 @@ read_prepare(el); if (el->el_flags & EDIT_DISABLED) { - Char *cp; size_t idx; if ((el->el_flags & UNBUFFERED) == 0) @@ -562,9 +558,7 @@ el->el_errno = errno; } - el->el_line.cursor = el->el_line.lastchar = cp; - *cp = '\0'; - goto done; + goto noedit; } for (num = OKCMD; num == OKCMD;) { /* while still editing this @@ -707,6 +701,11 @@ } else { *nread = (int)(el->el_line.lastchar - el->el_line.buffer); } + goto done; +noedit: + el->el_line.cursor = el->el_line.lastchar = cp; + *cp = '\0'; + *nread = (int)(el->el_line.cursor - el->el_line.buffer); done: if (*nread == 0) { if (num == -1) {