diff --git a/libvips/foreign/vipspng.c b/libvips/foreign/vipspng.c index 5e81810a..2b91ca96 100644 --- a/libvips/foreign/vipspng.c +++ b/libvips/foreign/vipspng.c @@ -180,7 +180,7 @@ typedef struct { */ unsigned char input_buffer[INPUT_BUFFER_SIZE]; unsigned char *next_byte; - ssize_t bytes_in_buffer; + gint64 bytes_in_buffer; } Read; @@ -225,10 +225,10 @@ vips_png_read_stream( png_structp pPng, png_bytep data, png_size_t length ) * syscall for each one. Read via our own buffer. */ while( length > 0 ) { - ssize_t bytes_available; + gint64 bytes_available; if( read->bytes_in_buffer <= 0 ) { - ssize_t bytes_read; + gint64 bytes_read; bytes_read = vips_streami_read( read->streami, read->input_buffer, INPUT_BUFFER_SIZE ); diff --git a/libvips/include/vips/stream.h b/libvips/include/vips/stream.h index 8f008105..5c939759 100644 --- a/libvips/include/vips/stream.h +++ b/libvips/include/vips/stream.h @@ -184,8 +184,11 @@ typedef struct _VipsStreamiClass { /* Read from the stream into the supplied buffer, args exactly as * read(2). Set errno on error. + * + * We must return gint64, since ssize_t is often defined as unsigned + * on Windows. */ - ssize_t (*read)( VipsStreami *, void *, size_t ); + gint64 (*read)( VipsStreami *, void *, size_t ); /* Seek to a certain position, args exactly as lseek(2). Set errno on * error. @@ -211,7 +214,7 @@ VipsStreami *vips_streami_new_from_options( const char *options ); void vips_streami_minimise( VipsStreami *streami ); int vips_streami_unminimise( VipsStreami *streami ); int vips_streami_decode( VipsStreami *streami ); -ssize_t vips_streami_read( VipsStreami *streami, void *data, size_t length ); +gint64 vips_streami_read( VipsStreami *streami, void *data, size_t length ); gboolean vips_streami_is_mappable( VipsStreami *streami ); const void *vips_streami_map( VipsStreami *streami, size_t *length ); VipsBlob *vips_streami_map_blob( VipsStreami *streami ); @@ -314,8 +317,11 @@ typedef struct _VipsStreamoClass { VipsStreamClass parent_class; /* Write to output. Args exactly as write(2). + * + * We must return gint64, since ssize_t is often defined as unsigned + * on Windows. */ - ssize_t (*write)( VipsStreamo *, const void *, size_t ); + gint64 (*write)( VipsStreamo *, const void *, size_t ); /* Output has been generated, so do any clearing up, * eg. copy the bytes we saved in memory to the stream blob. diff --git a/libvips/iofuncs/bufis.c b/libvips/iofuncs/bufis.c index 15593a69..2dec5a31 100644 --- a/libvips/iofuncs/bufis.c +++ b/libvips/iofuncs/bufis.c @@ -132,10 +132,10 @@ vips_bufis_unbuffer( VipsBufis *bufis ) /* Returns -1 on error, 0 on EOF, otherwise bytes read. */ -static ssize_t +static gint64 vips_bufis_refill( VipsBufis *bufis ) { - ssize_t bytes_read; + gint64 bytes_read; VIPS_DEBUG_MSG( "vips_bufis_refill:\n" ); diff --git a/libvips/iofuncs/streami.c b/libvips/iofuncs/streami.c index 1951404c..4a864b36 100644 --- a/libvips/iofuncs/streami.c +++ b/libvips/iofuncs/streami.c @@ -276,12 +276,12 @@ vips_streami_build( VipsObject *object ) return( 0 ); } -static ssize_t +static gint64 vips_streami_read_real( VipsStreami *streami, void *data, size_t length ) { VipsStream *stream = VIPS_STREAM( streami ); - ssize_t bytes_read; + gint64 bytes_read; VIPS_DEBUG_MSG( "vips_streami_read_real:\n" ); @@ -624,14 +624,14 @@ vips_streami_decode( VipsStreami *streami ) * * Arguments exactly as read(2). * - * Returns: the number of bytes raed, 0 on end of file, -1 on error. + * Returns: the number of bytes read, 0 on end of file, -1 on error. */ -ssize_t +gint64 vips_streami_read( VipsStreami *streami, void *buffer, size_t length ) { VipsStreamiClass *class = VIPS_STREAMI_GET_CLASS( streami ); - ssize_t bytes_read; + gint64 total_read; VIPS_DEBUG_MSG( "vips_streami_read:\n" ); @@ -641,19 +641,19 @@ vips_streami_read( VipsStreami *streami, void *buffer, size_t length ) vips_streami_test_features( streami ) ) return( -1 ); - bytes_read = 0; + total_read = 0; if( streami->data ) { /* The whole thing is in memory somehow. */ - ssize_t available = VIPS_MIN( length, + gint64 available = VIPS_MIN( length, streami->length - streami->read_position ); VIPS_DEBUG_MSG( " %zd bytes from memory\n", available ); memcpy( buffer, streami->data + streami->read_position, available ); streami->read_position += available; - bytes_read += available; + total_read += available; } else { /* Some kind of filesystem or custom source. @@ -663,7 +663,7 @@ vips_streami_read( VipsStreami *streami, void *buffer, size_t length ) */ if( streami->header_bytes && streami->read_position < streami->header_bytes->len ) { - ssize_t available = VIPS_MIN( length, + gint64 available = VIPS_MIN( length, streami->header_bytes->len - streami->read_position ); @@ -676,18 +676,19 @@ vips_streami_read( VipsStreami *streami, void *buffer, size_t length ) streami->read_position += available; buffer += available; length -= available; - bytes_read += available; + total_read += available; } /* Any more bytes requested? Call the read() vfunc. */ if( length > 0 ) { - ssize_t n; + gint64 bytes_read; VIPS_DEBUG_MSG( " calling class->read()\n" ); - n = class->read( streami, buffer, length ); - VIPS_DEBUG_MSG( " %zd bytes from read()\n", n ); - if( n == -1 ) { + bytes_read = class->read( streami, buffer, length ); + VIPS_DEBUG_MSG( " %zd bytes from read()\n", + bytes_read ); + if( bytes_read == -1 ) { vips_error_system( errno, vips_stream_nick( VIPS_STREAM( streami ) ), @@ -701,20 +702,20 @@ vips_streami_read( VipsStreami *streami, void *buffer, size_t length ) if( streami->header_bytes && streami->is_pipe && !streami->decode && - n > 0 ) + bytes_read > 0 ) g_byte_array_append( streami->header_bytes, - buffer, n ); + buffer, bytes_read ); - streami->read_position += n; - bytes_read += n; + streami->read_position += bytes_read; + total_read += bytes_read; } } - VIPS_DEBUG_MSG( " %zd bytes total\n", bytes_read ); + VIPS_DEBUG_MSG( " %zd bytes total\n", total_read ); SANITY( streami ); - return( bytes_read ); + return( total_read ); } /* -1 on a pipe isn't actually unbounded. Have a limit to prevent @@ -753,7 +754,7 @@ vips_streami_pipe_read_to_position( VipsStreami *streami, gint64 target ) while( target == -1 || streami->read_position < target ) { - ssize_t bytes_read; + gint64 bytes_read; bytes_read = vips_streami_read( streami, buffer, 4096 ); if( bytes_read == -1 ) @@ -805,7 +806,7 @@ vips_streami_read_to_memory( VipsStreami *streami ) read_position = 0; q = byte_array->data; while( read_position < streami->length ) { - ssize_t bytes_read; + gint64 bytes_read; bytes_read = vips_streami_read( streami, q, VIPS_MAX( 4096, streami->length - read_position ) ); @@ -1187,7 +1188,7 @@ vips_streami_sniff_at_most( VipsStreami *streami, read_position = 0; q = streami->sniff->data; while( read_position < length ) { - ssize_t bytes_read; + gint64 bytes_read; bytes_read = vips_streami_read( streami, q, length - read_position ); diff --git a/libvips/iofuncs/streamiu.c b/libvips/iofuncs/streamiu.c index 54aa635a..12aa4026 100644 --- a/libvips/iofuncs/streamiu.c +++ b/libvips/iofuncs/streamiu.c @@ -70,7 +70,7 @@ enum { static guint vips_streamiu_signals[SIG_LAST] = { 0 }; -static ssize_t +static gint64 vips_streamiu_read_real( VipsStreami *streami, void *buffer, size_t length ) { diff --git a/libvips/iofuncs/streamo.c b/libvips/iofuncs/streamo.c index 1c7394b0..9cada27b 100644 --- a/libvips/iofuncs/streamo.c +++ b/libvips/iofuncs/streamo.c @@ -142,7 +142,7 @@ vips_streamo_build( VipsObject *object ) return( 0 ); } -static ssize_t +static gint64 vips_streamo_write_real( VipsStreamo *streamo, const void *data, size_t length ) { VipsStream *stream = VIPS_STREAM( streamo ); @@ -305,14 +305,14 @@ vips_streamo_write_unbuffered( VipsStreamo *streamo, g_byte_array_append( streamo->memory_buffer, data, length ); else while( length > 0 ) { - ssize_t n; + gint64 bytes_written; - n = class->write( streamo, data, length ); + bytes_written = class->write( streamo, data, length ); /* n == 0 isn't strictly an error, but we treat it as * one to make sure we don't get stuck in this loop. */ - if( n <= 0 ) { + if( bytes_written <= 0 ) { vips_error_system( errno, vips_stream_nick( VIPS_STREAM( streamo ) ), @@ -320,8 +320,8 @@ vips_streamo_write_unbuffered( VipsStreamo *streamo, return( -1 ); } - length -= n; - data += n; + length -= bytes_written; + data += bytes_written; } return( 0 ); diff --git a/libvips/iofuncs/streamou.c b/libvips/iofuncs/streamou.c index eff3d7b0..951cfa97 100644 --- a/libvips/iofuncs/streamou.c +++ b/libvips/iofuncs/streamou.c @@ -70,7 +70,7 @@ enum { static guint vips_streamou_signals[SIG_LAST] = { 0 }; -static ssize_t +static gint64 vips_streamou_write_real( VipsStreamo *streamo, const void *data, size_t length ) { diff --git a/libvips/iofuncs/vips.c b/libvips/iofuncs/vips.c index 7bf141c0..3bca6571 100644 --- a/libvips/iofuncs/vips.c +++ b/libvips/iofuncs/vips.c @@ -549,8 +549,8 @@ parser_read_fd( XML_Parser parser, int fd ) { const int chunk_size = 1024; - ssize_t bytes_read; - ssize_t len; + gint64 bytes_read; + gint64 len; bytes_read = 0; @@ -563,7 +563,7 @@ parser_read_fd( XML_Parser parser, int fd ) return( -1 ); } len = read( fd, buf, chunk_size ); - if( len == (ssize_t) -1 ) { + if( len == -1 ) { vips_error( "VipsImage", "%s", _( "read error while fetching XML" ) ); return( -1 );