libstdc++: Fix --enable-cstdio=stdio_pure [PR110574]
commit2f6bbc9a7d9a62423c576e13dc46323fe16ba5aa
authorJonathan Wakely <jwakely@redhat.com>
Thu, 6 Jul 2023 16:10:41 +0000 (6 17:10 +0100)
committerJonathan Wakely <jwakely@redhat.com>
Wed, 12 Jul 2023 20:04:13 +0000 (12 21:04 +0100)
treedb52364f1ac7727290c016d724bb0c24b60127f9
parent519b29c9e53d110d165059faa8a300c74450235a
libstdc++: Fix --enable-cstdio=stdio_pure [PR110574]

When configured with --enable-cstdio=stdio_pure we need to consistently
use fseek and not mix seeks on the file descriptor with reads and writes
on the FILE stream.

There are also a number of bugs related to error handling and return
values, because fread and fwrite return 0 on error, not -1, and fseek
returns 0 on success, not the file offset.

libstdc++-v3/ChangeLog:

PR libstdc++/110574
* acinclude.m4 (GLIBCXX_CHECK_LFS): Check for fseeko and ftello
and define _GLIBCXX_USE_FSEEKO_FTELLO.
* config.h.in: Regenerate.
* configure: Regenerate.
* config/io/basic_file_stdio.cc (xwrite) [_GLIBCXX_USE_STDIO_PURE]:
Check for fwrite error correctly.
(__basic_file<char>::xsgetn) [_GLIBCXX_USE_STDIO_PURE]: Check for
fread error correctly.
(get_file_offset): New function.
(__basic_file<char>::seekoff) [_GLIBCXX_USE_STDIO_PURE]: Use
fseeko if available. Use get_file_offset instead of return value
of fseek.
(__basic_file<char>::showmanyc): Use get_file_offset.
libstdc++-v3/acinclude.m4
libstdc++-v3/config.h.in
libstdc++-v3/config/io/basic_file_stdio.cc
libstdc++-v3/configure