changeset 16926:9e800db3ffe6

nonblocking: Avoid compilation error on mingw64. * m4/stdio_h.m4 (gl_STDIO_H): Invoke gl_MODULE_INDICATOR for scanf, fscanf. * modules/vscanf (configure.ac): Invoke gl_MODULE_INDICATOR. * modules/vfscanf (configure.ac): Likewise. * lib/stdio-read.c (scanf, fscanf, vscanf, vfscanf): Enable function definition only if stdio.h has prepared it. Reported by Daniel P. Berrange <berrange@redhat.com>.
author Bruno Haible <bruno@clisp.org>
date Thu, 21 Jun 2012 12:39:37 +0200
parents eb8ffcf6fd24
children 849fe7deed28
files ChangeLog lib/stdio-read.c m4/stdio_h.m4 modules/vfscanf modules/vscanf
diffstat 5 files changed, 32 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2012-06-21  Bruno Haible  <bruno@clisp.org>
+
+	nonblocking: Avoid compilation error on mingw64.
+	* m4/stdio_h.m4 (gl_STDIO_H): Invoke gl_MODULE_INDICATOR for scanf,
+	fscanf.
+	* modules/vscanf (configure.ac): Invoke gl_MODULE_INDICATOR.
+	* modules/vfscanf (configure.ac): Likewise.
+	* lib/stdio-read.c (scanf, fscanf, vscanf, vfscanf): Enable function
+	definition only if stdio.h has prepared it.
+	Reported by Daniel P. Berrange <berrange@redhat.com>.
+
 2012-06-20  Bernd Jendrissek  <bernd.jendrissek@gmail.com>  (tiny change)
 
 	gnulib-tool: Use readlink if it is available.
--- a/lib/stdio-read.c
+++ b/lib/stdio-read.c
@@ -72,6 +72,9 @@
       return ret;                                                             \
     }
 
+/* Enable this function definition only of gnulib's <stdio.h> has prepared it.
+   Otherwise we get a function definition conflict with mingw64's <stdio.h>.  */
+#  if GNULIB_SCANF
 int
 scanf (const char *format, ...)
 {
@@ -84,7 +87,11 @@
 
   return retval;
 }
+#  endif
 
+/* Enable this function definition only of gnulib's <stdio.h> has prepared it.
+   Otherwise we get a function definition conflict with mingw64's <stdio.h>.  */
+#  if GNULIB_FSCANF
 int
 fscanf (FILE *stream, const char *format, ...)
 {
@@ -97,19 +104,28 @@
 
   return retval;
 }
+#  endif
 
+/* Enable this function definition only of gnulib's <stdio.h> has prepared it.
+   Otherwise we get a function definition conflict with mingw64's <stdio.h>.  */
+#  if GNULIB_VSCANF
 int
 vscanf (const char *format, va_list args)
 {
   return vfscanf (stdin, format, args);
 }
+#  endif
 
+/* Enable this function definition only of gnulib's <stdio.h> has prepared it.
+   Otherwise we get a function definition conflict with mingw64's <stdio.h>.  */
+#  if GNULIB_VFSCANF
 int
 vfscanf (FILE *stream, const char *format, va_list args)
 #undef vfscanf
 {
   CALL_WITH_ERRNO_FIX (int, vfscanf (stream, format, args), ret == EOF)
 }
+#  endif
 
 int
 getchar (void)
--- a/m4/stdio_h.m4
+++ b/m4/stdio_h.m4
@@ -1,4 +1,4 @@
-# stdio_h.m4 serial 41
+# stdio_h.m4 serial 42
 dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -13,7 +13,9 @@
   dnl No need to create extra modules for these functions. Everyone who uses
   dnl <stdio.h> likely needs them.
   GNULIB_FSCANF=1
+  gl_MODULE_INDICATOR([fscanf])
   GNULIB_SCANF=1
+  gl_MODULE_INDICATOR([scanf])
   GNULIB_FGETC=1
   GNULIB_GETC=1
   GNULIB_GETCHAR=1
--- a/modules/vfscanf
+++ b/modules/vfscanf
@@ -8,6 +8,7 @@
 
 configure.ac:
 gl_STDIO_MODULE_INDICATOR([vfscanf])
+gl_MODULE_INDICATOR([vfscanf])
 
 Makefile.am:
 
--- a/modules/vscanf
+++ b/modules/vscanf
@@ -8,6 +8,7 @@
 
 configure.ac:
 gl_STDIO_MODULE_INDICATOR([vscanf])
+gl_MODULE_INDICATOR([vscanf])
 
 Makefile.am: