@@ -558,11 +558,13 @@ int
558
558
vips__write (int fd , const void * buf , size_t count )
559
559
{
560
560
do {
561
- size_t nwritten = write (fd , buf , count );
561
+ // write() uses int not ssize_t on windows, so we need to chunk
562
+ // ... max 1gb, why not
563
+ int chunk_size = VIPS_MIN (1024 * 1024 * 1024 , count );
564
+ ssize_t nwritten = write (fd , buf , chunk_size );
562
565
563
- if (nwritten == (size_t ) -1 ) {
564
- vips_error_system (errno , "vips__write" ,
565
- "%s" , _ ("write failed" ));
566
+ if (nwritten == (ssize_t ) -1 ) {
567
+ vips_error_system (errno , "vips__write" , "%s" , _ ("write failed" ));
566
568
return -1 ;
567
569
}
568
570
@@ -747,8 +749,7 @@ vips__file_read(FILE *fp, const char *filename, size_t *length_out)
747
749
if (len > 1024 * 1024 * 1024 ) {
748
750
/* Over a gb? Seems crazy!
749
751
*/
750
- vips_error ("vips__file_read" ,
751
- _ ("\"%s\" too long" ), filename );
752
+ vips_error ("vips__file_read" , _ ("\"%s\" too long" ), filename );
752
753
return NULL ;
753
754
}
754
755
@@ -770,17 +771,15 @@ vips__file_read(FILE *fp, const char *filename, size_t *length_out)
770
771
if (size > 1024 * 1024 * 1024 ||
771
772
!(str2 = realloc (str , size ))) {
772
773
free (str );
773
- vips_error ("vips__file_read" ,
774
- "%s" , _ ("out of memory" ));
774
+ vips_error ("vips__file_read" , "%s" , _ ("out of memory" ));
775
775
return NULL ;
776
776
}
777
777
str = str2 ;
778
778
779
779
/* -1 to allow space for an extra NULL we add later.
780
780
*/
781
781
read = fread (str + len , sizeof (char ),
782
- (size - len - 1 ) / sizeof (char ),
783
- fp );
782
+ (size - len - 1 ) / sizeof (char ), fp );
784
783
len += read ;
785
784
} while (!feof (fp ));
786
785
@@ -798,8 +797,7 @@ vips__file_read(FILE *fp, const char *filename, size_t *length_out)
798
797
if (read != (size_t ) len ) {
799
798
g_free (str );
800
799
vips_error ("vips__file_read" ,
801
- _ ("error reading from file \"%s\"" ),
802
- filename );
800
+ _ ("error reading from file \"%s\"" ), filename );
803
801
return NULL ;
804
802
}
805
803
}
0 commit comments