From: Daniel Stenberg Date: Wed, 24 Apr 2024 08:35:45 +0000 (+0200) Subject: tool: move tool_ftruncate64 to tool_util.c X-Git-Tag: curl-8_8_0~157 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9fc4b2c78c5a2619e1423e56a98b503d363c085f;p=thirdparty%2Fcurl.git tool: move tool_ftruncate64 to tool_util.c ... and the prototype to tool_setup.h, to make them both available more widely and accurately. Follow-up to 00bef95946d3511 Fixes #13458 Closes #13459 --- diff --git a/src/tool_cb_see.c b/src/tool_cb_see.c index bce57bb281..643a38cd9a 100644 --- a/src/tool_cb_see.c +++ b/src/tool_cb_see.c @@ -90,32 +90,3 @@ int tool_seek_cb(void *userdata, curl_off_t offset, int whence) return CURL_SEEKFUNC_OK; } - -#ifdef USE_TOOL_FTRUNCATE - -#ifdef _WIN32_WCE -/* 64-bit lseek-like function unavailable */ -# undef _lseeki64 -# define _lseeki64(hnd,ofs,whence) lseek(hnd,ofs,whence) -# undef _get_osfhandle -# define _get_osfhandle(fd) (fd) -#endif - -/* - * Truncate a file handle at a 64-bit position 'where'. - */ - -int tool_ftruncate64(int fd, curl_off_t where) -{ - intptr_t handle = _get_osfhandle(fd); - - if(_lseeki64(fd, where, SEEK_SET) < 0) - return -1; - - if(!SetEndOfFile((HANDLE)handle)) - return -1; - - return 0; -} - -#endif /* USE_TOOL_FTRUNCATE */ diff --git a/src/tool_cb_see.h b/src/tool_cb_see.h index b5d7bf985e..e7b30a765d 100644 --- a/src/tool_cb_see.h +++ b/src/tool_cb_see.h @@ -25,18 +25,6 @@ ***************************************************************************/ #include "tool_setup.h" -#if defined(_WIN32) && !defined(HAVE_FTRUNCATE) - -int tool_ftruncate64(int fd, curl_off_t where); - -#undef ftruncate -#define ftruncate(fd,where) tool_ftruncate64(fd,where) - -#define HAVE_FTRUNCATE 1 -#define USE_TOOL_FTRUNCATE 1 - -#endif /* _WIN32 && ! HAVE_FTRUNCATE */ - /* ** callback for CURLOPT_SEEKFUNCTION */ diff --git a/src/tool_setup.h b/src/tool_setup.h index c69859ea64..07cba7da2e 100644 --- a/src/tool_setup.h +++ b/src/tool_setup.h @@ -74,4 +74,17 @@ extern bool tool_isVistaOrGreater; extern bool tool_term_has_bold; #endif +#if defined(_WIN32) && !defined(HAVE_FTRUNCATE) + +int tool_ftruncate64(int fd, curl_off_t where); + +#undef ftruncate +#define ftruncate(fd,where) tool_ftruncate64(fd,where) + +#define HAVE_FTRUNCATE 1 +#define USE_TOOL_FTRUNCATE 1 + +#endif /* _WIN32 && ! HAVE_FTRUNCATE */ + + #endif /* HEADER_CURL_TOOL_SETUP_H */ diff --git a/src/tool_util.c b/src/tool_util.c index 812a689d03..b5a6b40d12 100644 --- a/src/tool_util.c +++ b/src/tool_util.c @@ -159,3 +159,32 @@ int struplocompare4sort(const void *p1, const void *p2) { return struplocompare(* (char * const *) p1, * (char * const *) p2); } + +#ifdef USE_TOOL_FTRUNCATE + +#ifdef _WIN32_WCE +/* 64-bit lseek-like function unavailable */ +# undef _lseeki64 +# define _lseeki64(hnd,ofs,whence) lseek(hnd,ofs,whence) +# undef _get_osfhandle +# define _get_osfhandle(fd) (fd) +#endif + +/* + * Truncate a file handle at a 64-bit position 'where'. + */ + +int tool_ftruncate64(int fd, curl_off_t where) +{ + intptr_t handle = _get_osfhandle(fd); + + if(_lseeki64(fd, where, SEEK_SET) < 0) + return -1; + + if(!SetEndOfFile((HANDLE)handle)) + return -1; + + return 0; +} + +#endif /* USE_TOOL_FTRUNCATE */