From 3e2487493ef28ea9e44931faffb04e89ed3aae8d Mon Sep 17 00:00:00 2001 From: Yang Tse Date: Tue, 26 Aug 2008 01:40:19 +0000 Subject: [PATCH] Use SIZEOF_OFF_T definition from config file --- lib/progress.c | 2 +- lib/setup.h | 26 ++++++++++++++++++++++++++ lib/version.c | 12 ++---------- src/main.c | 41 ++++++++++++++++++++++++++++++----------- 4 files changed, 59 insertions(+), 22 deletions(-) diff --git a/lib/progress.c b/lib/progress.c index 939e7dbcf..1c997e04d 100644 --- a/lib/progress.c +++ b/lib/progress.c @@ -78,7 +78,7 @@ static char *max5data(curl_off_t bytes, char *max5) bytes/ONE_MEGABYTE, (bytes%ONE_MEGABYTE) / (ONE_MEGABYTE/CURL_OFF_T_C(10)) ); -#if CURL_SIZEOF_CURL_OFF_T > 4 +#if (CURL_SIZEOF_CURL_OFF_T > 4) else if(bytes < CURL_OFF_T_C(10000) * ONE_MEGABYTE) /* 'XXXXM' is good until we're at 10000MB or above */ diff --git a/lib/setup.h b/lib/setup.h index 42d6d01af..4268b9bf6 100644 --- a/lib/setup.h +++ b/lib/setup.h @@ -302,6 +302,32 @@ # define struct_stat struct stat #endif +/* + * Default sizeof(off_t) in case it hasn't been defined in config file. + */ + +#ifndef SIZEOF_OFF_T +# if defined(__VMS) && (defined(__alpha) || defined(__ia64)) +# if defined(_LARGEFILE) +# define SIZEOF_OFF_T 8 +# endif +# elif defined(__OS400__) && defined(__ILEC400__) +# if defined(_LARGE_FILES) +# define SIZEOF_OFF_T 8 +# endif +# elif defined(__MVS__) && defined(__IBMC__) +# if defined(_LP64) || defined(_LARGE_FILES) +# define SIZEOF_OFF_T 8 +# endif +# elif defined(__370__) && defined(__IBMC__) +# if defined(_LP64) || defined(_LARGE_FILES) +# define SIZEOF_OFF_T 8 +# endif +# else +# define SIZEOF_OFF_T 4 +# endif +#endif + /* Below we define some functions. They should 1. close a socket diff --git a/lib/version.c b/lib/version.c index 5b9ccca3d..2e8f1b410 100644 --- a/lib/version.c +++ b/lib/version.c @@ -190,16 +190,8 @@ static curl_version_info_data version_info = { #ifdef HAVE_SPNEGO | CURL_VERSION_SPNEGO #endif -/* - * FIXME before 7.19.0 release. - * - * libcurl is largefile enabled when (CURL_SIZEOF_CURL_OFF_T > 4) _AND_ - * libcurl has been built with sizeof(system off_t) > 4 or when large - * file support is available even with sizeof(system off_t) <= 4. - * - * Until this is adjusted, only the (CURL_SIZEOF_CURL_OFF_T > 4) check is done. - */ -#if (CURL_SIZEOF_CURL_OFF_T > 4) +#if (CURL_SIZEOF_CURL_OFF_T > 4) && \ + ( (SIZEOF_OFF_T > 4) || defined(USE_WIN32_LARGE_FILES) ) | CURL_VERSION_LARGEFILE #endif #if defined(CURL_DOES_CONVERSIONS) diff --git a/src/main.c b/src/main.c index 72a53163e..62c34cbdf 100644 --- a/src/main.c +++ b/src/main.c @@ -242,6 +242,32 @@ typedef enum { # define struct_stat struct stat #endif +/* + * Default sizeof(off_t) in case it hasn't been defined in config file. + */ + +#ifndef SIZEOF_OFF_T +# if defined(__VMS) && (defined(__alpha) || defined(__ia64)) +# if defined(_LARGEFILE) +# define SIZEOF_OFF_T 8 +# endif +# elif defined(__OS400__) && defined(__ILEC400__) +# if defined(_LARGE_FILES) +# define SIZEOF_OFF_T 8 +# endif +# elif defined(__MVS__) && defined(__IBMC__) +# if defined(_LP64) || defined(_LARGE_FILES) +# define SIZEOF_OFF_T 8 +# endif +# elif defined(__370__) && defined(__IBMC__) +# if defined(_LP64) || defined(_LARGE_FILES) +# define SIZEOF_OFF_T 8 +# endif +# else +# define SIZEOF_OFF_T 4 +# endif +#endif + #ifdef CURL_DOES_CONVERSIONS #ifdef HAVE_ICONV iconv_t inbound_cd = (iconv_t)-1; @@ -3205,12 +3231,6 @@ struct InStruct { #define MAX_SEEK 2147483647 -#ifndef SIZEOF_OFF_T -/* (Jan 11th 2008) this is a reasonably new define in the config.h so there - might be older handicrafted configs that don't define it properly and then - we assume 32bit off_t */ -#define SIZEOF_OFF_T 4 -#endif /* * my_seek() is the CURLOPT_SEEKFUNCTION we use */ @@ -3218,11 +3238,10 @@ static int my_seek(void *stream, curl_off_t offset, int whence) { struct InStruct *in=(struct InStruct *)stream; -#if (CURL_SIZEOF_CURL_OFF_T > SIZEOF_OFF_T) && !defined(lseek) - /* The sizeof check following here is only interesting if curl_off_t is - larger than off_t, but also not on windows-like systems for which lseek - is a defined macro that works around the 32bit off_t-problem and thus do - 64bit seeks correctly anyway */ +#if (CURL_SIZEOF_CURL_OFF_T > SIZEOF_OFF_T) && !defined(USE_WIN32_LARGE_FILES) + /* The offset check following here is only interesting if curl_off_t is + larger than off_t and we are not using the WIN32 large file support + macros that provide the support to do 64bit seeks correctly */ if(offset > MAX_SEEK) { /* Some precaution code to work around problems with different data sizes