changeset 5224:b6d1a221c907

Provide a substitute for EOVERFLOW if <errno.h> doesn't define it.
author Bruno Haible <bruno@clisp.org>
date Thu, 09 Sep 2004 12:31:36 +0000
parents eceaa40c3485
children 42bac8a9678e
files ChangeLog m4/ChangeLog m4/eoverflow.m4 m4/vasnprintf.m4 modules/vasnprintf
diffstat 5 files changed, 79 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2004-09-09  Bruno Haible  <bruno@clisp.org>
+
+	* modules/vasnprintf (Files): Add m4/eoverflow.m4.
+
 2004-09-08  Bruno Haible  <bruno@clisp.org>
             Oskar Liljeblad  <oskar@osk.mine.nu>
 
--- a/m4/ChangeLog
+++ b/m4/ChangeLog
@@ -1,3 +1,9 @@
+2004-09-09  Bruno Haible  <bruno@clisp.org>
+
+	* eoverflow.m4: New file, taken from GNU libiconv eilseq.m4 with
+	modifications.
+	* vasnprintf.m4 (gl_FUNC_VASNPRINTF): Require gl_EOVERFLOW.
+
 2004-09-08  Bruno Haible  <bruno@clisp.org>
 
 	* stdint.m4: New file, taken from GNU clisp with modifications.
new file mode 100644
--- /dev/null
+++ b/m4/eoverflow.m4
@@ -0,0 +1,66 @@
+# eoverflow.m4 serial 1
+dnl Copyright (C) 2004 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+dnl From Bruno Haible.
+
+# The EOVERFLOW errno value ought to be defined in <errno.h>, according to
+# POSIX.  But some systems (like AIX 3) don't define it, and some systems
+# (like OSF/1) define it when _XOPEN_SOURCE_EXTENDED is defined.
+
+# Define EOVERFLOW as a C macro and as a substituted macro in such a way that
+# 1. on all systems, after inclusion of <errno.h>, EOVERFLOW is usable,
+# 2. on systems where EOVERFLOW is defined elsewhere, we use the same numeric
+#    value.
+
+AC_DEFUN([gl_EOVERFLOW],
+[
+  AC_REQUIRE([AC_PROG_CC])dnl
+
+  AC_CACHE_CHECK([for EOVERFLOW], ac_cv_decl_EOVERFLOW, [
+    AC_EGREP_CPP(yes,[
+#include <errno.h>
+#ifdef EOVERFLOW
+yes
+#endif
+      ], have_eoverflow=1)
+    if test -n "$have_eoverflow"; then
+      dnl EOVERFLOW exists in <errno.h>. Don't need to define EOVERFLOW ourselves.
+      ac_cv_decl_EOVERFLOW=yes
+    else
+      AC_EGREP_CPP(yes,[
+#define _XOPEN_SOURCE_EXTENDED 1
+#include <errno.h>
+#ifdef EOVERFLOW
+yes
+#endif
+        ], have_eoverflow=1)
+      if test -n "$have_eoverflow"; then
+        dnl EOVERFLOW exists but is hidden.
+        dnl Define it to the same value.
+        _AC_COMPUTE_INT([EOVERFLOW], ac_cv_decl_EOVERFLOW, [
+#define _XOPEN_SOURCE_EXTENDED 1
+#include <errno.h>
+/* The following two lines are a workaround against an autoconf-2.52 bug.  */
+#include <stdio.h>
+#include <stdlib.h>
+])
+      else
+        dnl EOVERFLOW isn't defined by the system. Define EOVERFLOW ourselves, but
+        dnl don't define it as EINVAL, because snprintf() callers want to
+        dnl distinguish EINVAL and EOVERFLOW.
+        ac_cv_decl_EOVERFLOW=E2BIG
+      fi
+    fi
+  ])
+  if test "$ac_cv_decl_EOVERFLOW" != yes; then
+    AC_DEFINE_UNQUOTED([EOVERFLOW], [$ac_cv_decl_EOVERFLOW],
+                       [Define as good substitute value for EOVERFLOW.])
+    EOVERFLOW="$ac_cv_decl_EOVERFLOW"
+    AC_SUBST(EOVERFLOW)
+  fi
+])
--- a/m4/vasnprintf.m4
+++ b/m4/vasnprintf.m4
@@ -1,4 +1,4 @@
-# vasnprintf.m4 serial 4
+# vasnprintf.m4 serial 5
 dnl Copyright (C) 2002-2004 Free Software Foundation, Inc.
 dnl This file is free software, distributed under the terms of the GNU
 dnl General Public License.  As a special exception to the GNU General
@@ -8,6 +8,7 @@
 
 AC_DEFUN([gl_FUNC_VASNPRINTF],
 [
+  AC_REQUIRE([gl_EOVERFLOW])
   AC_REPLACE_FUNCS(vasnprintf)
   if test $ac_cv_func_vasnprintf = no; then
     AC_LIBOBJ(printf-args)
--- a/modules/vasnprintf
+++ b/modules/vasnprintf
@@ -15,6 +15,7 @@
 m4/wint_t.m4
 m4/longlong.m4
 m4/intmax_t.m4
+m4/eoverflow.m4
 m4/vasnprintf.m4
 
 Depends-on: