From: Jim Meyering Date: Sat, 8 Nov 1997 21:02:01 +0000 (+0000) Subject: (fseeko): Define a stub if ! HAVE_FSEEKO. X-Git-Tag: TEXTUTILS-1_22c~108 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=979f238fb3fbf27417277b2a9d9014b3778e9e2f;p=thirdparty%2Fcoreutils.git (fseeko): Define a stub if ! HAVE_FSEEKO. (skip): Use fseeko if available. Don't use lseek; it causes the stdio stream to become out of sync with respect to the underyling file descriptor. From Paul Eggert. --- diff --git a/src/od.c b/src/od.c index 9170107fbd..72e33ca4d7 100644 --- a/src/od.c +++ b/src/od.c @@ -109,6 +109,11 @@ typedef double LONG_DOUBLE; # define LDBL_DIG DBL_DIG #endif +#if !HAVE_FSEEKO +# undef fseeko +# define fseeko(Stream, Offset, Whence) (-1) +#endif + enum size_spec { NO_SIZE, @@ -1039,13 +1044,10 @@ skip (off_t n_skip) } else { - /* fseek may work on some streams for which lseek doesn't. - But fseek's offset argument is restricted to the range - of type `long'. So if N_SKIP is too large or if fseek - fails, try lseek. */ - if ((n_skip <= LONG_MAX - && fseek (in_stream, (long) n_skip, SEEK_SET) == 0) - || lseek (fileno (in_stream), n_skip, SEEK_SET) >= 0) + /* Try fseeko if available, fseek otherwise. */ + if (fseeko (in_stream, n_skip, SEEK_SET) == 0 + || (n_skip <= LONG_MAX + && fseek (in_stream, (long) n_skip, SEEK_SET) == 0)) { n_skip = 0; break;