From: Jim Meyering Date: Wed, 26 Jan 1994 18:46:52 +0000 (+0000) Subject: merge with 3.9c X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1934bbbae2095a684c35adeee169867abe734277;p=pspp merge with 3.9c --- diff --git a/lib/Makefile.in b/lib/Makefile.in index c9cc7968d7..c08ed462b3 100644 --- a/lib/Makefile.in +++ b/lib/Makefile.in @@ -90,7 +90,7 @@ libfu.a: $(OBJECTS) # Since this directory contains two parsers, we have to be careful to avoid # running two $(YACC)s during parallel makes. See below. getdate.c: getdate.y - @echo expect 9 shift/reduce conflicts + @echo expect 10 shift/reduce conflicts $(YACC) $(srcdir)/getdate.y mv y.tab.c getdate.c diff --git a/lib/safe-read.c b/lib/safe-read.c index d915d4e7cc..2303ea111a 100644 --- a/lib/safe-read.c +++ b/lib/safe-read.c @@ -1,4 +1,43 @@ -/* Read LEN bytes at PTR from descriptor DESC, retrying if necessary. +/* safe-read.c -- an interface to read that retries after interrupts + Copyright (C) 1993, 1994 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +#ifdef HAVE_CONFIG_H +#if defined (CONFIG_BROKETS) +/* We use instead of "config.h" so that a compilation + using -I. -I$srcdir will use ./config.h rather than $srcdir/config.h + (which it would do because it found this file in $srcdir). */ +#include +#else +#include "config.h" +#endif +#endif + +#include + +#ifdef HAVE_UNISTD_H +#include +#endif + +#include +#ifndef STDC_HEADERS +extern int errno; +#endif + +/* Read LEN bytes at PTR from descriptor DESC, retrying if interrupted. Return the actual number of bytes read, zero for EOF, or negative for an error. */ @@ -8,24 +47,20 @@ safe_read (desc, ptr, len) char *ptr; int len; { - int n_remaining; + int n_chars; + + if (len <= 0) + return len; - n_remaining = len; - while (n_remaining > 0) - { - int n_chars = read (desc, ptr, n_remaining); - if (n_chars < 0) - { #ifdef EINTR - if (errno == EINTR) - continue; -#endif - return n_chars; - } - if (n_chars == 0) - break; - ptr += n_chars; - n_remaining -= n_chars; + do + { + n_chars = read (desc, ptr, len); } - return len - n_remaining; + while (n_chars < 0 && errno == EINTR); +#else + n_chars = read (desc, ptr, len); +#endif + + return n_chars; }