0
0
mirror of https://github.com/netwide-assembler/nasm.git synced 2025-09-22 10:43:39 -04:00

Cleaner way to handle MSVC's _snprintf() underscore damage

Some versions of MSVC have snprintf() and vsnprintf() only with a
leading underscore.  Handle that a bit more cleanly.
This commit is contained in:
H. Peter Anvin
2007-09-17 13:53:14 -07:00
parent 2ced2ec370
commit b8af9aa522
6 changed files with 140 additions and 130 deletions

View File

@@ -207,67 +207,72 @@ alldeps: perlreq
# @object-ending: ".$(O)" # @object-ending: ".$(O)"
# @path-separator: "/" # @path-separator: "/"
#-- Everything below is generated by mkdep.pl - do not edit --# #-- Everything below is generated by mkdep.pl - do not edit --#
assemble.$(O): assemble.c preproc.h insns.h pptok.h regs.h regflags.c \ assemble.$(O): assemble.c preproc.h insns.h compiler.h pptok.h regs.h \
config.h version.h nasmlib.h nasm.h regvals.c insnsi.h assemble.h regflags.c config.h version.h nasmlib.h nasm.h regvals.c insnsi.h \
assemble.h
crc64.$(O): crc64.c crc64.$(O): crc64.c
disasm.$(O): disasm.c insns.h sync.h regdis.c regs.h config.h regs.c \ disasm.$(O): disasm.c insns.h sync.h compiler.h regdis.c regs.h config.h \
version.h nasm.h insnsn.c names.c insnsi.h disasm.h regs.c version.h nasm.h insnsn.c names.c insnsi.h disasm.h
eval.$(O): eval.c labels.h eval.h regs.h config.h version.h nasmlib.h nasm.h \ eval.$(O): eval.c labels.h eval.h compiler.h regs.h config.h version.h \
nasmlib.h nasm.h insnsi.h
float.$(O): float.c compiler.h regs.h config.h version.h nasm.h insnsi.h
hashtbl.$(O): hashtbl.c compiler.h regs.h config.h version.h nasmlib.h \
hashtbl.h nasm.h insnsi.h
insnsa.$(O): insnsa.c insns.h compiler.h regs.h config.h version.h nasm.h \
insnsi.h insnsi.h
float.$(O): float.c regs.h config.h version.h nasm.h insnsi.h insnsd.$(O): insnsd.c insns.h compiler.h regs.h config.h version.h nasm.h \
hashtbl.$(O): hashtbl.c regs.h config.h version.h nasmlib.h hashtbl.h nasm.h \
insnsi.h insnsi.h
insnsa.$(O): insnsa.c insns.h regs.h config.h version.h nasm.h insnsi.h
insnsd.$(O): insnsd.c insns.h regs.h config.h version.h nasm.h insnsi.h
insnsn.$(O): insnsn.c insnsn.$(O): insnsn.c
labels.$(O): labels.c regs.h config.h version.h hashtbl.h nasmlib.h nasm.h \ labels.$(O): labels.c compiler.h regs.h config.h version.h hashtbl.h \
insnsi.h nasmlib.h nasm.h insnsi.h
listing.$(O): listing.c regs.h config.h version.h nasmlib.h nasm.h insnsi.h \ listing.$(O): listing.c compiler.h regs.h config.h version.h nasmlib.h \
listing.h nasm.h insnsi.h listing.h
macros.$(O): macros.c macros.$(O): macros.c
names.$(O): names.c regs.c insnsn.c names.$(O): names.c regs.c insnsn.c
nasm.$(O): nasm.c labels.h preproc.h insns.h parser.h eval.h pptok.h regs.h \ nasm.$(O): nasm.c preproc.h insns.h eval.h config.h nasmlib.h nasm.h \
outform.h config.h version.h nasmlib.h nasm.h stdscan.h assemble.h insnsi.h \ stdscan.h assemble.h insnsi.h labels.h parser.h compiler.h regs.h pptok.h \
listing.h outform.h version.h listing.h
nasmlib.$(O): nasmlib.c insns.h regs.h config.h version.h nasmlib.h nasm.h \ nasmlib.$(O): nasmlib.c insns.h config.h nasmlib.h nasm.h insnsi.h \
insnsi.h compiler.h regs.h version.h
ndisasm.$(O): ndisasm.c insns.h sync.h regs.h config.h version.h nasmlib.h \ ndisasm.$(O): ndisasm.c insns.h config.h nasmlib.h nasm.h insnsi.h disasm.h \
nasm.h insnsi.h disasm.h sync.h compiler.h regs.h version.h
outform.$(O): outform.c regs.h config.h outform.h version.h nasm.h insnsi.h outform.$(O): outform.c config.h nasm.h insnsi.h compiler.h regs.h outform.h \
output/outaout.$(O): output/outaout.c regs.h outform.h config.h version.h \ version.h
nasmlib.h nasm.h stdscan.h insnsi.h output/outaout.$(O): output/outaout.c config.h nasmlib.h nasm.h stdscan.h \
output/outas86.$(O): output/outas86.c regs.h outform.h config.h version.h \ insnsi.h compiler.h regs.h outform.h version.h
nasmlib.h nasm.h insnsi.h output/outas86.$(O): output/outas86.c config.h nasmlib.h nasm.h insnsi.h \
output/outbin.$(O): output/outbin.c labels.h eval.h regs.h outform.h \ compiler.h regs.h outform.h version.h
config.h version.h nasmlib.h nasm.h stdscan.h insnsi.h output/outbin.$(O): output/outbin.c eval.h config.h nasmlib.h nasm.h \
output/outcoff.$(O): output/outcoff.c regs.h outform.h config.h version.h \ stdscan.h insnsi.h labels.h compiler.h regs.h outform.h version.h
nasmlib.h nasm.h insnsi.h output/outcoff.$(O): output/outcoff.c config.h nasmlib.h nasm.h insnsi.h \
output/outdbg.$(O): output/outdbg.c regs.h outform.h config.h version.h \ compiler.h regs.h outform.h version.h
nasmlib.h nasm.h insnsi.h output/outdbg.$(O): output/outdbg.c config.h nasmlib.h nasm.h insnsi.h \
output/outelf32.$(O): output/outelf32.c regs.h outform.h config.h version.h \ compiler.h regs.h outform.h version.h
nasmlib.h nasm.h stdscan.h insnsi.h output/outelf32.$(O): output/outelf32.c config.h nasmlib.h nasm.h stdscan.h \
output/outelf64.$(O): output/outelf64.c regs.h outform.h config.h version.h \ insnsi.h compiler.h regs.h outform.h version.h
nasmlib.h nasm.h stdscan.h insnsi.h output/outelf64.$(O): output/outelf64.c config.h nasmlib.h nasm.h stdscan.h \
output/outieee.$(O): output/outieee.c regs.h outform.h config.h version.h \ insnsi.h compiler.h regs.h outform.h version.h
nasmlib.h nasm.h insnsi.h output/outieee.$(O): output/outieee.c config.h nasmlib.h nasm.h insnsi.h \
output/outmacho.$(O): output/outmacho.c compiler.h regs.h outform.h config.h \ compiler.h regs.h outform.h version.h
version.h nasmlib.h nasm.h insnsi.h output/outmacho.$(O): output/outmacho.c config.h nasmlib.h nasm.h insnsi.h \
output/outobj.$(O): output/outobj.c regs.h outform.h config.h version.h \ compiler.h regs.h outform.h version.h
nasmlib.h nasm.h stdscan.h insnsi.h output/outobj.$(O): output/outobj.c config.h nasmlib.h nasm.h stdscan.h \
output/outrdf.$(O): output/outrdf.c regs.h outform.h config.h version.h \ insnsi.h compiler.h regs.h outform.h version.h
nasmlib.h nasm.h insnsi.h output/outrdf.$(O): output/outrdf.c config.h nasmlib.h nasm.h insnsi.h \
output/outrdf2.$(O): output/outrdf2.c rdoff/rdoff.h regs.h outform.h \ compiler.h regs.h outform.h version.h
config.h version.h nasmlib.h nasm.h insnsi.h output/outrdf2.$(O): output/outrdf2.c config.h nasmlib.h nasm.h insnsi.h \
parser.$(O): parser.c insns.h parser.h float.h regs.h regflags.c config.h \ rdoff/rdoff.h compiler.h regs.h outform.h version.h
version.h nasmlib.h nasm.h stdscan.h insnsi.h parser.$(O): parser.c insns.h regflags.c config.h nasmlib.h nasm.h stdscan.h \
pptok.$(O): pptok.c preproc.h pptok.h nasmlib.h insnsi.h parser.h float.h compiler.h regs.h version.h
preproc.$(O): preproc.c preproc.h macros.c pptok.h regs.h config.h version.h \ pptok.$(O): pptok.c preproc.h config.h nasmlib.h compiler.h pptok.h
hashtbl.h nasmlib.h nasm.h insnsi.h preproc.$(O): preproc.c preproc.h config.h hashtbl.h nasmlib.h nasm.h \
insnsi.h macros.c compiler.h pptok.h regs.h version.h
regdis.$(O): regdis.c regdis.$(O): regdis.c
regflags.$(O): regflags.c regflags.$(O): regflags.c
regs.$(O): regs.c regs.$(O): regs.c
regvals.$(O): regvals.c regvals.$(O): regvals.c
stdscan.$(O): stdscan.c insns.h regs.h config.h version.h nasmlib.h nasm.h \ stdscan.$(O): stdscan.c insns.h config.h nasmlib.h nasm.h stdscan.h insnsi.h \
stdscan.h insnsi.h compiler.h regs.h version.h
sync.$(O): sync.c sync.h sync.$(O): sync.c sync.h
tokhash.$(O): tokhash.c insns.h regs.h config.h version.h nasm.h insnsi.h tokhash.$(O): tokhash.c insns.h config.h nasm.h insnsi.h compiler.h regs.h \
version.h

View File

@@ -15,7 +15,7 @@ mandir = $(prefix)/man
CC = cl CC = cl
CFLAGS = /O2 /Ox /Oy /W2 CFLAGS = /O2 /Ox /Oy /W2
BUILD_CFLAGS = $(CFLAGS) /I$(srcdir)/inttypes BUILD_CFLAGS = $(CFLAGS) /I$(srcdir)/inttypes
INTERNAL_CFLAGS = /I$(srcdir) /I. /Dsnprintf=sprintf_s INTERNAL_CFLAGS = /I$(srcdir) /I. /DHAVE__SNPRINTF /DHAVE__VSNPRINTF
ALL_CFLAGS = $(BUILD_CFLAGS) $(INTERNAL_CFLAGS) ALL_CFLAGS = $(BUILD_CFLAGS) $(INTERNAL_CFLAGS)
LDFLAGS = LDFLAGS =
LIBS = LIBS =
@@ -165,67 +165,71 @@ everything: all doc rdf
# @object-ending: ".$(O)" # @object-ending: ".$(O)"
# @path-separator: "/" # @path-separator: "/"
#-- Everything below is generated by mkdep.pl - do not edit --# #-- Everything below is generated by mkdep.pl - do not edit --#
assemble.$(O): assemble.c preproc.h insns.h pptok.h regs.h regflags.c \ assemble.$(O): assemble.c preproc.h insns.h regflags.c config.h nasmlib.h \
config.h version.h nasmlib.h nasm.h regvals.c insnsi.h assemble.h nasm.h assemble.h insnsi.h compiler.h pptok.h regs.h version.h regvals.c
crc64.$(O): crc64.c crc64.$(O): crc64.c
disasm.$(O): disasm.c insns.h sync.h regdis.c regs.h config.h regs.c \ disasm.$(O): disasm.c insns.h regdis.c config.h regs.c nasm.h names.c \
version.h nasm.h insnsn.c names.c insnsi.h disasm.h insnsi.h disasm.h sync.h compiler.h regs.h version.h insnsn.c
eval.$(O): eval.c labels.h eval.h regs.h config.h version.h nasmlib.h nasm.h \ eval.$(O): eval.c eval.h config.h nasmlib.h nasm.h insnsi.h labels.h \
insnsi.h compiler.h regs.h version.h
float.$(O): float.c regs.h config.h version.h nasm.h insnsi.h float.$(O): float.c config.h nasm.h insnsi.h compiler.h regs.h version.h
hashtbl.$(O): hashtbl.c regs.h config.h version.h nasmlib.h hashtbl.h nasm.h \ hashtbl.$(O): hashtbl.c config.h nasmlib.h hashtbl.h nasm.h insnsi.h \
insnsi.h compiler.h regs.h version.h
insnsa.$(O): insnsa.c insns.h regs.h config.h version.h nasm.h insnsi.h insnsa.$(O): insnsa.c insns.h config.h nasm.h insnsi.h compiler.h regs.h \
insnsd.$(O): insnsd.c insns.h regs.h config.h version.h nasm.h insnsi.h version.h
insnsd.$(O): insnsd.c insns.h config.h nasm.h insnsi.h compiler.h regs.h \
version.h
insnsn.$(O): insnsn.c insnsn.$(O): insnsn.c
labels.$(O): labels.c regs.h config.h version.h hashtbl.h nasmlib.h nasm.h \ labels.$(O): labels.c config.h hashtbl.h nasmlib.h nasm.h insnsi.h \
insnsi.h compiler.h regs.h version.h
listing.$(O): listing.c regs.h config.h version.h nasmlib.h nasm.h insnsi.h \ listing.$(O): listing.c config.h nasmlib.h nasm.h insnsi.h compiler.h regs.h \
listing.h version.h listing.h
macros.$(O): macros.c macros.$(O): macros.c
names.$(O): names.c regs.c insnsn.c names.$(O): names.c regs.c insnsn.c
nasm.$(O): nasm.c labels.h preproc.h insns.h parser.h eval.h pptok.h regs.h \ nasm.$(O): nasm.c preproc.h insns.h eval.h config.h nasmlib.h nasm.h \
outform.h config.h version.h nasmlib.h nasm.h stdscan.h assemble.h insnsi.h \ stdscan.h assemble.h insnsi.h labels.h parser.h compiler.h pptok.h regs.h \
listing.h outform.h version.h listing.h
nasmlib.$(O): nasmlib.c insns.h regs.h config.h version.h nasmlib.h nasm.h \ nasmlib.$(O): nasmlib.c insns.h config.h nasmlib.h nasm.h insnsi.h \
insnsi.h compiler.h regs.h version.h
ndisasm.$(O): ndisasm.c insns.h sync.h regs.h config.h version.h nasmlib.h \ ndisasm.$(O): ndisasm.c insns.h config.h nasmlib.h nasm.h insnsi.h disasm.h \
nasm.h insnsi.h disasm.h sync.h compiler.h regs.h version.h
outform.$(O): outform.c regs.h config.h outform.h version.h nasm.h insnsi.h outform.$(O): outform.c config.h nasm.h insnsi.h compiler.h regs.h outform.h \
output/outaout.$(O): output/outaout.c regs.h outform.h config.h version.h \ version.h
nasmlib.h nasm.h stdscan.h insnsi.h output/outaout.$(O): output/outaout.c config.h nasmlib.h nasm.h stdscan.h \
output/outas86.$(O): output/outas86.c regs.h outform.h config.h version.h \ insnsi.h compiler.h regs.h outform.h version.h
nasmlib.h nasm.h insnsi.h output/outas86.$(O): output/outas86.c config.h nasmlib.h nasm.h insnsi.h \
output/outbin.$(O): output/outbin.c labels.h eval.h regs.h outform.h \ compiler.h regs.h outform.h version.h
config.h version.h nasmlib.h nasm.h stdscan.h insnsi.h output/outbin.$(O): output/outbin.c eval.h config.h nasmlib.h nasm.h \
output/outcoff.$(O): output/outcoff.c regs.h outform.h config.h version.h \ stdscan.h insnsi.h labels.h compiler.h regs.h outform.h version.h
nasmlib.h nasm.h insnsi.h output/outcoff.$(O): output/outcoff.c config.h nasmlib.h nasm.h insnsi.h \
output/outdbg.$(O): output/outdbg.c regs.h outform.h config.h version.h \ compiler.h regs.h outform.h version.h
nasmlib.h nasm.h insnsi.h output/outdbg.$(O): output/outdbg.c config.h nasmlib.h nasm.h insnsi.h \
output/outelf32.$(O): output/outelf32.c regs.h outform.h config.h version.h \ compiler.h regs.h outform.h version.h
nasmlib.h nasm.h stdscan.h insnsi.h output/outelf32.$(O): output/outelf32.c config.h nasmlib.h nasm.h stdscan.h \
output/outelf64.$(O): output/outelf64.c regs.h outform.h config.h version.h \ insnsi.h compiler.h regs.h outform.h version.h
nasmlib.h nasm.h stdscan.h insnsi.h output/outelf64.$(O): output/outelf64.c config.h nasmlib.h nasm.h stdscan.h \
output/outieee.$(O): output/outieee.c regs.h outform.h config.h version.h \ insnsi.h compiler.h regs.h outform.h version.h
nasmlib.h nasm.h insnsi.h output/outieee.$(O): output/outieee.c config.h nasmlib.h nasm.h insnsi.h \
output/outmacho.$(O): output/outmacho.c compiler.h regs.h outform.h config.h \ compiler.h regs.h outform.h version.h
version.h nasmlib.h nasm.h insnsi.h output/outmacho.$(O): output/outmacho.c config.h nasmlib.h nasm.h insnsi.h \
output/outobj.$(O): output/outobj.c regs.h outform.h config.h version.h \ compiler.h regs.h outform.h version.h
nasmlib.h nasm.h stdscan.h insnsi.h output/outobj.$(O): output/outobj.c config.h nasmlib.h nasm.h stdscan.h \
output/outrdf.$(O): output/outrdf.c regs.h outform.h config.h version.h \ insnsi.h compiler.h regs.h outform.h version.h
nasmlib.h nasm.h insnsi.h output/outrdf.$(O): output/outrdf.c config.h nasmlib.h nasm.h insnsi.h \
output/outrdf2.$(O): output/outrdf2.c rdoff/rdoff.h regs.h outform.h \ compiler.h regs.h outform.h version.h
config.h version.h nasmlib.h nasm.h insnsi.h output/outrdf2.$(O): output/outrdf2.c config.h nasmlib.h nasm.h insnsi.h \
parser.$(O): parser.c insns.h parser.h float.h regs.h regflags.c config.h \ rdoff/rdoff.h compiler.h regs.h outform.h version.h
version.h nasmlib.h nasm.h stdscan.h insnsi.h parser.$(O): parser.c insns.h regflags.c config.h nasmlib.h nasm.h stdscan.h \
pptok.$(O): pptok.c preproc.h pptok.h nasmlib.h insnsi.h parser.h float.h compiler.h regs.h version.h
preproc.$(O): preproc.c preproc.h macros.c pptok.h regs.h config.h version.h \ pptok.$(O): pptok.c preproc.h config.h nasmlib.h compiler.h pptok.h
hashtbl.h nasmlib.h nasm.h insnsi.h preproc.$(O): preproc.c preproc.h config.h hashtbl.h nasmlib.h nasm.h \
insnsi.h macros.c compiler.h pptok.h regs.h version.h
regdis.$(O): regdis.c regdis.$(O): regdis.c
regflags.$(O): regflags.c regflags.$(O): regflags.c
regs.$(O): regs.c regs.$(O): regs.c
regvals.$(O): regvals.c regvals.$(O): regvals.c
stdscan.$(O): stdscan.c insns.h regs.h config.h version.h nasmlib.h nasm.h \ stdscan.$(O): stdscan.c insns.h config.h nasmlib.h nasm.h stdscan.h insnsi.h \
stdscan.h insnsi.h compiler.h regs.h version.h
sync.$(O): sync.c sync.h sync.$(O): sync.c sync.h
tokhash.$(O): tokhash.c insns.h regs.h config.h version.h nasm.h insnsi.h tokhash.$(O): tokhash.c insns.h config.h nasm.h insnsi.h compiler.h regs.h \
version.h

View File

@@ -37,4 +37,14 @@
# define _unused # define _unused
#endif #endif
/* Some versions of MSVC have these only with underscores in front */
#if !defined(HAVE_SNPRINTF) && defined(HAVE__SNPRINTF)
# define snprintf _snprintf
#endif
#if !defined(HAVE_VSNPRINTF) && defined(HAVE__VSNPRINTF)
# define vsnprintf _vsnprintf
#endif
#endif /* COMPILER_H */ #endif /* COMPILER_H */

View File

@@ -87,28 +87,22 @@ AC_C_CONST
AC_TYPE_SIZE_T AC_TYPE_SIZE_T
dnl Checks for library functions. dnl Checks for library functions.
AC_FUNC_VPRINTF
if test $ac_cv_func_vprintf = no; then
AC_MSG_ERROR([NASM requires ANSI C (specifically, "vprintf" and friends)])
fi
AC_CHECK_FUNCS(strcspn) AC_CHECK_FUNCS(strcspn, ,
if test $ac_cv_func_strcspn = no; then AC_MSG_ERROR([NASM requires ANSI C (specifically, "strcspn")]))
AC_MSG_ERROR([NASM requires ANSI C (specifically, "strcspn")])
fi
AC_CHECK_FUNCS(strspn) AC_CHECK_FUNCS(strspn, ,
if test $ac_cv_func_strspn = no; then AC_MSG_ERROR([NASM requires ANSI C (specifically, "strspn")]))
AC_MSG_ERROR([NASM requires ANSI C (specifically, "strspn")])
fi
AC_CHECK_FUNCS(snprintf) missing=true
if test $ac_cv_func_snprintf = no; then AC_CHECK_FUNCS([snprintf _snprintf], missing=false)
if $missing; then
AC_MSG_ERROR([NASM requires ISO C99 (specifically, "snprintf")]) AC_MSG_ERROR([NASM requires ISO C99 (specifically, "snprintf")])
fi fi
AC_CHECK_FUNCS(vsnprintf) missing=true
if test $ac_cv_func_snprintf = no; then AC_CHECK_FUNCS([vsnprintf _vsnprintf], missing=false)
if $missing; then
AC_MSG_ERROR([NASM requires ISO C99 (specifically, "vsnprintf")]) AC_MSG_ERROR([NASM requires ISO C99 (specifically, "vsnprintf")])
fi fi

6
nasm.h
View File

@@ -14,11 +14,7 @@
#include <stdio.h> #include <stdio.h>
#include <inttypes.h> #include <inttypes.h>
#include "version.h" /* generated NASM version macros */ #include "version.h" /* generated NASM version macros */
#include "compiler.h"
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "insnsi.h" /* For enum opcode */ #include "insnsi.h" /* For enum opcode */
#ifndef NULL #ifndef NULL

View File

@@ -11,6 +11,7 @@
#include <inttypes.h> #include <inttypes.h>
#include <stdio.h> #include <stdio.h>
#include "compiler.h"
/* /*
* If this is defined, the wrappers around malloc et al will * If this is defined, the wrappers around malloc et al will