From 478e1ab6d313313bbdc2db6ad1bcf696b472df1d Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 10 Oct 2023 15:36:15 +0200 Subject: [PATCH] Fix build error on Windows after BLI_read changes Don't use posix-only ssize_t in platform independent code. Pull Request: https://projects.blender.org/blender/blender/pulls/113493 --- source/blender/blendthumb/src/blendthumb_win32.cc | 4 ++-- source/blender/blenlib/BLI_fileops.h | 2 +- source/blender/blenlib/BLI_filereader.h | 2 +- source/blender/blenlib/BLI_winstuff.h | 9 --------- source/blender/blenlib/intern/fileops.c | 8 ++++---- source/blender/blenlib/intern/filereader_file.c | 4 ++-- source/blender/blenlib/intern/filereader_gzip.c | 4 ++-- source/blender/blenlib/intern/filereader_memory.c | 4 ++-- source/blender/blenlib/intern/filereader_zstd.c | 6 +++--- source/blender/blenlib/intern/path_util.c | 2 +- source/blender/blenloader/intern/readfile.cc | 4 ++-- source/blender/blenloader/intern/undofile.cc | 4 ++-- source/blender/bmesh/intern/bmesh_operators.cc | 2 +- source/blender/imbuf/intern/util.cc | 8 ++++---- source/blender/windowmanager/intern/wm_playanim.cc | 6 +----- 15 files changed, 28 insertions(+), 41 deletions(-) diff --git a/source/blender/blendthumb/src/blendthumb_win32.cc b/source/blender/blendthumb/src/blendthumb_win32.cc index 2c9ebd26195..a60ff0a3e6f 100644 --- a/source/blender/blendthumb/src/blendthumb_win32.cc +++ b/source/blender/blendthumb/src/blendthumb_win32.cc @@ -102,7 +102,7 @@ struct StreamReader { IStream *_pStream; }; -static ssize_t stream_read(FileReader *reader, void *buffer, size_t size) +static int64_t stream_read(FileReader *reader, void *buffer, size_t size) { StreamReader *stream = (StreamReader *)reader; @@ -110,7 +110,7 @@ static ssize_t stream_read(FileReader *reader, void *buffer, size_t size) stream->_pStream->Read(buffer, size, &readsize); stream->reader.offset += readsize; - return ssize_t(readsize); + return int64_t(readsize); } static off64_t stream_seek(FileReader *reader, off64_t offset, int whence) diff --git a/source/blender/blenlib/BLI_fileops.h b/source/blender/blenlib/BLI_fileops.h index 9fd7d3e0cfd..b2ec965d1f6 100644 --- a/source/blender/blenlib/BLI_fileops.h +++ b/source/blender/blenlib/BLI_fileops.h @@ -296,7 +296,7 @@ int BLI_access(const char *filepath, int mode) ATTR_WARN_UNUSED_RESULT ATTR_NONN * - Reads `size_t` bytes instead of `int` on WIN32. * \return the number of bytes read. */ -ssize_t BLI_read(int fd, void *buf, size_t nbytes); +int64_t BLI_read(int fd, void *buf, size_t nbytes); /** * Returns true if the file with the specified name can be written. diff --git a/source/blender/blenlib/BLI_filereader.h b/source/blender/blenlib/BLI_filereader.h index 6c63fc83a80..20a9dd9c87c 100644 --- a/source/blender/blenlib/BLI_filereader.h +++ b/source/blender/blenlib/BLI_filereader.h @@ -29,7 +29,7 @@ extern "C" { struct FileReader; -typedef ssize_t (*FileReaderReadFn)(struct FileReader *reader, void *buffer, size_t size); +typedef int64_t (*FileReaderReadFn)(struct FileReader *reader, void *buffer, size_t size); typedef off64_t (*FileReaderSeekFn)(struct FileReader *reader, off64_t offset, int whence); typedef void (*FileReaderCloseFn)(struct FileReader *reader); diff --git a/source/blender/blenlib/BLI_winstuff.h b/source/blender/blenlib/BLI_winstuff.h index 82d1d4881e2..25d729479bb 100644 --- a/source/blender/blenlib/BLI_winstuff.h +++ b/source/blender/blenlib/BLI_winstuff.h @@ -65,15 +65,6 @@ extern "C" { typedef unsigned int mode_t; -#ifndef _SSIZE_T_ -# define _SSIZE_T_ -/* python uses HAVE_SSIZE_T */ -# ifndef HAVE_SSIZE_T -# define HAVE_SSIZE_T 1 -typedef SSIZE_T ssize_t; -# endif -#endif - /** Directory reading compatibility with UNIX. */ struct dirent { int d_ino; diff --git a/source/blender/blenlib/intern/fileops.c b/source/blender/blenlib/intern/fileops.c index 4b3a13fc085..cad3726082b 100644 --- a/source/blender/blenlib/intern/fileops.c +++ b/source/blender/blenlib/intern/fileops.c @@ -92,7 +92,7 @@ static char *windows_operation_string(FileExternalOperation operation) } #endif -ssize_t BLI_read(int fd, void *buf, size_t nbytes) +int64_t BLI_read(int fd, void *buf, size_t nbytes) { /* Define our own read as `read` is not guaranteed to read the number of bytes requested. * This happens rarely but was observed with larger than 2GB files on Linux, see: #113473. @@ -100,9 +100,9 @@ ssize_t BLI_read(int fd, void *buf, size_t nbytes) * Even though this is a loop, the most common code-path will exit with "Success" case. * In the case where read more data than the file contains, it will loop twice, * exiting on EOF with the second iteration. */ - ssize_t nbytes_read_total = 0; + int64_t nbytes_read_total = 0; while (true) { - ssize_t nbytes_read = read(fd, + int64_t nbytes_read = read(fd, buf, #ifdef WIN32 /* Read must not exceed INT_MAX on WIN32, clamp. */ @@ -1239,7 +1239,7 @@ static int copy_single_file(const char *from, const char *to) /* symbolic links should be copied in special way */ char *link_buffer; int need_free; - ssize_t link_len; + int64_t link_len; /* get large enough buffer to read link content */ if ((st.st_size + 1) < sizeof(buf)) { diff --git a/source/blender/blenlib/intern/filereader_file.c b/source/blender/blenlib/intern/filereader_file.c index a62570d1652..6bb98d6422d 100644 --- a/source/blender/blenlib/intern/filereader_file.c +++ b/source/blender/blenlib/intern/filereader_file.c @@ -25,10 +25,10 @@ typedef struct { int filedes; } RawFileReader; -static ssize_t file_read(FileReader *reader, void *buffer, size_t size) +static int64_t file_read(FileReader *reader, void *buffer, size_t size) { RawFileReader *rawfile = (RawFileReader *)reader; - ssize_t readsize = BLI_read(rawfile->filedes, buffer, size); + int64_t readsize = BLI_read(rawfile->filedes, buffer, size); if (readsize >= 0) { rawfile->reader.offset += readsize; diff --git a/source/blender/blenlib/intern/filereader_gzip.c b/source/blender/blenlib/intern/filereader_gzip.c index 8f787652bc9..33be5e27acc 100644 --- a/source/blender/blenlib/intern/filereader_gzip.c +++ b/source/blender/blenlib/intern/filereader_gzip.c @@ -24,7 +24,7 @@ typedef struct { size_t in_size; } GzipReader; -static ssize_t gzip_read(FileReader *reader, void *buffer, size_t size) +static int64_t gzip_read(FileReader *reader, void *buffer, size_t size) { GzipReader *gzip = (GzipReader *)reader; @@ -54,7 +54,7 @@ static ssize_t gzip_read(FileReader *reader, void *buffer, size_t size) } } - ssize_t read_len = size - gzip->strm.avail_out; + int64_t read_len = size - gzip->strm.avail_out; gzip->reader.offset += read_len; return read_len; } diff --git a/source/blender/blenlib/intern/filereader_memory.c b/source/blender/blenlib/intern/filereader_memory.c index 832df1622b2..fbb29a00c47 100644 --- a/source/blender/blenlib/intern/filereader_memory.c +++ b/source/blender/blenlib/intern/filereader_memory.c @@ -23,7 +23,7 @@ typedef struct { size_t length; } MemoryReader; -static ssize_t memory_read_raw(FileReader *reader, void *buffer, size_t size) +static int64_t memory_read_raw(FileReader *reader, void *buffer, size_t size) { MemoryReader *mem = (MemoryReader *)reader; @@ -87,7 +87,7 @@ FileReader *BLI_filereader_new_memory(const void *data, size_t len) * This avoids system call overhead and can significantly speed up file loading. */ -static ssize_t memory_read_mmap(FileReader *reader, void *buffer, size_t size) +static int64_t memory_read_mmap(FileReader *reader, void *buffer, size_t size) { MemoryReader *mem = (MemoryReader *)reader; diff --git a/source/blender/blenlib/intern/filereader_zstd.c b/source/blender/blenlib/intern/filereader_zstd.c index 60791e22ec1..45ef6dcea43 100644 --- a/source/blender/blenlib/intern/filereader_zstd.c +++ b/source/blender/blenlib/intern/filereader_zstd.c @@ -193,7 +193,7 @@ static const char *zstd_ensure_cache(ZstdReader *zstd, int frame) return uncompressed_data; } -static ssize_t zstd_read_seekable(FileReader *reader, void *buffer, size_t size) +static int64_t zstd_read_seekable(FileReader *reader, void *buffer, size_t size) { ZstdReader *zstd = (ZstdReader *)reader; @@ -244,7 +244,7 @@ static off64_t zstd_seek(FileReader *reader, off64_t offset, int whence) return zstd->reader.offset; } -static ssize_t zstd_read(FileReader *reader, void *buffer, size_t size) +static int64_t zstd_read(FileReader *reader, void *buffer, size_t size) { ZstdReader *zstd = (ZstdReader *)reader; ZSTD_outBuffer output = {buffer, size, 0}; @@ -253,7 +253,7 @@ static ssize_t zstd_read(FileReader *reader, void *buffer, size_t size) if (zstd->in_buf.pos == zstd->in_buf.size) { /* Ran out of buffered input data, read some more. */ zstd->in_buf.pos = 0; - ssize_t readsize = zstd->base->read( + int64_t readsize = zstd->base->read( zstd->base, (char *)zstd->in_buf.src, zstd->in_buf_max_size); if (readsize > 0) { diff --git a/source/blender/blenlib/intern/path_util.c b/source/blender/blenlib/intern/path_util.c index aebb2cb88bd..92c994022af 100644 --- a/source/blender/blenlib/intern/path_util.c +++ b/source/blender/blenlib/intern/path_util.c @@ -1537,7 +1537,7 @@ bool BLI_path_extension_ensure(char *path, size_t path_maxncpy, const char *ext) const size_t path_len = strlen(path); const size_t ext_len = strlen(ext); - ssize_t a; + int64_t a; for (a = path_len - 1; a >= 0; a--) { if (path[a] == '.') { diff --git a/source/blender/blenloader/intern/readfile.cc b/source/blender/blenloader/intern/readfile.cc index 711811419c4..88d1ec2e593 100644 --- a/source/blender/blenloader/intern/readfile.cc +++ b/source/blender/blenloader/intern/readfile.cc @@ -670,7 +670,7 @@ static void bh8_from_bh4(BHead *bhead, BHead4 *bhead4) static BHeadN *get_bhead(FileData *fd) { BHeadN *new_bhead = nullptr; - ssize_t readsize; + int64_t readsize; if (fd) { if (!fd->is_eof) { @@ -922,7 +922,7 @@ AssetMetaData *blo_bhead_id_asset_data_address(const FileData *fd, const BHead * static void decode_blender_header(FileData *fd) { char header[SIZEOFBLENDERHEADER], num[4]; - ssize_t readsize; + int64_t readsize; /* read in the header data */ readsize = fd->file->read(fd->file, header, sizeof(header)); diff --git a/source/blender/blenloader/intern/undofile.cc b/source/blender/blenloader/intern/undofile.cc index f8995b42972..980800c5b68 100644 --- a/source/blender/blenloader/intern/undofile.cc +++ b/source/blender/blenloader/intern/undofile.cc @@ -254,7 +254,7 @@ bool BLO_memfile_write_file(MemFile *memfile, const char *filepath) return true; } -static ssize_t undo_read(FileReader *reader, void *buffer, size_t size) +static int64_t undo_read(FileReader *reader, void *buffer, size_t size) { UndoReader *undo = (UndoReader *)reader; @@ -323,7 +323,7 @@ static ssize_t undo_read(FileReader *reader, void *buffer, size_t size) chunk->is_identical_future; } while (totread < size); - return ssize_t(totread); + return int64_t(totread); } return 0; diff --git a/source/blender/bmesh/intern/bmesh_operators.cc b/source/blender/bmesh/intern/bmesh_operators.cc index d7ed9a765ab..c926e6eb29b 100644 --- a/source/blender/bmesh/intern/bmesh_operators.cc +++ b/source/blender/bmesh/intern/bmesh_operators.cc @@ -652,7 +652,7 @@ void *bmo_slot_buffer_grow(BMesh *bm, BMOperator *op, int slot_code, int totadd) { BMOpSlot *slot = &op->slots[slot_code]; void *tmp; - ssize_t allocsize; + int64_t allocsize; BLI_assert(slot->slottype == BMO_OP_SLOT_ELEMENT_BUF); diff --git a/source/blender/imbuf/intern/util.cc b/source/blender/imbuf/intern/util.cc index f43b4ef32d5..7876df5ef2c 100644 --- a/source/blender/imbuf/intern/util.cc +++ b/source/blender/imbuf/intern/util.cc @@ -92,7 +92,7 @@ const char *imb_ext_audio[] = { /* OIIO will validate the entire header of some files and DPX requires 2048 */ #define HEADER_SIZE 2048 -static ssize_t imb_ispic_read_header_from_filepath(const char *filepath, uchar buf[HEADER_SIZE]) +static int64_t imb_ispic_read_header_from_filepath(const char *filepath, uchar buf[HEADER_SIZE]) { BLI_stat_t st; int fp; @@ -114,7 +114,7 @@ static ssize_t imb_ispic_read_header_from_filepath(const char *filepath, uchar b return -1; } - const ssize_t size = BLI_read(fp, buf, HEADER_SIZE); + const int64_t size = BLI_read(fp, buf, HEADER_SIZE); close(fp); return size; @@ -136,7 +136,7 @@ int IMB_ispic_type_from_memory(const uchar *buf, const size_t buf_size) int IMB_ispic_type(const char *filepath) { uchar buf[HEADER_SIZE]; - const ssize_t buf_size = imb_ispic_read_header_from_filepath(filepath, buf); + const int64_t buf_size = imb_ispic_read_header_from_filepath(filepath, buf); if (buf_size <= 0) { return IMB_FTYPE_NONE; } @@ -146,7 +146,7 @@ int IMB_ispic_type(const char *filepath) bool IMB_ispic_type_matches(const char *filepath, int filetype) { uchar buf[HEADER_SIZE]; - const ssize_t buf_size = imb_ispic_read_header_from_filepath(filepath, buf); + const int64_t buf_size = imb_ispic_read_header_from_filepath(filepath, buf); if (buf_size <= 0) { return false; } diff --git a/source/blender/windowmanager/intern/wm_playanim.cc b/source/blender/windowmanager/intern/wm_playanim.cc index 31a2aa8deeb..3f8206e4f00 100644 --- a/source/blender/windowmanager/intern/wm_playanim.cc +++ b/source/blender/windowmanager/intern/wm_playanim.cc @@ -68,10 +68,6 @@ #include "WM_api.hh" /* only for WM_main_playanim */ -#ifdef WIN32 -# include "BLI_winstuff.h" /* Only for `ssize_t`. */ -#endif - #ifdef WITH_AUDASPACE # include # include @@ -117,7 +113,7 @@ static bool buffer_from_filepath(const char *filepath, void **r_mem, size_t *r_s bool success = false; uchar *mem = nullptr; const size_t size = BLI_file_descriptor_size(file); - ssize_t size_read; + int64_t size_read; if (UNLIKELY(size == size_t(-1))) { CLOG_WARN(&LOG, "failure '%s' to access size '%s'", strerror(errno), filepath); }