/* * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ /* * A class to manage AccessBridge debugging */ #include "AccessBridgeDebug.h" #include #include #include #include #ifdef __cplusplus extern "C" { #endif static FILE* logFP = nullptr; static char* filePath = nullptr; void initializeFileLogger() { const char* var = "JAVA_ACCESSBRIDGE_LOGFILE"; filePath = getenv(var); if (filePath != nullptr) { logFP = fopen(filePath, "w"); if (logFP == nullptr) { PrintDebugString("couldnot open file %s", filePath); } } } void finalizeFileLogger() { if (logFP) { fclose(logFP); logFP = nullptr; } } /** * print a GetLastError message */ char *printError(char *msg) { LPVOID lpMsgBuf = NULL; static char retbuf[256]; if (msg != NULL) { strncpy((char *)retbuf, msg, sizeof(retbuf)); // if msg text is >= 256 ensure buffer is null terminated retbuf[255] = '\0'; } if (!FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language (LPTSTR) &lpMsgBuf, 0, NULL )) { PrintDebugString(" %s: FormatMessage failed", msg); } else { PrintDebugString(" %s: %s", msg, (char *)lpMsgBuf); } if (lpMsgBuf != NULL) { strncat((char *)retbuf, ": ", sizeof(retbuf) - strlen(retbuf) - 1); strncat((char *)retbuf, (char *)lpMsgBuf, sizeof(retbuf) - strlen(retbuf) - 1); } return (char *)retbuf; } /** * Send debugging info to the appropriate place */ void PrintDebugString(char *msg, ...) { #ifdef DEBUGGING_ON char buf[1024]; va_list argprt; va_start(argprt, msg); // set up argptr vsprintf(buf, msg, argprt); #ifdef SEND_TO_OUTPUT_DEBUG_STRING OutputDebugString(buf); #endif #ifdef SEND_TO_CONSOLE printf(buf); printf("\r\n"); #endif #endif if (logFP) { va_list args; va_start(args, msg); vfprintf(logFP, msg, args); va_end(args); } } /** * Send Java debugging info to the appropriate place */ void PrintJavaDebugString2(char *msg, ...) { #ifdef JAVA_DEBUGGING_ON char buf[1024]; va_list argprt; va_start(argprt, msg); // set up argptr vsprintf(buf, msg, argprt); #ifdef SEND_TO_OUTPUT_DEBUG_STRING OutputDebugString(buf); #endif #ifdef SEND_TO_CONSOLE printf(buf); printf("\r\n"); #endif #endif if (logFP) { va_list args; va_start(args, msg); vfprintf(logFP, msg, args); va_end(args); } } /** * Wide version of the method to send debugging info to the appropriate place */ void wPrintDebugString(wchar_t *msg, ...) { #ifdef DEBUGGING_ON char buf[1024]; char charmsg[256]; va_list argprt; va_start(argprt, msg); // set up argptr sprintf(charmsg, "%ls", msg); // convert format string to multi-byte vsprintf(buf, charmsg, argprt); #ifdef SEND_TO_OUTPUT_DEBUG_STRING OutputDebugString(buf); #endif #ifdef SEND_TO_CONSOLE printf(buf); printf("\r\n"); #endif #endif if (logFP) { va_list args; va_start(args, msg); vfwprintf(logFP, msg, args); va_end(args); } } /** * Wide version of the method to send Java debugging info to the appropriate place */ void wPrintJavaDebugString(wchar_t *msg, ...) { #ifdef JAVA_DEBUGGING_ON char buf[1024]; char charmsg[256]; va_list argprt; va_start(argprt, msg); // set up argptr sprintf(charmsg, "%ls", msg); // convert format string to multi-byte vsprintf(buf, charmsg, argprt); #ifdef SEND_TO_OUTPUT_DEBUG_STRING OutputDebugString(buf); #endif #ifdef SEND_TO_CONSOLE printf(buf); printf("\r\n"); #endif #endif if (logFP) { va_list args; va_start(args, msg); vfwprintf(logFP, msg, args); va_end(args); } } #ifdef __cplusplus } #endif