https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78534

--- Comment #23 from Janne Blomqvist <jb at gcc dot gnu.org> ---
Author: jb
Date: Sun Jan  7 10:17:52 2018
New Revision: 256322

URL: https://gcc.gnu.org/viewcvs?rev=256322&root=gcc&view=rev
Log:
PR 78534, 83704 Handle large formatted I/O

In order to handle large characters when doing formatted I/O, use
size_t and ptrdiff_t for lengths.  Compared to the previous patch,
based on discussions on IRC use size_t for sizes that don't need to be
negative rather than ptrdiff_t everywhere.

Regtested on x86_64-pc-linux-gnu, approved as part of the PR 78534
approval, committed to trunk.

libgfortran/ChangeLog:

2018-01-07  Janne Blomqvist  <j...@gcc.gnu.org>

        PR fortran/78534
        PR fortran/83704
        * io/fbuf.c (fbuf_init): Use size_t instead of int for length.
        (fbuf_debug): Convert debug output to unsigned long.
        (fbuf_reset): Use ptrdiff_t for return value.
        (fbuf_alloc): Use size_t for length argument.
        (fbuf_flush): Handle large buffers.
        (fbuf_flush_list): Likewise.
        (fbuf_seek): Use ptrdiff_t for offset and return value.
        (fbuf_read): Use size_t for length argument.
        (fbuf_getc_refill): Use size_t to match fbuf_read.
        * io/fbuf.h (struct fbuf): Use size_t for lengths.
        (fbuf_init): Use size_t instead of int for length.
        (fbuf_reset): Use ptrdiff_t for return value.
        (fbuf_alloc): Use size_t for length argument.
        (fbuf_seek): Use ptrdiff_t for offset and return value.
        (fbuf_read): Use size_t for length argument.
        * io/io.h (read_block_form): Likewise.
        (read_block_form4): Likewise.
        (write_block): Likewise.
        (read_a): Likewise.
        (read_a_char4): Likewise.
        (read_x): Likewise.
        (write_a): Likewise.
        (write_a_char4): Likewise.
        * io/list_read.c (list_formatted_read_scalar): Use size_t to
        handle large buffers.
        * io/read.c (read_l): Likewise.
        (read_utf8): Likewise.
        (read_utf8_char1): Likewise.
        (read_default_char1): Likewise.
        (read_utf8_char4): Likewise.
        (read_default_char4): Likewise.
        (read_a): Likewise.
        (read_a_char4): Likewise.
        (eat_leading_spaces): Likewise.
        (next_char): Likewise.
        (read_decimal): Likewise.
        (read_radix): Likewise.
        (read_f): Likewise.
        (read_x): Likewise.
        * io/transfer.c (read_sf_internal): Likewise.
        (read_sf): Likewise.
        (read_block_form): Likewise.
        (read_block_form4): Likewise.
        (write_block): Likewise.
        (formatted_transfer_scalar_write): Likewise.
        (next_record_w): Likewise.
        * io/unix.c (mem_alloc_r): Likewise.
        (mem_alloc_r4): Likewise.
        (mem_alloc_w): Likewise.
        (mem_alloc_w4): Likewise.
        (mem_read): Likewise.
        (mem_read4): Likewise.
        (mem_write): Likewise.
        (mem_write4): Likewise.
        (open_internal): Likewise.
        (open_internal4): Likewise.
        * io/unix.h (open_internal): Likewise.
        (open_internal4): Likewise.
        (mem_alloc_w): Likewise.
        (mem_alloc_r): Likewise.
        (mem_alloc_w4): Likewise.
        (mem_alloc_r4): Likewise.
        * io/write.c (write_check_cc): Likewise.
        (write_cc): Likewise.
        (write_a): Likewise.
        (write_a_char4): Likewise.

Modified:
    trunk/libgfortran/ChangeLog
    trunk/libgfortran/io/fbuf.c
    trunk/libgfortran/io/fbuf.h
    trunk/libgfortran/io/io.h
    trunk/libgfortran/io/list_read.c
    trunk/libgfortran/io/read.c
    trunk/libgfortran/io/transfer.c
    trunk/libgfortran/io/unix.c
    trunk/libgfortran/io/unix.h
    trunk/libgfortran/io/write.c

Reply via email to