This is the mail archive of the libc-alpha@sources.redhat.com mailing list for the glibc project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
We're currently hunting down a bug where fwrite does not work with files larger than 2 GB. The problem seems to be that fwrite calls _IO_new_file_xsputn which calls new_do_write - and that one returns an int instead of _IO_size_t. note that new_do_write returns already a variable of type _IO_size_t - but the function is declared returning int. I've just build and tested (make check) the appended patch on AMD64. Ok to commit? Andreas 2004-03-31 Andreas Jaeger <aj@suse.de> * libio/fileops.c (_IO_new_do_write): Return _IO_size_t to make 64-bit clean. (new_do_write): Likewise. * libio/libioP.h: Change prototypes. ============================================================ Index: libio/fileops.c --- libio/fileops.c 14 Jan 2004 18:40:03 -0000 1.102 +++ libio/fileops.c 31 Mar 2004 07:31:28 -0000 @@ -472,24 +472,24 @@ _IO_file_setbuf_mmap (fp, p, len) return result; } -static int new_do_write __P ((_IO_FILE *, const char *, _IO_size_t)); +static _IO_size_t new_do_write __P ((_IO_FILE *, const char *, _IO_size_t)); /* Write TO_DO bytes from DATA to FP. Then mark FP as having empty buffers. */ -int +_IO_size_t _IO_new_do_write (fp, data, to_do) _IO_FILE *fp; const char *data; _IO_size_t to_do; { return (to_do == 0 - || (_IO_size_t) new_do_write (fp, data, to_do) == to_do) ? 0 : EOF; + || new_do_write (fp, data, to_do) == to_do) ? 0 : EOF; } INTDEF2(_IO_new_do_write, _IO_do_write) static -int +_IO_size_t new_do_write (fp, data, to_do) _IO_FILE *fp; const char *data; ============================================================ Index: libio/libioP.h --- libio/libioP.h 14 Jan 2004 18:34:43 -0000 1.71 +++ libio/libioP.h 31 Mar 2004 07:31:28 -0000 @@ -476,8 +476,8 @@ extern const struct _IO_jump_t _IO_old_p extern const struct _IO_jump_t _IO_str_jumps attribute_hidden; extern const struct _IO_jump_t _IO_wstr_jumps attribute_hidden; extern struct _IO_codecvt __libio_codecvt attribute_hidden; -extern int _IO_do_write __P ((_IO_FILE *, const char *, _IO_size_t)); -extern int _IO_new_do_write __P ((_IO_FILE *, const char *, _IO_size_t)); +extern _IO_size_t _IO_do_write __P ((_IO_FILE *, const char *, _IO_size_t)); +extern _IO_size_t _IO_new_do_write __P ((_IO_FILE *, const char *, _IO_size_t)); extern int _IO_old_do_write __P ((_IO_FILE *, const char *, _IO_size_t)); extern int _IO_wdo_write __P ((_IO_FILE *, const wchar_t *, _IO_size_t)); extern int _IO_flush_all_lockp __P ((int)); @@ -740,7 +740,7 @@ extern void _IO_unsave_markers_internal extern void _IO_switch_to_main_wget_area_internal __P ((_IO_FILE *)); extern int _IO_wdo_write_internal __P ((_IO_FILE *, const wchar_t *, _IO_size_t)); -extern int _IO_do_write_internal __P ((_IO_FILE *, const char *, _IO_size_t)); +extern _IO_size_t _IO_do_write_internal __P ((_IO_FILE *, const char *, _IO_size_t)); extern _IO_ssize_t _IO_padn_internal (_IO_FILE *, int, _IO_ssize_t); extern _IO_size_t _IO_getline_info_internal __P ((_IO_FILE *,char *, _IO_size_t, int, int, -- Andreas Jaeger, aj@suse.de, http://www.suse.de/~aj SUSE Linux AG, Maxfeldstr. 5, 90409 Nürnberg, Germany GPG fingerprint = 93A3 365E CE47 B889 DF7F FED1 389A 563C C272 A126
Attachment:
pgp00000.pgp
Description: PGP signature
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |