build: tidy up curl-specific fstat calls and stat struct type
No binary (build failed)
—
(log yok)
| @@ -11,6 +11,7 @@ allowfunc fdopen | |
| allowfunc fopen | |
| allowfunc fprintf | |
| allowfunc free | |
| + | allowfunc fstat |
| allowfunc gmtime | |
| allowfunc localtime | |
| allowfunc malloc | |
| @@ -332,6 +332,7 @@ makes us write better code. | |
| This is the full list of functions generally banned. | |
| _access | |
| + | _fstati64 |
| _lseeki64 | |
| _mbscat | |
| _mbsncat | |
| @@ -365,6 +366,7 @@ This is the full list of functions generally banned. | |
| free | |
| freeaddrinfo | |
| freopen | |
| + | fstat |
| getaddrinfo | |
| gets | |
| gmtime | |
| @@ -89,7 +89,7 @@ CURLcode Curl_fopen(struct Curl_easy *data, const char *filename, | |
| unsigned char randbuf[41]; | |
| char *tempstore = NULL; | |
| #ifndef _WIN32 | |
| - | struct_stat sb; |
| + | curl_struct_stat sb; |
| #endif | |
| int fd = -1; | |
| char *dir = NULL; | |
| @@ -99,7 +99,7 @@ CURLcode Curl_fopen(struct Curl_easy *data, const char *filename, | |
| *fh = curlx_fopen(filename, FOPEN_WRITETEXT); | |
| if(!*fh) | |
| goto fail; | |
| - | if(fstat(fileno(*fh), &sb) == -1 || !S_ISREG(sb.st_mode)) { |
| + | if(curlx_fstat(fileno(*fh), &sb) == -1 || !S_ISREG(sb.st_mode)) { |
| return CURLE_OK; | |
| } | |
| curlx_fclose(*fh); | |
| @@ -490,9 +490,6 @@ | |
| # include <sys/types.h> | |
| # include <sys/stat.h> | |
| /* Large file (>2Gb) support using Win32 functions. */ | |
| - | # undef fstat |
| - | # define fstat(fdes, stp) _fstati64(fdes, stp) |
| - | # define struct_stat struct _stati64 |
| # define curl_lseek _lseeki64 | |
| # define LSEEK_ERROR ((__int64)-1) | |
| #elif defined(__DJGPP__) | |
| @@ -508,10 +505,6 @@ | |
| # define LSEEK_ERROR ((off_t)-1) | |
| #endif | |
| - | #ifndef struct_stat |
| - | #define struct_stat struct stat |
| - | #endif |
| - | |
| #ifndef SIZEOF_TIME_T | |
| /* assume default size of time_t to be 32 bits */ | |
| #define SIZEOF_TIME_T 4 | |
| @@ -405,7 +405,7 @@ FILE *curlx_win32_freopen(const char *filename, const char *mode, FILE *fp) | |
| return result; | |
| } | |
| - | int curlx_win32_stat(const char *path, struct_stat *buffer) |
| + | int curlx_win32_stat(const char *path, curl_struct_stat *buffer) |
| { | |
| int result = -1; | |
| TCHAR *fixed = NULL; | |
| @@ -34,6 +34,7 @@ | |
| int curlx_fseek(void *stream, curl_off_t offset, int whence); | |
| #ifdef _WIN32 | |
| + | #include <sys/stat.h> /* for _fstati64, struct _stati64 */ |
| #ifndef CURL_WINDOWS_UWP | |
| HANDLE curlx_CreateFile(const char *filename, | |
| DWORD dwDesiredAccess, | |
| @@ -43,9 +44,11 @@ HANDLE curlx_CreateFile(const char *filename, | |
| DWORD dwFlagsAndAttributes, | |
| HANDLE hTemplateFile); | |
| #endif /* !CURL_WINDOWS_UWP */ | |
| + | #define curlx_fstat _fstati64 |
| + | #define curl_struct_stat struct _stati64 |
| FILE *curlx_win32_fopen(const char *filename, const char *mode); | |
| FILE *curlx_win32_freopen(const char *filename, const char *mode, FILE *fh); | |
| - | int curlx_win32_stat(const char *path, struct_stat *buffer); |
| + | int curlx_win32_stat(const char *path, curl_struct_stat *buffer); |
| int curlx_win32_open(const char *filename, int oflag, ...); | |
| int curlx_win32_rename(const char *oldpath, const char *newpath); | |
| #define CURLX_FOPEN_LOW(fname, mode) curlx_win32_fopen(fname, mode) | |
| @@ -56,6 +59,8 @@ int curlx_win32_rename(const char *oldpath, const char *newpath); | |
| #define curlx_close _close | |
| #define curlx_rename curlx_win32_rename | |
| #else | |
| + | #define curlx_fstat fstat |
| + | #define curl_struct_stat struct stat |
| #define CURLX_FOPEN_LOW fopen | |
| #define CURLX_FREOPEN_LOW freopen | |
| #define CURLX_FDOPEN_LOW fdopen | |
| @@ -270,7 +270,7 @@ static CURLcode file_upload(struct Curl_easy *data, | |
| CURLcode result = CURLE_OK; | |
| char *xfer_ulbuf; | |
| size_t xfer_ulblen; | |
| - | struct_stat file_stat; |
| + | curl_struct_stat file_stat; |
| const char *sendbuf; | |
| bool eos = FALSE; | |
| @@ -311,7 +311,7 @@ static CURLcode file_upload(struct Curl_easy *data, | |
| /* treat the negative resume offset value as the case of "-" */ | |
| if(data->state.resume_from < 0) { | |
| - | if(fstat(fd, &file_stat)) { |
| + | if(curlx_fstat(fd, &file_stat)) { |
| curlx_close(fd); | |
| failf(data, "cannot get the size of %s", file->path); | |
| return CURLE_WRITE_ERROR; | |
| @@ -390,9 +390,7 @@ static CURLcode file_do(struct Curl_easy *data, bool *done) | |
| */ | |
| struct FILEPROTO *file = Curl_meta_get(data, CURL_META_FILE_EASY); | |
| CURLcode result = CURLE_OK; | |
| - | struct_stat statbuf; /* struct_stat instead of struct stat just to allow the |
| - | Windows version to have a different struct without |
| - | having to redefine the simple word 'stat' */ |
| + | curl_struct_stat statbuf; |
| curl_off_t expected_size = -1; | |
| bool size_known; | |
| bool fstated = FALSE; | |
| @@ -411,7 +409,7 @@ static CURLcode file_do(struct Curl_easy *data, bool *done) | |
| fd = file->fd; | |
| /* VMS: This only works reliable for STREAMLF files */ | |
| - | if(fstat(fd, &statbuf) != -1) { |
| + | if(curlx_fstat(fd, &statbuf) != -1) { |
| if(!S_ISDIR(statbuf.st_mode)) | |
| expected_size = statbuf.st_size; | |
| /* and store the modification time */ | |
| @@ -107,7 +107,7 @@ static const char aschex[] = | |
| * and CD/DVD images should be either a STREAM_LF format or a fixed format. | |
| * | |
| */ | |
| - | curl_off_t VmsRealFileSize(const char *name, const struct_stat *stat_buf) |
| + | curl_off_t VmsRealFileSize(const char *name, const curl_struct_stat *stat_buf) |
| { | |
| char buffer[8192]; | |
| curl_off_t count; | |
| @@ -136,7 +136,8 @@ curl_off_t VmsRealFileSize(const char *name, const struct_stat *stat_buf) | |
| * if not to call a routine to get the correct size. | |
| * | |
| */ | |
| - | static curl_off_t VmsSpecialSize(const char *name, const struct_stat *stat_buf) |
| + | static curl_off_t VmsSpecialSize(const char *name, |
| + | const curl_struct_stat *stat_buf) |
| { | |
| switch(stat_buf->st_fab_rfm) { | |
| case FAB$C_VAR: | |
| @@ -160,7 +161,7 @@ static curl_off_t VmsSpecialSize(const char *name, const struct_stat *stat_buf) | |
| */ | |
| static FILE *vmsfopenread(const char *file, const char *mode) | |
| { | |
| - | struct_stat statbuf; |
| + | curl_struct_stat statbuf; |
| int result; | |
| result = curlx_stat(file, &statbuf); | |
| @@ -1307,7 +1308,7 @@ CURLcode curl_mime_filedata(curl_mimepart *part, const char *filename) | |
| if(filename) { | |
| char *base; | |
| - | struct_stat sbuf; |
| + | curl_struct_stat sbuf; |
| if(curlx_stat(filename, &sbuf)) | |
| result = CURLE_READ_ERROR; | |
| @@ -1089,7 +1089,7 @@ static CURLcode ssh_state_pkey_init(struct Curl_easy *data, | |
| /* To ponder about: should really the lib be messing about with the | |
| HOME environment variable etc? */ | |
| char *home = curl_getenv("HOME"); | |
| - | struct_stat sbuf; |
| + | curl_struct_stat sbuf; |
| /* If no private key file is specified, try some common paths. */ | |
| if(home) { | |
| @@ -49,6 +49,7 @@ my @ignore_line; | |
| my %banfunc = ( | |
| "_access" => 1, | |
| + | "_fstati64" => 1, |
| "_lseeki64" => 1, | |
| "_mbscat" => 1, | |
| "_mbsncat" => 1, | |
| @@ -82,6 +83,7 @@ my %banfunc = ( | |
| "free" => 1, | |
| "freeaddrinfo" => 1, | |
| "freopen" => 1, | |
| + | "fstat" => 1, |
| "getaddrinfo" => 1, | |
| "gets" => 1, | |
| "gmtime" => 1, | |
| @@ -291,7 +291,7 @@ static SANITIZEcode rename_if_reserved_dos(char ** const sanitized, | |
| * to rename such files. */ | |
| char *p, *base, *buffer; | |
| #ifdef MSDOS | |
| - | struct_stat st_buf; |
| + | curl_struct_stat st_buf; |
| #endif | |
| size_t len, bufsize; | |
| @@ -68,7 +68,7 @@ int getfiletime(const char *filename, curl_off_t *stamp) | |
| GetLastError()); | |
| } | |
| #else | |
| - | struct_stat statbuf; |
| + | curl_struct_stat statbuf; |
| if(curlx_stat(filename, &statbuf) != -1) { | |
| *stamp = (curl_off_t)statbuf.st_mtime; | |
| rc = 0; | |
| @@ -122,13 +122,13 @@ static struct tool_mime *tool_mime_new_filedata(struct tool_mime *parent, | |
| char *data = NULL; | |
| curl_off_t size; | |
| curl_off_t origin; | |
| - | struct_stat sbuf; |
| + | curl_struct_stat sbuf; |
| CURLX_SET_BINMODE(stdin); | |
| origin = ftell(stdin); | |
| /* If stdin is a regular file, do not buffer data but read it | |
| when needed. */ | |
| - | if(fd >= 0 && origin >= 0 && !fstat(fd, &sbuf) && |
| + | if(fd >= 0 && origin >= 0 && !curlx_fstat(fd, &sbuf) && |
| #ifdef __VMS | |
| sbuf.st_fab_rfm != FAB$C_VAR && sbuf.st_fab_rfm != FAB$C_VFC && | |
| #endif | |
| @@ -2209,7 +2209,7 @@ static ParameterError existingfile(char **store, | |
| const struct LongShort *a, | |
| const char *filename) | |
| { | |
| - | struct_stat info; |
| + | curl_struct_stat info; |
| if(curlx_stat(filename, &info)) { | |
| errorf("The file '%s' provided to --%s does not exist", | |
| filename, a->lname); | |
| @@ -146,7 +146,7 @@ static bool is_pkcs11_uri(const char *string) | |
| * | |
| */ | |
| static curl_off_t vms_realfilesize(const char *name, | |
| - | const struct_stat *stat_buf) |
| + | const curl_struct_stat *stat_buf) |
| { | |
| char buffer[8192]; | |
| curl_off_t count; | |
| @@ -176,7 +176,8 @@ static curl_off_t vms_realfilesize(const char *name, | |
| * if not to call a routine to get the correct size. | |
| * | |
| */ | |
| - | static curl_off_t VmsSpecialSize(const char *name, const struct_stat *stat_buf) |
| + | static curl_off_t VmsSpecialSize(const char *name, |
| + | const curl_struct_stat *stat_buf) |
| { | |
| switch(stat_buf->st_fab_rfm) { | |
| case FAB$C_VAR: | |
| @@ -247,7 +248,7 @@ static struct per_transfer *del_per_transfer(struct per_transfer *per) | |
| static CURLcode pre_transfer(struct per_transfer *per) | |
| { | |
| curl_off_t uploadfilesize = -1; | |
| - | struct_stat fileinfo; |
| + | curl_struct_stat fileinfo; |
| CURLcode result = CURLE_OK; | |
| if(per->uploadfile && !stdin_upload(per->uploadfile)) { | |
| @@ -284,7 +285,7 @@ static CURLcode pre_transfer(struct per_transfer *per) | |
| if(per->infd == -1) | |
| #else | |
| per->infd = curlx_open(per->uploadfile, O_RDONLY | CURL_O_BINARY); | |
| - | if((per->infd == -1) || fstat(per->infd, &fileinfo)) |
| + | if((per->infd == -1) || curlx_fstat(per->infd, &fileinfo)) |
| #endif | |
| { | |
| helpf("cannot open '%s'", per->uploadfile); | |
| @@ -547,11 +548,11 @@ static CURLcode retrycheck(struct OperationConfig *config, | |
| } | |
| if(truncate && outs->bytes && outs->filename && outs->stream) { | |
| - | struct_stat fileinfo; |
| + | curl_struct_stat fileinfo; |
| /* The output can be a named pipe or a character device etc that | |
| cannot be truncated. Only truncate regular files. */ | |
| - | if(!fstat(fileno(outs->stream), &fileinfo) && |
| + | if(!curlx_fstat(fileno(outs->stream), &fileinfo) && |
| S_ISREG(fileinfo.st_mode)) { | |
| int rc; | |
| /* We have written data to an output file, we truncate file */ | |
| @@ -717,7 +718,7 @@ static CURLcode post_per_transfer(struct per_transfer *per, | |
| errorf("curl: (%d) Failed writing body", result); | |
| } | |
| if(result && config->rm_partial) { | |
| - | struct_stat st; |
| + | curl_struct_stat st; |
| if(!curlx_stat(outs->filename, &st) && S_ISREG(st.st_mode)) { | |
| if(!unlink(outs->filename)) | |
| notef("Removed output file: %s", outs->filename); | |
| @@ -1039,7 +1040,7 @@ static CURLcode setup_outfile(struct OperationConfig *config, | |
| } | |
| if(config->skip_existing) { | |
| - | struct_stat fileinfo; |
| + | curl_struct_stat fileinfo; |
| if(!curlx_stat(per->outfile, &fileinfo)) { | |
| /* file is present */ | |
| notef("skips transfer, \"%s\" exists locally", per->outfile); | |
| @@ -1051,7 +1052,7 @@ static CURLcode setup_outfile(struct OperationConfig *config, | |
| if(config->resume_from_current) { | |
| /* We are told to continue from where we are now. Get the size | |
| of the file as it is now and open it for append instead */ | |
| - | struct_stat fileinfo; |
| + | curl_struct_stat fileinfo; |
| /* VMS -- Danger, the filesize is only valid for stream files */ | |
| if(curlx_stat(per->outfile, &fileinfo) == 0) | |
| /* set offset to current file size: */ | |
| @@ -37,7 +37,7 @@ static CURLcode test_lib505(const char *URL) | |
| char errbuf[STRERROR_LEN]; | |
| FILE *hd_src; | |
| int hd; | |
| - | struct_stat file_info; |
| + | curl_struct_stat file_info; |
| struct curl_slist *hl; | |
| struct curl_slist *headerlist = NULL; | |
| @@ -59,7 +59,7 @@ static CURLcode test_lib505(const char *URL) | |
| } | |
| /* get the file size of the local file */ | |
| - | hd = fstat(fileno(hd_src), &file_info); |
| + | hd = curlx_fstat(fileno(hd_src), &file_info); |
| if(hd == -1) { | |
| /* cannot open file, bail out */ | |
| curl_mfprintf(stderr, "fstat() failed with error (%d) %s\n", | |
| @@ -30,7 +30,7 @@ static CURLcode test_lib525(const char *URL) | |
| char errbuf[STRERROR_LEN]; | |
| FILE *hd_src = NULL; | |
| int hd; | |
| - | struct_stat file_info; |
| + | curl_struct_stat file_info; |
| CURLM *multi = NULL; | |
| int running; | |
| @@ -50,7 +50,7 @@ static CURLcode test_lib525(const char *URL) | |
| } | |
| /* get the file size of the local file */ | |
| - | hd = fstat(fileno(hd_src), &file_info); |
| + | hd = curlx_fstat(fileno(hd_src), &file_info); |
| if(hd == -1) { | |
| /* cannot open file, bail out */ | |
| curl_mfprintf(stderr, "fstat() failed with error (%d) %s\n", | |
| @@ -34,7 +34,7 @@ static CURLcode test_lib541(const char *URL) | |
| char errbuf[STRERROR_LEN]; | |
| FILE *hd_src; | |
| int hd; | |
| - | struct_stat file_info; |
| + | curl_struct_stat file_info; |
| if(!libtest_arg2) { | |
| curl_mfprintf(stderr, "Usage: <url> <file-to-upload>\n"); | |
| @@ -50,7 +50,7 @@ static CURLcode test_lib541(const char *URL) | |
| } | |
| /* get the file size of the local file */ | |
| - | hd = fstat(fileno(hd_src), &file_info); |
| + | hd = curlx_fstat(fileno(hd_src), &file_info); |
| if(hd == -1) { | |
| /* cannot open file, bail out */ | |
| curl_mfprintf(stderr, "fstat() failed with error (%d) %s\n", | |
| @@ -35,7 +35,7 @@ static CURLcode test_lib568(const char *URL) | |
| char errbuf[STRERROR_LEN]; | |
| int sdp; | |
| FILE *sdpf = NULL; | |
| - | struct_stat file_info; |
| + | curl_struct_stat file_info; |
| char *stream_uri = NULL; | |
| int request = 1; | |
| struct curl_slist *custom_headers = NULL; | |
| @@ -74,7 +74,7 @@ static CURLcode test_lib568(const char *URL) | |
| result = TEST_ERR_MAJOR_BAD; | |
| goto test_cleanup; | |
| } | |
| - | fstat(sdp, &file_info); |
| + | curlx_fstat(sdp, &file_info); |
| curlx_close(sdp); | |
| sdpf = curlx_fopen(libtest_arg2, "rb"); | |
| @@ -35,7 +35,7 @@ static CURLcode test_lib572(const char *URL) | |
| char errbuf[STRERROR_LEN]; | |
| int params; | |
| FILE *paramsf = NULL; | |
| - | struct_stat file_info; |
| + | curl_struct_stat file_info; |
| char *stream_uri = NULL; | |
| int request = 1; | |
| struct curl_slist *custom_headers = NULL; | |
| @@ -92,7 +92,7 @@ static CURLcode test_lib572(const char *URL) | |
| result = TEST_ERR_MAJOR_BAD; | |
| goto test_cleanup; | |
| } | |
| - | fstat(params, &file_info); |
| + | curlx_fstat(params, &file_info); |
| curlx_close(params); | |
| paramsf = curlx_fopen(libtest_arg2, "rb"); | |
| @@ -220,7 +220,7 @@ static CURLcode test_lib582(const char *URL) | |
| char errbuf[STRERROR_LEN]; | |
| FILE *hd_src = NULL; | |
| int hd; | |
| - | struct_stat file_info; |
| + | curl_struct_stat file_info; |
| CURLM *multi = NULL; | |
| struct t582_ReadWriteSockets sockets = { { NULL, 0, 0 }, { NULL, 0, 0 } }; | |
| int success = 0; | |
| @@ -245,7 +245,7 @@ static CURLcode test_lib582(const char *URL) | |
| } | |
| /* get the file size of the local file */ | |
| - | hd = fstat(fileno(hd_src), &file_info); |
| + | hd = curlx_fstat(fileno(hd_src), &file_info); |
| if(hd == -1) { | |
| /* cannot open file, bail out */ | |
| curl_mfprintf(stderr, "fstat() failed with error (%d) %s\n", | |
| @@ -670,7 +670,7 @@ int bind_unix_socket(curl_socket_t sock, const char *unix_socket, | |
| curlx_strcopy(sau->sun_path, sizeof(sau->sun_path), unix_socket, len); | |
| rc = bind(sock, (struct sockaddr *)sau, sizeof(struct sockaddr_un)); | |
| if(rc && SOCKERRNO == SOCKEADDRINUSE) { | |
| - | struct_stat statbuf; |
| + | curl_struct_stat statbuf; |
| /* socket already exists. Perhaps it is stale? */ | |
| curl_socket_t unixfd = socket(AF_UNIX, SOCK_STREAM, 0); | |
| if(CURL_SOCKET_BAD == unixfd) { | |
| @@ -690,7 +690,7 @@ int bind_unix_socket(curl_socket_t sock, const char *unix_socket, | |
| /* socket server is not alive, now check if it was actually a socket. */ | |
| #ifdef _WIN32 | |
| /* Windows does not have lstat function. */ | |
| - | rc = curlx_win32_stat(unix_socket, &statbuf); |
| + | rc = curlx_stat(unix_socket, &statbuf); |
| #else | |
| rc = lstat(unix_socket, &statbuf); | |
| #endif | |