Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 26 Jun 2000 15:58:42 -0400 (EDT)
From:      adrian@ubergeeks.com
To:        FreeBSD-gnats-submit@freebsd.org
Subject:   bin/19532: cdcontrol does not handle EOF on stdin properly (patch included)
Message-ID:  <200006261958.PAA00788@cluebie.esolstice.int>

next in thread | raw e-mail | index | archive | help

>Number:         19532
>Category:       bin
>Synopsis:       cdcontrol does not handle EOF on stdin properly
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Mon Jun 26 13:00:01 PDT 2000
>Closed-Date:
>Last-Modified:
>Originator:     Adrian Filipi-Martin
>Release:        FreeBSD 4.0-STABLE i386
>Organization:
Ubergeeks Consulting
>Environment:

	4-stable-062600

>Description:

	cdcontrol reprompts the user when EOF is seen on stdin and 
	does not exit.

>How-To-Repeat:

	Run cdcontrol and press your tty EOF character, usually ^D, a
	few times.  You will see something like the following:

	# cdcontrol
	Compact Disc Control utility, version 2.0
	Type `?' for command list

	cdcontrol> cdcontrol> cdcontrol> 

>Fix:

	Apply the following patch.  The semantics of the value returned
	by the input() function are not defined since the return value is
	not used.  I changed it to return values that are equivalent to
	the user typing the "quit" command when EOF is seen.  EOF is
	assummed when either fgets() or el_gets() fail.

--- cdcontrol.c.orig	Mon Jun 26 15:18:55 2000
+++ cdcontrol.c	Mon Jun 26 15:48:59 2000
@@ -956,8 +956,11 @@
 				el_set(el, EL_SIGNAL, 1);
 				el_source(el, NULL);
 			}
-			if ((bp = el_gets(el, &num)) == NULL || num == 0)
-				return (0);
+			if ((bp = el_gets(el, &num)) == NULL || num == 0) {
+				*cmd = CMD_QUIT;
+				fprintf (stderr, "\r\n");
+				return ("");
+			}
 
 			len = (num > MAXLINE) ? MAXLINE : num;
 			memcpy(buf, bp, len);
@@ -969,7 +972,7 @@
 			if (! fgets (buf, sizeof (buf), stdin)) {
 				*cmd = CMD_QUIT;
 				fprintf (stderr, "\r\n");
-				return (0);
+				return ("");
 			}
 		}
 		p = parse (buf, cmd);

>Release-Note:
>Audit-Trail:
>Unformatted:


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




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