diff --git a/ftk/src/ftk.h b/ftk/src/ftk.h index ea18328..6a1d9c6 100644 --- a/ftk/src/ftk.h +++ b/ftk/src/ftk.h @@ -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 diff --git a/ftk/src/ftkmisc.cpp b/ftk/src/ftkmisc.cpp index fab769b..fc38267 100644 --- a/ftk/src/ftkmisc.cpp +++ b/ftk/src/ftkmisc.cpp @@ -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())) { diff --git a/ftk/src/ftkunix.cpp b/ftk/src/ftkunix.cpp index d6c1cdc..f51d297 100644 --- a/ftk/src/ftkunix.cpp +++ b/ftk/src/ftkunix.cpp @@ -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) diff --git a/ftk/util/ftktest.cpp b/ftk/util/ftktest.cpp index 3fa52ca..fddac61 100644 --- a/ftk/util/ftktest.cpp +++ b/ftk/util/ftktest.cpp @@ -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: