• Paul Eggert's avatar
    * fileio.c: Fix bugs with large file offsets. · 728f8f0a
    Paul Eggert authored
    The previous code assumed that file offsets (off_t values) fit in
    EMACS_INT variables, which is not true on typical 32-bit hosts.
    The code messed up by falsely reporting buffer overflow in cases
    such as (insert-file-contents "big" nil 1 2) into an empty buffer
    when "big" contains more than 2**29 bytes, even though this
    inserts just one byte and does not overflow the buffer.
    (Finsert_file_contents): Store file offsets as off_t
    values, not as EMACS_INT values.  Check for overflow when
    converting between EMACS_INT and off_t.  When checking for
    buffer overflow or for overlap, take the offsets into account.
    Don't use EMACS_INT for small values where int suffices.
    When checking for overlap, fix a typo: ZV was used where
    ZV_BYTE was intended.
    (Fwrite_region): Don't assume off_t fits into 'long'.
    * buffer.h (struct buffer.modtime_size): Now off_t, not EMACS_INT.
    728f8f0a
buffer.h 40.4 KB