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 00bef95946
Fixes #13458
Closes #13459
This commit is contained in:
parent
03cf1c7b8c
commit
9fc4b2c78c
@ -90,32 +90,3 @@ int tool_seek_cb(void *userdata, curl_off_t offset, int whence)
|
|||||||
|
|
||||||
return CURL_SEEKFUNC_OK;
|
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 */
|
|
||||||
|
|||||||
@ -25,18 +25,6 @@
|
|||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
#include "tool_setup.h"
|
#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
|
** callback for CURLOPT_SEEKFUNCTION
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -74,4 +74,17 @@ extern bool tool_isVistaOrGreater;
|
|||||||
extern bool tool_term_has_bold;
|
extern bool tool_term_has_bold;
|
||||||
#endif
|
#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 */
|
#endif /* HEADER_CURL_TOOL_SETUP_H */
|
||||||
|
|||||||
@ -159,3 +159,32 @@ int struplocompare4sort(const void *p1, const void *p2)
|
|||||||
{
|
{
|
||||||
return struplocompare(* (char * const *) p1, * (char * const *) 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 */
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user