Mercurial > hg > octave-lyh > gnulib-hg
changeset 182:83507c652f09
merge with 3.9c
author | Jim Meyering <jim@meyering.net> |
---|---|
date | Wed, 26 Jan 1994 18:46:52 +0000 |
parents | 983c0e170fc4 |
children | 054e3245c4fe |
files | lib/Makefile.in lib/safe-read.c |
diffstat | 2 files changed, 54 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- a/lib/Makefile.in +++ b/lib/Makefile.in @@ -90,7 +90,7 @@ # 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
--- 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 <config.h> 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 <config.h> +#else +#include "config.h" +#endif +#endif + +#include <sys/types.h> + +#ifdef HAVE_UNISTD_H +#include <unistd.h> +#endif + +#include <errno.h> +#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 @@ char *ptr; int len; { - int n_remaining; + int n_chars; - n_remaining = len; - while (n_remaining > 0) - { - int n_chars = read (desc, ptr, n_remaining); - if (n_chars < 0) - { + if (len <= 0) + return len; + #ifdef EINTR - if (errno == EINTR) - continue; + do + { + n_chars = read (desc, ptr, len); + } + while (n_chars < 0 && errno == EINTR); +#else + n_chars = read (desc, ptr, len); #endif - return n_chars; - } - if (n_chars == 0) - break; - ptr += n_chars; - n_remaining -= n_chars; - } - return len - n_remaining; + + return n_chars; }