PR libstdc++/12882 (cont)
2004-09-21 Paolo Carlini <pcarlini@suse.de> PR libstdc++/12882 (cont) * acinclude.m4 (GLIBCXX_CHECK_LFS): Check for fstat64 too. * configure: Regenerate. * config/io/basic_file_stdio.cc (__basic_file<>::showmanyc): When _GLIBCXX_USE_LFS use fstat64 and lseek64, thus providing a non trivial showmanyc for large files too. From-SVN: r87797
This commit is contained in:
parent
fd375c5381
commit
dd5d134bc9
@ -1,3 +1,12 @@
|
||||
2004-09-21 Paolo Carlini <pcarlini@suse.de>
|
||||
|
||||
PR libstdc++/12882 (cont)
|
||||
* acinclude.m4 (GLIBCXX_CHECK_LFS): Check for fstat64 too.
|
||||
* configure: Regenerate.
|
||||
* config/io/basic_file_stdio.cc (__basic_file<>::showmanyc): When
|
||||
_GLIBCXX_USE_LFS use fstat64 and lseek64, thus providing a non
|
||||
trivial showmanyc for large files too.
|
||||
|
||||
2004-09-17 Jonathan Wakely <redi@gcc.gnu.org>
|
||||
|
||||
* include/bits/stl_algo.h (remove): Remove too restrictive
|
||||
|
@ -573,12 +573,15 @@ AC_DEFUN([GLIBCXX_CHECK_LFS], [
|
||||
AC_TRY_LINK(
|
||||
[#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/stat.h>
|
||||
],
|
||||
[FILE* fp;
|
||||
fopen64("t", "w");
|
||||
fseeko64(fp, 0, SEEK_CUR);
|
||||
ftello64(fp);
|
||||
lseek64(1, 0, SEEK_CUR);],
|
||||
lseek64(1, 0, SEEK_CUR);
|
||||
struct stat64 buf;
|
||||
fstat64(1, &buf);],
|
||||
[glibcxx_cv_LFS=yes],
|
||||
[glibcxx_cv_LFS=no])
|
||||
])
|
||||
|
@ -68,7 +68,7 @@
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#include <limits> // For <off_t>::max() and min()
|
||||
#include <limits> // For <off_t>::max() and min() and <streamsize>::max()
|
||||
|
||||
namespace __gnu_internal
|
||||
{
|
||||
@ -315,8 +315,8 @@ namespace std
|
||||
#ifdef _GLIBCXX_USE_LFS
|
||||
return lseek64(this->fd(), __off, __way);
|
||||
#else
|
||||
if (__off > std::numeric_limits<off_t>::max()
|
||||
|| __off < std::numeric_limits<off_t>::min())
|
||||
if (__off > numeric_limits<off_t>::max()
|
||||
|| __off < numeric_limits<off_t>::min())
|
||||
return -1L;
|
||||
return lseek(this->fd(), __off, __way);
|
||||
#endif
|
||||
@ -352,10 +352,21 @@ namespace std
|
||||
|
||||
#if defined(_GLIBCXX_HAVE_S_ISREG) || defined(_GLIBCXX_HAVE_S_IFREG)
|
||||
// Regular files.
|
||||
#ifdef _GLIBCXX_USE_LFS
|
||||
struct stat64 __buffer;
|
||||
const int __err = fstat64(this->fd(), &__buffer);
|
||||
if (!__err && _GLIBCXX_ISREG(__buffer.st_mode))
|
||||
{
|
||||
const streamoff __off = __buffer.st_size - lseek64(this->fd(), 0,
|
||||
ios_base::cur);
|
||||
return std::min(__off, streamoff(numeric_limits<streamsize>::max()));
|
||||
}
|
||||
#else
|
||||
struct stat __buffer;
|
||||
int __ret = fstat(this->fd(), &__buffer);
|
||||
if (!__ret && _GLIBCXX_ISREG(__buffer.st_mode))
|
||||
return __buffer.st_size - lseek(this->fd(), 0, ios_base::cur);
|
||||
const int __err = fstat(this->fd(), &__buffer);
|
||||
if (!__err && _GLIBCXX_ISREG(__buffer.st_mode))
|
||||
return __buffer.st_size - lseek(this->fd(), 0, ios_base::cur);
|
||||
#endif
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
3
libstdc++-v3/configure
vendored
3
libstdc++-v3/configure
vendored
@ -30148,6 +30148,7 @@ cat >>conftest.$ac_ext <<_ACEOF
|
||||
/* end confdefs.h. */
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
int
|
||||
main ()
|
||||
@ -30157,6 +30158,8 @@ FILE* fp;
|
||||
fseeko64(fp, 0, SEEK_CUR);
|
||||
ftello64(fp);
|
||||
lseek64(1, 0, SEEK_CUR);
|
||||
struct stat64 buf;
|
||||
fstat64(1, &buf);
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user