/** * xmlSecMSCryptoErrorsDefaultCallback: * @file: the error location file name (__FILE__ macro). * @line: the error location line number (__LINE__ macro). * @func: the error location function name (__FUNCTION__ macro). * @errorObject: the error specific error object * @errorSubject: the error specific error subject. * @reason: the error code. * @msg: the additional error message. * * The default errors reporting callback function. */ void xmlSecMSCryptoErrorsDefaultCallback(const char* file, int line, const char* func, const char* errorObject, const char* errorSubject, int reason, const char* msg) { DWORD dwError; TCHAR errorT[XMLSEC_MSCRYPTO_ERROR_MSG_BUFFER_SIZE]; WCHAR errorW[XMLSEC_MSCRYPTO_ERROR_MSG_BUFFER_SIZE]; CHAR errorUTF8[XMLSEC_MSCRYPTO_ERROR_MSG_BUFFER_SIZE]; xmlChar buf[XMLSEC_MSCRYPTO_ERROR_MSG_BUFFER_SIZE]; DWORD rc; int ret; dwError = GetLastError(); rc = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, dwError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), /* Default language */ errorT, XMLSEC_MSCRYPTO_ERROR_MSG_BUFFER_SIZE, NULL); #ifdef UNICODE if(rc <= 0) { wcscpy_s(errorT, XMLSEC_MSCRYPTO_ERROR_MSG_BUFFER_SIZE, L""); } ret = WideCharToMultiByte(CP_UTF8, 0, errorT, -1, errorUTF8, XMLSEC_MSCRYPTO_ERROR_MSG_BUFFER_SIZE, NULL, NULL); if(ret <= 0) { strcpy_s(errorUTF8, XMLSEC_MSCRYPTO_ERROR_MSG_BUFFER_SIZE, ""); } #else /* UNICODE */ if(rc <= 0) { strcpy_s(errorT, XMLSEC_MSCRYPTO_ERROR_MSG_BUFFER_SIZE, ""); } ret = MultiByteToWideChar(CP_ACP, 0, errorT, -1, errorW, XMLSEC_MSCRYPTO_ERROR_MSG_BUFFER_SIZE); if(ret <= 0) { wcscpy_s(errorW, XMLSEC_MSCRYPTO_ERROR_MSG_BUFFER_SIZE, L""); } ret = WideCharToMultiByte(CP_UTF8, 0, errorW, -1, errorUTF8, XMLSEC_MSCRYPTO_ERROR_MSG_BUFFER_SIZE, NULL, NULL); if(ret <= 0) { strcpy_s(errorUTF8, XMLSEC_MSCRYPTO_ERROR_MSG_BUFFER_SIZE, ""); } #endif /* UNICODE */ if((msg != NULL) && ((*msg) != '\0')) { xmlSecStrPrintf(buf, sizeof(buf), BAD_CAST "%s;last error=%d (0x%08x);last error msg=%s", msg, dwError, dwError, errorUTF8); } else { xmlSecStrPrintf(buf, sizeof(buf), BAD_CAST "last error=%d (0x%08x);last error msg=%s", dwError, dwError, errorUTF8); } xmlSecErrorsDefaultCallback(file, line, func, errorObject, errorSubject, reason, (char*)buf); }
static xmlChar* xmlSecCryptoDLLibraryConstructGetFunctionsName(const xmlChar* name) { static xmlChar tmpl[] = "xmlSecCryptoGetFunctions_%s"; xmlChar* res; int len; xmlSecAssert2(name != NULL, NULL); len = xmlStrlen(name) + xmlStrlen(tmpl) + 1; res = (xmlChar*)xmlMalloc(len + 1); if(res == NULL) { xmlSecErr_a_ignorar5(XMLSEC_ERRORS_HERE, NULL, NULL, XMLSEC_ERRORS_R_MALLOC_FAILED, "size=%d", len + 1); return(NULL); } xmlSecStrPrintf(res, len, tmpl, name); return(res); }
static xmlChar* xmlSecCryptoDLLibraryConstructFilename(const xmlChar* name) { static xmlChar tmpl[] = "lib%s-%s" LTDL_SHLIB_EXT; xmlChar* res; int len; xmlSecAssert2(name != NULL, NULL); /* TODO */ len = xmlStrlen(BAD_CAST PACKAGE) + xmlStrlen(name) + xmlStrlen(tmpl) + 1; res = (xmlChar*)xmlMalloc(len + 1); if(res == NULL) { xmlSecErr_a_ignorar5(XMLSEC_ERRORS_HERE, NULL, NULL, XMLSEC_ERRORS_R_MALLOC_FAILED, "size=%d", len + 1); return(NULL); } xmlSecStrPrintf(res, len, tmpl, PACKAGE, name); return(res); }