Patchwork [libstdc++] : Add some missing errno-constants for mingw-targets

login
register
mail settings
Submitter Kai Tietz
Date Aug. 28, 2011, 9:36 p.m.
Message ID <CAEwic4amvt3TNCaiyL5iJsN2U2tdaW5JKfc4wn97sLPDhDUpJA@mail.gmail.com>
Download mbox | patch
Permalink /patch/111947/
State New
Headers show

Comments

Kai Tietz - Aug. 28, 2011, 9:36 p.m.
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
Paolo Carlini - Aug. 28, 2011, 10 p.m.
Hi,
>>> 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.
Good.
> 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?
Ok with the patch tweaked to prefer uglified _GLIBCXX_HAVE_* names in 
error_constants.h. Let's just be consistent with the generic 
error_constants.h about this normal library policy too.

Paolo.

PS: please don't post regenerated files as part of the patch, are simply 
a distraction.
Pedro Alves - Aug. 29, 2011, 8:54 a.m.
On Sunday 28 August 2011 22:36:28, Kai Tietz wrote:
> +#ifdef HAVE_ENOSPC
> +      no_space_on_device =                     ENOSPC,
> +#endif

>        no_such_device =                                 ENODEV,
> @@ -96,12 +100,18 @@

> -//    not_supported =                          ENOTSUP,
> +#ifdef HAVE_ENOTSUP
> +      not_supported =                          ENOTSUP,
> +#endif

> -//    operation_not_permitted =                EPERM,
> +#ifdef HAVE_EPERM
> +      operation_not_permitted =                EPERM,
> +#endif

These now have the HAVE_ prefix.

> -//    operation_would_block =                  EWOULDBLOCK,
> +#ifdef EWOULDBLOCK
> +      operation_would_block =                  EWOULDBLOCK,
> +#endif

>  //    text_file_busy =                                 ETXTBSY,
> -//    timed_out =                              ETIMEDOUT,
> +#ifdef ETIMEDOUT
> +      timed_out =                              ETIMEDOUT,
> +#endif

While these two didn't get the HAVE_... prefix.  Was that intended?
Paolo Carlini - Aug. 29, 2011, 9:25 a.m.
On 08/29/2011 10:54 AM, Pedro Alves wrote:
> While these two didn't get the HAVE_... prefix. Was that intended? 
To be clear: make sure before committing that *all* use _GLIBCXX_HAVE_*

Paolo.
Kai Tietz - Aug. 29, 2011, 7:58 p.m.
2011/8/29 Paolo Carlini <paolo.carlini@oracle.com>:
> On 08/29/2011 10:54 AM, Pedro Alves wrote:
>>
>> While these two didn't get the HAVE_... prefix. Was that intended?
>
> To be clear: make sure before committing that *all* use _GLIBCXX_HAVE_*
>
> Paolo.

Done and added missing _GLIBCXX_HAVE_ for all checks.
Committed at revision 178257.

Thanks,
Kai
Paolo Carlini - Aug. 29, 2011, 8:47 p.m.
On 08/29/2011 09:58 PM, Kai Tietz wrote:
> Done and added missing _GLIBCXX_HAVE_ for all checks. Committed at 
> revision 178257.
Something seems wrong here, in terms of commas:

       too_many_links =                 EMLINK
//    too_many_symbolic_link_levels =  ELOOP,
#ifdef _GLIBCXX_HAVE_EOVERFLOW
       value_too_large =                EOVERFLOW,
#endif
//    wrong_protocol_type =            EPROTOTYPE
    };


Looks like, if _GLIBCXX_HAVE_EOVERFLOW is actually defined, a comma is 
missing before value_too_large, and then there is an excess comma after 
the latter. Please double check the whole file for this kind of issue.

Paolo.
Paolo Carlini - Aug. 29, 2011, 8:50 p.m.
.. also, you forgot to add 2011 to the Copyright years.

Paolo.
Robert Dewar - Aug. 29, 2011, 9:11 p.m.
On 8/29/2011 4:50 PM, Paolo Carlini wrote:
> .. also, you forgot to add 2011 to the Copyright years.
>
> Paolo.

In the GNAT development environment we have an SVN style
checking filter, and this is one of the things it checks
for so we prevent any checkin missing the current year in
the copyright notice.

Patch

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