This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
Re: [patch libstdc++]: Add some missing errno-constants for mingw-targets
2011/8/28 Paolo Carlini <paolo.carlini@oracle.com>:
> Sorry,:
>>
>> Once more, I don't understand: didn't you suggest changing *only* ENOSPC
>> and EPERM? Why are we now discussing other error-numbers like ECHILD,
>> EAFNOSUPPORT and EBADMSG? Are the latter defined in errno.h?
>
> should have written:
>
> Once more, I don't understand: didn't you suggest changing *only* ECHILD,
> ENOSPC and EPERM? Why are we now discussing other error-numbers like
> EAFNOSUPPORT and EBADMSG? Are the former defined in errno.h?
>
> Paolo.
Hi,
So I altered the patch in the way you were suggesting. I verfied
values supported in more
detail and found that some other error-values should be handled for
mingw host, too.
The feared clash for E2BIG and EOVERFLOW doesn't happen, so I enabled
them, too. Additionally
in combination with winpthread, there are error-values ETIMEDOUT,
ENOTSUP, and EWOULDBLOCK present.
ChangeLog
2011-08-28 Kai Tietz <ktietz@redhat.com>
* configure: Regenerated.
* config.h.in: Regenerated.
* acinclude.m4 (GLIBCXX_CHECK_SYSTEM_ERROR) Add
checks for ECHILD, ENOSPC, EPERM, ETIMEDOUT, and
EWOULDBLOCK.
* config/os/mingw32/error_constants.h (errc): Add
enumerator values no_child_process, no_space_on_device,
not_supported, operation_not_permitted, operation_would_block,
timed_out, and value_too_large,
Regression tested for x86_64-w64-mingw32 and i686-w64-mingw32. Ok for apply?
Regards,
Kai
Index: configure
===================================================================
--- configure (revision 178145)
+++ configure (working copy)
@@ -17650,9 +17650,174 @@
$as_echo "#define HAVE_ETXTBSY 1" >>confdefs.h
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ECHILD" >&5
+$as_echo_n "checking for ECHILD... " >&6; }
+if test "${glibcxx_cv_system_error15+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <errno.h>
+int
+main ()
+{
+int i = ECHILD;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ glibcxx_cv_system_error15=yes
+else
+ glibcxx_cv_system_error15=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result:
$glibcxx_cv_system_error15" >&5
+$as_echo "$glibcxx_cv_system_error15" >&6; }
+if test x"$glibcxx_cv_system_error15" = x"yes"; then
+
+$as_echo "#define HAVE_ECHILD 1" >>confdefs.h
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ENOSPC" >&5
+$as_echo_n "checking for ENOSPC... " >&6; }
+if test "${glibcxx_cv_system_error16+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <errno.h>
+int
+main ()
+{
+int i = ENOSPC;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ glibcxx_cv_system_error16=yes
+else
+ glibcxx_cv_system_error16=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result:
$glibcxx_cv_system_error16" >&5
+$as_echo "$glibcxx_cv_system_error16" >&6; }
+if test x"$glibcxx_cv_system_error16" = x"yes"; then
+
+$as_echo "#define HAVE_ENOSPC 1" >>confdefs.h
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for EPERM" >&5
+$as_echo_n "checking for EPERM... " >&6; }
+if test "${glibcxx_cv_system_error17+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <errno.h>
+int
+main ()
+{
+int i = EPERM;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ glibcxx_cv_system_error17=yes
+else
+ glibcxx_cv_system_error17=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result:
$glibcxx_cv_system_error17" >&5
+$as_echo "$glibcxx_cv_system_error17" >&6; }
+if test x"$glibcxx_cv_system_error17" = x"yes"; then
+
+$as_echo "#define HAVE_EPERM 1" >>confdefs.h
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ETIMEDOUT" >&5
+$as_echo_n "checking for ETIMEDOUT... " >&6; }
+if test "${glibcxx_cv_system_error18+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <errno.h>
+int
+main ()
+{
+int i = ETIMEDOUT;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ glibcxx_cv_system_error18=yes
+else
+ glibcxx_cv_system_error18=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result:
$glibcxx_cv_system_error18" >&5
+$as_echo "$glibcxx_cv_system_error18" >&6; }
+if test x"$glibcxx_cv_system_error18" = x"yes"; then
+
+$as_echo "#define HAVE_ETIMEDOUT 1" >>confdefs.h
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for EWOULDBLOCK" >&5
+$as_echo_n "checking for EWOULDBLOCK... " >&6; }
+if test "${glibcxx_cv_system_error19+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <errno.h>
+int
+main ()
+{
+int i = EWOULDBLOCK;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ glibcxx_cv_system_error19=yes
+else
+ glibcxx_cv_system_error19=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result:
$glibcxx_cv_system_error19" >&5
+$as_echo "$glibcxx_cv_system_error19" >&6; }
+if test x"$glibcxx_cv_system_error19" = x"yes"; then
+
+$as_echo "#define HAVE_EWOULDBLOCK 1" >>confdefs.h
+
+fi
+
+
+
# For the streamoff typedef.
Index: config.h.in
===================================================================
--- config.h.in (revision 178145)
+++ config.h.in (working copy)
@@ -60,6 +60,9 @@
/* Define if ECANCELED exists. */
#undef HAVE_ECANCELED
+/* Define if ECHILD exists. */
+#undef HAVE_ECHILD
+
/* Define if EIDRM exists. */
#undef HAVE_EIDRM
@@ -72,6 +75,9 @@
/* Define if ENOLINK exists. */
#undef HAVE_ENOLINK
+/* Define if ENOSPC exists. */
+#undef HAVE_ENOSPC
+
/* Define if ENOSR exists. */
#undef HAVE_ENOSR
@@ -90,15 +96,24 @@
/* Define if EOWNERDEAD exists. */
#undef HAVE_EOWNERDEAD
+/* Define if EPERM exists. */
+#undef HAVE_EPERM
+
/* Define if EPROTO exists. */
#undef HAVE_EPROTO
/* Define if ETIME exists. */
#undef HAVE_ETIME
+/* Define if ETIMEDOUT exists. */
+#undef HAVE_ETIMEDOUT
+
/* Define if ETXTBSY exists. */
#undef HAVE_ETXTBSY
+/* Define if EWOULDBLOCK exists. */
+#undef HAVE_EWOULDBLOCK
+
/* Define to 1 if you have the <execinfo.h> header file. */
#undef HAVE_EXECINFO_H
Index: config/os/mingw32/error_constants.h
===================================================================
--- config/os/mingw32/error_constants.h (revision 178145)
+++ config/os/mingw32/error_constants.h (working copy)
@@ -79,13 +79,17 @@
// network_reset = ENETRESET,
// network_unreachable = ENETUNREACH,
// no_buffer_space = ENOBUFS,
-// no_child_process = ECHILD,
+#ifdef HAVE_ECHILD
+ no_child_process = ECHILD,
+#endif
// no_link = ENOLINK,
no_lock_available = ENOLCK,
// no_message_available = ENODATA,
// no_message = ENOMSG,
// no_protocol_option = ENOPROTOOPT,
-// no_space_on_device = ENOSPC,
+#ifdef HAVE_ENOSPC
+ no_space_on_device = ENOSPC,
+#endif
// no_stream_resources = ENOSR,
no_such_device_or_address = ENXIO,
no_such_device = ENODEV,
@@ -96,12 +100,18 @@
// not_a_stream = ENOSTR,
// not_connected = ENOTCONN,
not_enough_memory = ENOMEM,
-// not_supported = ENOTSUP,
+#ifdef HAVE_ENOTSUP
+ not_supported = ENOTSUP,
+#endif
// operation_canceled = ECANCELED,
// operation_in_progress = EINPROGRESS,
-// operation_not_permitted = EPERM,
+#ifdef HAVE_EPERM
+ operation_not_permitted = EPERM,
+#endif
// operation_not_supported = EOPNOTSUPP,
-// operation_would_block = EWOULDBLOCK,
+#ifdef EWOULDBLOCK
+ operation_would_block = EWOULDBLOCK,
+#endif
// owner_dead = EOWNERDEAD,
permission_denied = EACCES,
// protocol_error = EPROTO,
@@ -113,12 +123,16 @@
// state_not_recoverable = ENOTRECOVERABLE,
// stream_timeout = ETIME,
// text_file_busy = ETXTBSY,
-// timed_out = ETIMEDOUT,
+#ifdef ETIMEDOUT
+ timed_out = ETIMEDOUT,
+#endif
too_many_files_open_in_system = ENFILE,
too_many_files_open = EMFILE,
too_many_links = EMLINK
// too_many_symbolic_link_levels = ELOOP,
- // value_too_large = EOVERFLOW,
+#ifdef HAVE_EOVERFLOW
+ value_too_large = EOVERFLOW,
+#endif
// wrong_protocol_type = EPROTOTYPE
};
Index: acinclude.m4
===================================================================
--- acinclude.m4 (revision 178145)
+++ acinclude.m4 (working copy)
@@ -1700,7 +1700,9 @@
m4_pushdef([n_syserr], [1])dnl
m4_foreach([syserr], [EOWNERDEAD, ENOTRECOVERABLE, ENOLINK, EPROTO, ENODATA,
ENOSR, ENOSTR, ETIME, EBADMSG, ECANCELED,
- EOVERFLOW, ENOTSUP, EIDRM, ETXTBSY],
+ EOVERFLOW, ENOTSUP, EIDRM, ETXTBSY,
+ ECHILD, ENOSPC, EPERM,
+ ETIMEDOUT, EWOULDBLOCK],
[m4_pushdef([SYSERR], m4_toupper(syserr))dnl
AC_MSG_CHECKING([for syserr])
AC_CACHE_VAL([glibcxx_cv_system_error[]n_syserr], [