swap ssize_t for gint64 where possible
Some versions of the Windows headers define ssize_t as unsigned. This patch removes (where possible) use of ssize_t inside libvips, esp. in the new stream API. See https://github.com/libvips/libvips/issues/1494#issuecomment-568254731
This commit is contained in:
parent
e48f45187b
commit
0429a0080e
@ -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 );
|
||||
|
@ -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.
|
||||
|
@ -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" );
|
||||
|
||||
|
@ -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 );
|
||||
|
@ -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 )
|
||||
{
|
||||
|
@ -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 );
|
||||
|
@ -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 )
|
||||
{
|
||||
|
@ -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 );
|
||||
|
Loading…
Reference in New Issue
Block a user