bin/104731: [patch] missing newline in lpq output

Sean Farley sean-freebsd at farley.org
Mon Oct 23 20:10:24 PDT 2006


>Number:         104731
>Category:       bin
>Synopsis:       [patch] missing newline in lpq output
>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:   Tue Oct 24 03:10:20 GMT 2006
>Closed-Date:
>Last-Modified:
>Originator:     Sean Farley
>Release:        FreeBSD 6.2-PRERELEASE i386
>Organization:
>Environment:
System: FreeBSD thor.farley.org 6.2-PRERELEASE FreeBSD 6.2-PRERELEASE #1: Sun Oct 1 12:38:47 CDT 2006 root at thor.farley.org:/usr/obj/usr/src/sys/THOR i386

>Description:
When lpq outputs the status from a remote printer/lpd, it prints exactly
what is given to it.  With an HP 3055 that has no jobs, the output is
"queue empty" without the newline.

>How-To-Repeat:
lpq run against a printer or lpd that does not send a closing newline.

>Fix:
I am providing two patches.  The first simply prints a newline following
a complete output from the printer.  The second checks for a newline and
prints one only if the last character was not a newline.  I prefer the
second patch, but the first is better than nothing.

There is a second spot in the display code, but I am not certain that it
requires the same type of patch.

The patches will also be available at:
http://www.farley.org/freebsd/tmp/PR/<PR #>/lpq-patch1.txt
http://www.farley.org/freebsd/tmp/PR/<PR #>/lpq-patch2.txt

------ First patch ------
diff -ru /usr/src/usr.sbin/lpr/common_source/displayq.c lpr/common_source/displayq.c
--- /usr/src/usr.sbin/lpr/common_source/displayq.c	Thu Dec 30 18:36:28 2004
+++ lpr/common_source/displayq.c	Mon Oct 23 20:44:15 2006
@@ -255,6 +255,7 @@
 			fatal(pp, "Lost connection");
 		while ((i = read(fd, line, sizeof(line))) > 0)
 			(void) fwrite(line, 1, i, stdout);
+		fprintf(stdout, "\n");
 		(void) close(fd);
 	}
 }
------ First patch ------


------ Second patch ------
diff -ru /usr/src/usr.sbin/lpr/common_source/displayq.c lpr/common_source/displayq.c
--- /usr/src/usr.sbin/lpr/common_source/displayq.c	Thu Dec 30 18:36:28 2004
+++ lpr/common_source/displayq.c	Mon Oct 23 20:54:32 2006
@@ -96,6 +96,7 @@
 {
 	register struct jobqueue *q;
 	register int i, nitems, fd, ret;
+	int lastChar;
 	char *cp, *endp;
 	struct jobqueue **queue;
 	struct stat statb;
@@ -253,8 +254,13 @@
 		i = strlen(line);
 		if (write(fd, line, i) != i)
 			fatal(pp, "Lost connection");
-		while ((i = read(fd, line, sizeof(line))) > 0)
+		lastChar = 0;
+		while ((i = read(fd, line, sizeof(line))) > 0) {
 			(void) fwrite(line, 1, i, stdout);
+			lastChar = i - 1;
+		}
+		if (lastChar > 0 && line[lastChar] != '\n')
+			fprintf(stdout, "\n");
 		(void) close(fd);
 	}
 }
------ Second patch ------
>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list