From 7ae98cee2acce9845b2645b151e72c419cea6e6f Mon Sep 17 00:00:00 2001 From: Bart Oldeman Date: Wed, 7 Apr 2004 16:13:23 +0000 Subject: [PATCH] Introduce VA_CDECL: only Turbo C 2.01 needs an explicit cdecl for printf, all other compilers can use it with pascal or "register" calling conventions. Saves ~50 bytes for the init code. git-svn-id: https://svn.code.sf.net/p/freedos/svn/kernel/trunk@845 6ac86273-5f31-0410-b378-82cca8765d1b --- hdr/portab.h | 8 ++++++++ kernel/init-mod.h | 4 ++-- kernel/prf.c | 6 +++--- kernel/proto.h | 4 ++-- sys/fdkrncfg.c | 4 ++-- sys/sys.c | 4 ++-- 6 files changed, 19 insertions(+), 11 deletions(-) diff --git a/hdr/portab.h b/hdr/portab.h index 733b0ba..3dc25af 100644 --- a/hdr/portab.h +++ b/hdr/portab.h @@ -63,6 +63,12 @@ static char *portab_hRcsId = #define I86 #define CDECL cdecl +#if __TURBOC__ > 0x202 +/* printf callers do the right thing for tc++ 1.01 but not tc 2.01 */ +#define VA_CDECL +#else +#define VA_CDECL cdecl +#endif #define PASCAL pascal void __int__(int); @@ -73,6 +79,7 @@ void __int__(int); #pragma warning(disable: 4761) /* "integral size mismatch in argument; conversion supplied" */ #define CDECL _cdecl +#define VA_CDECL #define PASCAL pascal #define __int__(intno) asm int intno; #define _SS SS() @@ -88,6 +95,7 @@ static unsigned short __inline SS(void) #define asm __asm #define far __far #define CDECL __cdecl +#define VA_CDECL #define PASCAL pascal #define _SS SS() unsigned short SS(void); diff --git a/kernel/init-mod.h b/kernel/init-mod.h index 1acb9da..e77bca6 100644 --- a/kernel/init-mod.h +++ b/kernel/init-mod.h @@ -179,8 +179,8 @@ BOOL init_device(struct dhdr FAR * dhp, char * cmdLine, VOID init_fatal(BYTE * err_msg); /* prf.c */ -WORD CDECL init_printf(CONST BYTE * fmt, ...); -WORD CDECL init_sprintf(BYTE * buff, CONST BYTE * fmt, ...); +int VA_CDECL init_printf(const char * fmt, ...); +int VA_CDECL init_sprintf(char * buff, const char * fmt, ...); /* procsupt.asm */ VOID ASMCFUNC FAR got_cbreak(void); diff --git a/kernel/prf.c b/kernel/prf.c index 0f849cb..d882ca4 100644 --- a/kernel/prf.c +++ b/kernel/prf.c @@ -144,7 +144,7 @@ static BYTE *charp = 0; STATIC VOID handle_char(COUNT); STATIC void ltob(LONG, BYTE *, COUNT); STATIC void do_printf(const char *, REG va_list); -int CDECL printf(CONST BYTE * fmt, ...); +int VA_CDECL printf(const char * fmt, ...); /* special handler to switch between sprintf and printf */ STATIC VOID handle_char(COUNT c) @@ -196,7 +196,7 @@ STATIC void ltob(LONG n, BYTE * s, COUNT base) #define LONGARG 4 /* printf -- short version of printf to conserve space */ -int CDECL printf(CONST BYTE * fmt, ...) +int VA_CDECL printf(const char *fmt, ...) { va_list arg; va_start(arg, fmt); @@ -205,7 +205,7 @@ int CDECL printf(CONST BYTE * fmt, ...) return 0; } -int CDECL sprintf(BYTE * buff, CONST BYTE * fmt, ...) +int VA_CDECL sprintf(char * buff, const char * fmt, ...) { va_list arg; diff --git a/kernel/proto.h b/kernel/proto.h index 44472e1..c6e8c66 100644 --- a/kernel/proto.h +++ b/kernel/proto.h @@ -281,8 +281,8 @@ UWORD ASMCFUNC syscall_MUX14(DIRECT_IREGS); /* prf.c */ #ifdef DEBUG -int CDECL printf(CONST BYTE * fmt, ...); -int CDECL sprintf(BYTE * buff, CONST BYTE * fmt, ...); +int VA_CDECL printf(const char * fmt, ...); +int VA_CDECL sprintf(char * buff, const char * fmt, ...); #endif VOID hexd(char *title, VOID FAR * p, COUNT numBytes); void put_unsigned(unsigned n, int base, int width); diff --git a/sys/fdkrncfg.c b/sys/fdkrncfg.c index 28b6c8a..941e196 100644 --- a/sys/fdkrncfg.c +++ b/sys/fdkrncfg.c @@ -24,8 +24,8 @@ char KERNEL[] = "KERNEL.SYS"; #include #include "portab.h" -extern int CDECL printf(CONST BYTE * fmt, ...); -extern int CDECL sprintf(BYTE * buff, CONST BYTE * fmt, ...); +extern int VA_CDECL printf(const char * fmt, ...); +extern int VA_CDECL sprintf(char * buff, const char * fmt, ...); #ifdef __WATCOMC__ unsigned _dos_close(int handle); diff --git a/sys/sys.c b/sys/sys.c index 37e4f65..a145f27 100644 --- a/sys/sys.c +++ b/sys/sys.c @@ -59,8 +59,8 @@ * #including to make executable MUCH smaller * using [s]printf from prf.c! */ -extern WORD CDECL printf(CONST BYTE * fmt, ...); -extern WORD CDECL sprintf(BYTE * buff, CONST BYTE * fmt, ...); +extern int VA_CDECL printf(const char * fmt, ...); +extern int VA_CDECL sprintf(char * buff, const char * fmt, ...); #include "fat12com.h" #include "fat16com.h"