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;
   }
 

Reply via email to