RAII.cpp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #include "hplatform.h"
  2. #ifdef OS_WIN
  3. #ifdef ENABLE_WINDUMP
  4. #include <dbghelp.h>
  5. #ifdef _MSC_VER
  6. #pragma comment(lib,"dbghelp.lib")
  7. #endif
  8. static LONG UnhandledException(EXCEPTION_POINTERS *pException) {
  9. char modulefile[256];
  10. GetModuleFileName(NULL, modulefile, sizeof(modulefile));
  11. char* pos = strrchr(modulefile, '\\');
  12. char* modulefilename = pos + 1;
  13. SYSTEMTIME st;
  14. GetLocalTime(&st);
  15. char filename[256];
  16. snprintf(filename, sizeof(filename), "core_%s_%04d%02d%02d_%02d%02d%02d_%03d.dump",
  17. modulefilename,
  18. st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
  19. HANDLE hDumpFile = CreateFile(filename, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
  20. MINIDUMP_EXCEPTION_INFORMATION dumpInfo;
  21. dumpInfo.ExceptionPointers = pException;
  22. dumpInfo.ThreadId = GetCurrentThreadId();
  23. dumpInfo.ClientPointers = TRUE;
  24. MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDumpFile, MiniDumpNormal, &dumpInfo, NULL, NULL);
  25. CloseHandle(hDumpFile);
  26. return EXCEPTION_EXECUTE_HANDLER;
  27. }
  28. #endif
  29. #include "hsocket.h"
  30. class WsaRAII {
  31. public:
  32. WsaRAII() {
  33. WSAInit();
  34. #ifdef ENABLE_WINDUMP
  35. SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)UnhandledException);
  36. #endif
  37. }
  38. ~WsaRAII() {
  39. WSADeinit();
  40. }
  41. };
  42. static WsaRAII s_wsa;
  43. #endif
  44. #ifdef WITH_CURL
  45. #include "curl/curl.h"
  46. #ifdef _MSC_VER
  47. //#pragma comment(lib, "libcurl.a")
  48. #pragma comment(lib, "ws2_32.lib")
  49. #pragma comment(lib, "wldap32.lib")
  50. #pragma comment(lib, "advapi32.lib")
  51. #pragma comment(lib, "crypt32.lib")
  52. #endif
  53. class CurlRAII {
  54. public:
  55. CurlRAII() {
  56. curl_global_init(CURL_GLOBAL_ALL);
  57. }
  58. ~CurlRAII() {
  59. curl_global_cleanup();
  60. }
  61. };
  62. static CurlRAII s_curl;
  63. #endif