Fixed varargs support on Solaris.

git-svn-id: https://svn.code.sf.net/p/flaim/code/trunk@425 0109f412-320b-0410-ab79-c3e0c5ffbbe6
This commit is contained in:
ahodgkinson
2006-05-19 17:31:24 +00:00
parent 3f0212ceab
commit 5794442528
4 changed files with 34 additions and 2 deletions

View File

@@ -190,6 +190,8 @@
typedef signed char FLMINT8;
#if defined( FLM_GNUC)
typedef __builtin_va_list f_va_list;
#elif defined( FLM_SOLARIS)
typedef void * f_va_list;
#else
typedef char * f_va_list;
#endif
@@ -368,15 +370,27 @@
(*(type *)(((ap) += f_argsize(type)) - (f_argsize(type))))
#define f_va_end(ap) ((void)0)
#elif defined( FLM_SOLARIS)
void * f_va_arg_next(
f_va_list * pList);
#define f_va_start( list, name) \
((void)((list) = (f_va_list)&__builtin_va_alist))
#define f_va_arg( list, type) \
(*((type *)f_va_arg_next( &list)))
#define f_va_end( list) \
(void)(list)
#else
#define f_va_start( list, name) \
(list = (f_va_list)&(name) + f_alignedsize( name))
((list) = (f_va_list)&(name) + f_alignedsize( name))
#define f_va_arg( list, type) \
(*(type *)((list += f_alignedsize( type)) - f_alignedsize( type)))
#define f_va_end( list) \
(list = (f_va_list)0)
((list) = (f_va_list)0)
#endif
// flmnovtbl keeps MS compilers from generating vtables for interfaces

View File

@@ -100,6 +100,9 @@ RCODE FLMAPI ftkStartup( void)
}
f_memoryInit();
f_assert( sizeof( f_va_list) == sizeof( va_list));
if( RC_BAD( rc = f_initCharMappingTables()))
{

View File

@@ -1579,6 +1579,17 @@ FLMINT32 posix_atomic_xchg_32(
return( i32RetVal);
}
/**********************************************************************
Desc:
**********************************************************************/
#if defined( FLM_SOLARIS) && !defined( FLM_GNUC)
void * f_va_arg_next(
f_va_list * pList)
{
return( __builtin_va_arg_incr( *pList, NULL));
}
#endif
#endif // FLM_UNIX
#if defined( FLM_WATCOM_NLM)

View File

@@ -35,6 +35,7 @@ int main( void)
IF_BlockMgr * pBlockMgr = NULL;
IF_BTree * pBTree = NULL;
FLMUINT32 ui32RootBlkId;
char szTmpBuf[ 128];
if( RC_BAD( rc = ftkStartup()))
{
@@ -76,6 +77,9 @@ int main( void)
pBTree->btDeleteTree();
pBTree->Release();
f_sprintf( szTmpBuf, "Hello, World! (You're number %u)\n", 1);
f_printf( szTmpBuf);
Exit: