On 07/11/17 21:00 +0200, Andris Pavenis wrote:
On 11/07/2017 08:28 PM, Jonathan Wakely wrote:
On 07/11/17 19:26 +0200, Andris Pavenis wrote:
src/filesystem/ops-common.c uses S_ISSOCK unconditionally without checking that
it is available
As result compile fails for DJGPP when S_ISREG is available but
S_ISSOCK is not. Included patch add configure check for S_ISSOCK
Andris
ChangeLog entry:
2017-11-07 Andris Pavenis<andris.pavenis.iki.fi>
* acinclude.m4 (GLIBCXX_CHECK_S_ISSOCK): Define
* configure.ac: Check presence of S_ISSOCK
* src/filesystem/ops-common.h: Only use S_ISSOCK if defined for target
* config.h.in: Regenerate
* configure: Regenerate
Do we need an autoconf check?
I just followed the same style as with S_ISREG/S_IFREG...
But those checks are there for config/io/basic_file_stdio.cc which has
more complicated needs (although it could still be done with simple
#ifdef checks).
Simple #ifdef S_ISSOCK is sufficient in this case.
Committed to trunk.
commit 39e800d34271bc95fbd70f4dc12afd41be86e6a2
Author: Jonathan Wakely <jwak...@redhat.com>
Date: Tue Nov 7 18:19:10 2017 +0000
Check for S_ISSOCK before use
* src/filesystem/ops-common.h (make_file_type) [S_ISSOCK]: Only use
S_ISSOCK when defined.
diff --git a/libstdc++-v3/src/filesystem/ops-common.h b/libstdc++-v3/src/filesystem/ops-common.h
index 12c12b08f8c..f96a999264f 100644
--- a/libstdc++-v3/src/filesystem/ops-common.h
+++ b/libstdc++-v3/src/filesystem/ops-common.h
@@ -113,9 +113,11 @@ _GLIBCXX_BEGIN_NAMESPACE_FILESYSTEM
return file_type::fifo;
else if (S_ISLNK(st.st_mode))
return file_type::symlink;
+#ifdef S_ISSOCK // not present until POSIX:2001
else if (S_ISSOCK(st.st_mode))
return file_type::socket;
#endif
+#endif
return file_type::unknown;
}