From owner-freebsd-bugs@FreeBSD.ORG Sun Aug 2 21:40:04 2009 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7A256106566C for ; Sun, 2 Aug 2009 21:40:04 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id 552558FC08 for ; Sun, 2 Aug 2009 21:40:04 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.14.3/8.14.3) with ESMTP id n72Le43r088953 for ; Sun, 2 Aug 2009 21:40:04 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.3/8.14.3/Submit) id n72Le43q088952; Sun, 2 Aug 2009 21:40:04 GMT (envelope-from gnats) Resent-Date: Sun, 2 Aug 2009 21:40:04 GMT Resent-Message-Id: <200908022140.n72Le43q088952@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Jan Schaumann Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 0E05A106564A for ; Sun, 2 Aug 2009 21:31:57 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (www.freebsd.org [IPv6:2001:4f8:fff6::21]) by mx1.freebsd.org (Postfix) with ESMTP id F02728FC0C for ; Sun, 2 Aug 2009 21:31:56 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (localhost [127.0.0.1]) by www.freebsd.org (8.14.3/8.14.3) with ESMTP id n72LVub5024658 for ; Sun, 2 Aug 2009 21:31:56 GMT (envelope-from nobody@www.freebsd.org) Received: (from nobody@localhost) by www.freebsd.org (8.14.3/8.14.3/Submit) id n72LVunR024657; Sun, 2 Aug 2009 21:31:56 GMT (envelope-from nobody) Message-Id: <200908022131.n72LVunR024657@www.freebsd.org> Date: Sun, 2 Aug 2009 21:31:56 GMT From: Jan Schaumann To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-3.1 Cc: Subject: misc/137365: let last(1) read from stdin via "-f -" X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 02 Aug 2009 21:40:04 -0000 >Number: 137365 >Category: misc >Synopsis: let last(1) read from stdin via "-f -" >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Sun Aug 02 21:40:03 UTC 2009 >Closed-Date: >Last-Modified: >Originator: Jan Schaumann >Release: >Organization: >Environment: >Description: last -f lets you read from a specified file. However, there's no way to read from a pipe. NetBSD's last(1) let's you use "-f -" to specify reading from stdin -- port this to FreeBSD. >How-To-Repeat: cat /var/tmp/wtmp | last -f - >Fix: Index: last.c =================================================================== RCS file: /home/ncvs/src/usr.bin/last/last.c,v retrieving revision 1.34 diff -b -u -r1.34 last.c --- last.c 8 Aug 2004 18:59:19 -0000 1.34 +++ last.c 2 Aug 2009 21:24:51 -0000 @@ -216,7 +216,10 @@ LIST_INIT(&ttylist); - if ((wfd = open(file, O_RDONLY, 0)) < 0 || fstat(wfd, &stb) == -1) + if (!strcmp(file, "-")) { + wfd = STDIN_FILENO; + file = ""; + } else if ((wfd = open(file, O_RDONLY, 0)) < 0 || fstat(wfd, &stb) == -1) err(1, "%s", file); bl = (stb.st_size + sizeof(buf) - 1) / sizeof(buf); @@ -226,9 +229,11 @@ (void)signal(SIGQUIT, onintr); while (--bl >= 0) { - if (lseek(wfd, (off_t)(bl * sizeof(buf)), L_SET) == -1 || - (bytes = read(wfd, buf, sizeof(buf))) == -1) + if (((lseek(wfd, (off_t)(bl * sizeof(buf)), L_SET) == -1) && + (ESPIPE != errno)) || + ((bytes = read(wfd, buf, sizeof(buf))) == -1)) { err(1, "%s", file); + } for (bp = &buf[bytes / sizeof(buf[0]) - 1]; bp >= buf; --bp) doentry(bp); } >Release-Note: >Audit-Trail: >Unformatted: