[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
snprintf functions errors on MSVC
From: |
Bruno Haible |
Subject: |
snprintf functions errors on MSVC |
Date: |
Sat, 17 Dec 2016 23:11:06 +0100 |
User-agent: |
KMail/4.8.5 (Linux/3.8.0-44-generic; KDE/4.8.5; x86_64; ; ) |
Compiling a gnulib testdir with MSVC 14, I get these errors:
C:\cygwin64\home\bruno\testdir-posix\gllib\snprintf.c(38): error C2084:
function 'int snprintf(char *const ,const std::size_t,const char *const ,...)'
already has a body
C:\cygwin64\home\bruno\testdir-posix\gllib\vsnprintf.c(40): error C2084:
function 'int vsnprintf(char *const ,const std::size_t,const char *const
,va_list)' already has a body
The reason is that these functions are defined as inline functions in <stdio.h>
(unless _NO_CRT_STDIO_INLINE is defined):
vfprintf vprintf fprintf printf vsnprintf sprintf snprintf
vfscanf vscanf fscanf vsscanf
configure finds:
checking whether vsnprintf is declared... yes
checking whether vsnprintf is declared without a macro... yes
checking for vsnprintf... no
and as a result, sets REPLACE_VSNPRINTF=0. This fixes it:
2016-12-17 Bruno Haible <address@hidden>
Avoid redefinition errors on MSVC.
* m4/snprintf.m4 (gl_REPLACE_SNPRINTF): Set REPLACE_SNPRINTF to 1 if
the function may be defined as an inline function.
* m4/vsnprintf.m4 (gl_REPLACE_VSNPRINTF): Set REPLACE_VSNPRINTF to 1 if
the function may be defined as an inline function.
diff --git a/m4/snprintf.m4 b/m4/snprintf.m4
index f876b55..30aa25c 100644
--- a/m4/snprintf.m4
+++ b/m4/snprintf.m4
@@ -1,4 +1,4 @@
-# snprintf.m4 serial 6
+# snprintf.m4 serial 7
dnl Copyright (C) 2002-2004, 2007-2016 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -46,6 +46,14 @@ AC_DEFUN([gl_REPLACE_SNPRINTF],
AC_LIBOBJ([snprintf])
if test $ac_cv_func_snprintf = yes; then
REPLACE_SNPRINTF=1
+ else
+ AC_CHECK_DECLS_ONCE([snprintf])
+ if test $ac_cv_have_decl_snprintf = yes; then
+ dnl If the function is declared but does not appear to exist, it may be
+ dnl defined as an inline function. In order to avoid a conflict, we have
+ dnl to define rpl_snprintf, not snprintf.
+ REPLACE_SNPRINTF=1
+ fi
fi
gl_PREREQ_SNPRINTF
])
diff --git a/m4/vsnprintf.m4 b/m4/vsnprintf.m4
index e056f05..02da308 100644
--- a/m4/vsnprintf.m4
+++ b/m4/vsnprintf.m4
@@ -1,4 +1,4 @@
-# vsnprintf.m4 serial 6
+# vsnprintf.m4 serial 7
dnl Copyright (C) 2002-2004, 2007-2016 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -46,6 +46,14 @@ AC_DEFUN([gl_REPLACE_VSNPRINTF],
AC_LIBOBJ([vsnprintf])
if test $ac_cv_func_vsnprintf = yes; then
REPLACE_VSNPRINTF=1
+ else
+ AC_CHECK_DECLS_ONCE([vsnprintf])
+ if test $ac_cv_have_decl_vsnprintf = yes; then
+ dnl If the function is declared but does not appear to exist, it may be
+ dnl defined as an inline function. In order to avoid a conflict, we have
+ dnl to define rpl_vsnprintf, not vsnprintf.
+ REPLACE_VSNPRINTF=1
+ fi
fi
gl_PREREQ_VSNPRINTF
])
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- snprintf functions errors on MSVC,
Bruno Haible <=