This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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], [


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]