From 56eccaadb4a897b24938f8a69ba3b1612255a81e Mon Sep 17 00:00:00 2001 From: Pavel Tsekov Date: Thu, 11 Oct 2007 12:32:42 +0000 Subject: [PATCH] * configure.ac: Determine the size of `long', `long long' and off_t. * vfs/fish.c (fish_linear_start): Use strtol() or strtoll() to retrieve the size of the file being retrieved. --- ChangeLog | 5 +++++ configure.ac | 5 ++++- vfs/ChangeLog | 5 +++++ vfs/fish.c | 8 +++++--- 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 452ebd348..fbaf01a30 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2007-10-11 Pavel Tsekov + + * configure.ac: Determine the size of `long', `long long' and + off_t. + 2007-09-26 Pavel Tsekov * NEWS: Revert last change - it is invalid. diff --git a/configure.ac b/configure.ac index cfd1273f4..cfaaa7d85 100644 --- a/configure.ac +++ b/configure.ac @@ -222,8 +222,11 @@ dnl dnl Missing typedefs and replacements dnl +AC_CHECK_SIZEOF(long) +AC_CHECK_SIZEOF(long long) AC_TYPE_MODE_T -AC_CHECK_TYPE(off_t, long) +AC_TYPE_OFF_T +AC_CHECK_SIZEOF(off_t) AC_TYPE_PID_T AC_TYPE_UID_T AC_CHECK_TYPE(nlink_t, unsigned int) diff --git a/vfs/ChangeLog b/vfs/ChangeLog index e0e1d042c..84b1a4e04 100644 --- a/vfs/ChangeLog +++ b/vfs/ChangeLog @@ -1,3 +1,8 @@ +2007-10-11 Pavel Tsekov + + * fish.c (fish_linear_start): Use strtol() or strtoll() to retrieve + the size of the file being retrieved. + 2007-09-24 Andrew Borodin * direntry.c (vfs_s_free_super): Remove redundant code. diff --git a/vfs/fish.c b/vfs/fish.c index 60a3f9d32..d1b86e096 100644 --- a/vfs/fish.c +++ b/vfs/fish.c @@ -633,11 +633,13 @@ fish_linear_start (struct vfs_class *me, struct vfs_s_fh *fh, off_t offset) if (offset != PRELIM) ERRNOR (E_REMOTE, 0); fh->linear = LS_LINEAR_OPEN; fh->u.fish.got = 0; -#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64 || (defined _LARGE_FILES && _LARGE_FILES) - if (sscanf( reply_str, "%llu", &fh->u.fish.total )!=1) + errno = 0; +#if SIZEOF_OFF_T == SIZEOF_LONG + fh->u.fish.total = strtol (reply_str, NULL, 10); #else - if (sscanf( reply_str, "%u", &fh->u.fish.total )!=1) + fh->u.fish.total = strtoll (reply_str, NULL, 10); #endif + if (errno != 0) ERRNOR (E_REMOTE, 0); return 1; }