#ifdef __cplusplus extern "C" { #endif #include "EXTERN.h" #include "perl.h" #include "XSUB.h" #ifdef __cplusplus } #endif #include "awadapter.h" #include "aweb.h" #include "awxs.h" #include "awxs.def" #include "Util.h" #ifdef AWXS_WARNS /* keep this simple for now, don't count % tokens, etc */ char * setErrMsg ( char ** gErrMsg, int count, ... ) { int i; int argLength = 1, length; char * strings[5]; va_list ap; va_start ( ap, count ); for ( i = 0; i < count; i++ ) { strings[i] = va_arg ( ap, char* ); argLength += strlen ( strings[i] ); } va_end ( ap ); if ( *gErrMsg ) free ( *gErrMsg ); *gErrMsg = (char *)safemalloc ( argLength * sizeof (char) ); switch ( count ) { case 1: strcpy ( *gErrMsg, strings[0] ); break; case 2: sprintf ( *gErrMsg, strings[0], strings[1] ); break; case 3: sprintf ( *gErrMsg, strings[0], strings[1], strings[2] ); break; case 4: sprintf ( *gErrMsg, strings[0], strings[1], strings[2], strings[3] ); break; case 5: sprintf ( *gErrMsg, strings[0], strings[1], strings[2], strings[3], strings[4] ); break; } // sv_setpv ( perl_get_sv("!",0), gErrMsg ); sv_setpv ( perl_get_sv("@",0), *gErrMsg ); return ( *gErrMsg ); } #endif /* AWXS_WARNS */ char * stradd ( char* stringA, char* stringB ) { char * returnString = NULL; if ( stringB == NULL ) return ( NULL ); if ( stringA == NULL ) returnString = strdup (stringB); else { returnString = (char *)safemalloc ( sizeof(char)*( strlen(stringA) + strlen(stringB) + 1) ); sprintf ( returnString, "%s%s", stringA, stringB ); } return ( returnString ); }