From owner-svn-src-stable-9@FreeBSD.ORG Wed Jul 10 21:05:03 2013 Return-Path: Delivered-To: svn-src-stable-9@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id E876FF0; Wed, 10 Jul 2013 21:05:03 +0000 (UTC) (envelope-from pfg@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id C04E71BDB; Wed, 10 Jul 2013 21:05:03 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r6AL53IV084691; Wed, 10 Jul 2013 21:05:03 GMT (envelope-from pfg@svn.freebsd.org) Received: (from pfg@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r6AL535O084689; Wed, 10 Jul 2013 21:05:03 GMT (envelope-from pfg@svn.freebsd.org) Message-Id: <201307102105.r6AL535O084689@svn.freebsd.org> From: "Pedro F. Giffuni" Date: Wed, 10 Jul 2013 21:05:03 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r253171 - stable/9/usr.bin/sed X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable-9@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for only the 9-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Jul 2013 21:05:04 -0000 Author: pfg Date: Wed Jul 10 21:05:03 2013 New Revision: 253171 URL: http://svnweb.freebsd.org/changeset/base/253171 Log: MFC r252231: sed: use getline() instead of fgetln(). In BSD, fgetln() available in libc but in Illumos the Solaris port had to include it internally. It also seems to have caused problems [1]. Aid portability by using getline() instead. Modified: stable/9/usr.bin/sed/main.c Directory Properties: stable/9/usr.bin/sed/ (props changed) Modified: stable/9/usr.bin/sed/main.c ============================================================================== --- stable/9/usr.bin/sed/main.c Wed Jul 10 20:56:04 2013 (r253170) +++ stable/9/usr.bin/sed/main.c Wed Jul 10 21:05:03 2013 (r253171) @@ -1,4 +1,5 @@ /*- + * Copyright (c) 2013 Johann 'Myrkraverk' Oskarsson. * Copyright (c) 1992 Diomidis Spinellis. * Copyright (c) 1992, 1993 * The Regents of the University of California. All rights reserved. @@ -57,6 +58,7 @@ static const char sccsid[] = "@(#)main.c #include #include #include +#define _WITH_GETLINE #include #include #include @@ -307,8 +309,9 @@ int mf_fgets(SPACE *sp, enum e_spflag spflag) { struct stat sb; - size_t len; - char *p; + ssize_t len; + static char *p = NULL; + static size_t plen = 0; int c; static int firstfile; @@ -424,13 +427,13 @@ mf_fgets(SPACE *sp, enum e_spflag spflag * We are here only when infile is open and we still have something * to read from it. * - * Use fgetln so that we can handle essentially infinite input data. - * Can't use the pointer into the stdio buffer as the process space - * because the ungetc() can cause it to move. + * Use getline() so that we can handle essentially infinite input + * data. The p and plen are static so each invocation gives + * getline() the same buffer which is expanded as needed. */ - p = fgetln(infile, &len); - if (ferror(infile)) - errx(1, "%s: %s", fname, strerror(errno ? errno : EIO)); + len = getline(&p, &plen, infile); + if (len == -1) + err(1, "%s", fname); if (len != 0 && p[len - 1] == '\n') len--; cspace(sp, p, len, spflag);