static __attribute__((constructor)) void dhcp_pgsql_init() { { static struct option long_option = {"pgsql-config-file", required_argument, 0, 3}; add_option_cb(long_option, set_pgsql_config_file); } { static struct option long_option = {"pgsql-config-name", required_argument, 0, 3}; add_option_cb(long_option, set_pgsql_config_name); } { int version = PQlibVersion(); int v1 = version / 10000; int v2 = (version / 100) % 100; int v3 = version % 100; eprintf(DEBUG_ERROR, "PgSQL client version: %d.%d.%d", v1, v2, v3); } add_update_lease_hook(pgsql_update_lease_from_sql); add_updated_lease_hook(pgsql_update_lease,2); add_lease_lookup_by_mac(pgsql_iterate_lease_for_ifname_and_mac); cb_add_timer(PRUNE_INTERVAL, 1, NULL, pgsql_remove_old_leases_from_db); atexit(pgsql_disconnect); }
void init_postgres(void) { pg_conn_tag = scm_make_smob_type("pg_conn", sizeof(struct pg_conn)); scm_set_smob_free(pg_conn_tag, free_pg_conn); scm_set_smob_mark(pg_conn_tag, mark_pg_conn); pg_res_tag = scm_make_smob_type("pg_res", sizeof(struct pg_res)); scm_set_smob_free(pg_res_tag, free_pg_res); scm_set_smob_mark(pg_res_tag, mark_pg_res); scm_c_define_gsubr("pg-open-primitive", 1, 0, 0, pg_open_primitive); scm_c_define_gsubr("pg-close", 1, 0, 0, pg_close); scm_c_define_gsubr("pg-exec-primitive", 2, 0, 0, pg_exec); scm_c_define_gsubr("pg-clear", 1, 0, 0, pg_clear); scm_c_define_gsubr("pg-tuples", 1, 0, 0, pg_tuples); scm_c_define_gsubr("pg-cmd-tuples", 1, 0, 0, pg_cmd_tuples); scm_c_define_gsubr("pg-fields", 1, 0, 0, pg_fields); scm_c_define_gsubr("pg-get-row", 1, 0, 0, pg_get_row); scm_c_define_gsubr("pg-each-row", 2, 0, 0, pg_each_row); scm_c_define_gsubr("pg-next-row", 1, 0, 0, pg_next_row); scm_c_define_gsubr("pg-one-row-primitive", 2, 0, 0, pg_one_row); scm_c_define_gsubr("pg-map-rows", 1, 0, 1, pg_map_rows); scm_c_define_gsubr("pg-end-stream?", 1, 0, 0, pg_done); scm_c_define_gsubr("pg-format", 2, 0, 0, pg_format_sql); scm_c_define_gsubr("pg-cell", 2, 0, 0, pg_cell); scm_c_define_gsubr("pg-error-msg", 1, 0, 0, pg_error_msg); scm_c_define_gsubr("decode-ts", 1, 0, 0, decode_ts); int vers = PQlibVersion(); log_msg("PQlib version %d.%d.%d\n", vers / 10000, (vers / 100) % 100, vers % 100); }
static PyObject* psyco_libpq_version(PyObject *self) { #if PG_VERSION_NUM >= 90100 return PyInt_FromLong(PQlibVersion()); #else PyErr_SetString(NotSupportedError, "version discovery is not supported in libpq < 9.1"); return NULL; #endif }
void PqwxFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) { wxAboutDialogInfo info; info.SetName(_T("PQWX")); info.SetVersion(_T(PQWX_VERSION)); wxString description(_("PostgreSQL query tool")); #ifdef __WXDEBUG__ description << _(" - Debug build"); #if PG_VERSION_NUM >= 90100 const int pqVersion = PQlibVersion(); description << _T("\nlibpq ") << (pqVersion/10000) << _T('.') << ((pqVersion/100)%100) << _T('.') << (pqVersion%100); if (pqVersion != PG_VERSION_NUM) description << _T(" (compiled against ") << _T(PG_VERSION) << _T(")"); #else description << _T("\nlibpq ") << _T(PG_VERSION); #endif description << _T("\n") << wxVERSION_STRING << _T(" ") << _T(WX_FLAVOUR); #endif info.SetDescription(description); info.SetCopyright(_T("(c) 2011, 2012 Steve Haslam")); wxAboutBox(info); }
/* * call-seq: * PG.library_version -> Integer * * Get the version of the libpq library in use. The number is formed by * converting the major, minor, and revision numbers into two-decimal- * digit numbers and appending them together. * For example, version 7.4.2 will be returned as 70402, and version * 8.1 will be returned as 80100 (leading zeroes are not shown). Zero * is returned if the connection is bad. */ static VALUE pg_s_library_version(VALUE self) { UNUSED( self ); return INT2NUM(PQlibVersion()); }
LONG WINAPI PtokaX_UnhandledExceptionFilter(LPEXCEPTION_POINTERS ExceptionInfo) { static volatile LONG PermLock = 0; // When unhandled exception happen then permanently 'lock' here. We terminate after first exception. while(InterlockedExchange(&PermLock, 1) == 1) { ::Sleep(10); } // Set failure hook __pfnDliFailureHook2 = PtokaX_FailHook; // Check if we have debug symbols if(FileExist(sDebugSymbolsFile.c_str()) == false) { #ifdef _BUILD_GUI ::MessageBox(NULL, "Something bad happen and PtokaX crashed. PtokaX was not able to collect any information why this happen because file with debug symbols" " (PtokaX.pdb) is missing. If you know why this crash happen then please report it as bug to [email protected]!", "PtokaX crashed!", MB_OK | MB_ICONERROR); #else AppendLog("Something bad happen and PtokaX crashed. PtokaX was not able to collect any information why this happen because file with debug symbols" " (PtokaX.pdb) is missing. If you know why this crash happen then please report it as bug to [email protected]!"); #endif ExceptionHandlingUnitialize(); exit(EXIT_FAILURE); } // Initialize debug symbols SymSetOptions(SYMOPT_DEFERRED_LOADS | SYMOPT_FAIL_CRITICAL_ERRORS | SYMOPT_LOAD_LINES); if(SymInitialize(GetCurrentProcess(), clsServerManager::sPath.c_str(), TRUE) == FALSE) { #ifdef _BUILD_GUI ::MessageBox(NULL, "Something bad happen and PtokaX crashed. PtokaX was not able to collect any information why this happen because initializatin of" " debug symbols failed. If you know why this crash happen then please report it as bug to [email protected]!", "PtokaX crashed!", MB_OK | MB_ICONERROR); #else AppendLog("Something bad happen and PtokaX crashed. PtokaX was not able to collect any information why this happen because initializatin of" " debug symbols failed. If you know why this crash happen then please report it as bug to [email protected]!"); #endif ExceptionHandlingUnitialize(); exit(EXIT_FAILURE); } // Generate crash log filename time_t acc_time; time(&acc_time); struct tm *tm = localtime(&acc_time); strftime(sDebugBuf, szDebugBufLen, "Crash-%d.%m.%Y-%H.%M.%S.log", tm); // Open crash file FILE * fw = fopen((sLogPath + sDebugBuf).c_str(), "w"); if(fw == NULL) { #ifdef _BUILD_GUI ::MessageBox(NULL, "Something bad happen and PtokaX crashed. PtokaX was not able to create file with information why this crash happen." " If you know why this crash happen then please report it as bug to [email protected]!", "PtokaX crashed!", MB_OK | MB_ICONERROR); #else AppendLog("Something bad happen and PtokaX crashed. PtokaX was not able to create file with information why this crash happen." " If you know why this crash happen then please report it as bug to [email protected]!"); #endif ExceptionHandlingUnitialize(); SymCleanup(GetCurrentProcess()); exit(EXIT_FAILURE); } string sCrashMsg = "Something bad happen and PtokaX crashed. PtokaX collected information why this crash happen to file "; sCrashMsg += string(sDebugBuf); sCrashMsg += ", please send that file to [email protected]!"; // Write PtokaX version, build and exception code fprintf(fw, "PtokaX version: " PtokaXVersionString " [build " BUILD_NUMBER "]" #ifdef _M_X64 " (x64)" #endif #if LUA_VERSION_NUM > 501 "\nLua: " LUA_VERSION_MAJOR "." LUA_VERSION_MINOR "." LUA_VERSION_RELEASE #else "\n" LUA_RELEASE #endif #ifdef _WITH_SQLITE "\nSQLite: " SQLITE_VERSION #elif _WITH_POSTGRES "\nPostgreSQL: %d" #elif _WITH_MYSQL "\nMySQL: " MYSQL_SERVER_VERSION #endif "\nException Code: %x\n", #ifdef _WITH_POSTGRES PQlibVersion(), #endif ExceptionInfo->ExceptionRecord->ExceptionCode); { // Write windoze version where we crashed if is possible OSVERSIONINFOEX ver; memset(&ver, 0, sizeof(OSVERSIONINFOEX)); ver.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if(GetVersionEx((OSVERSIONINFO*)&ver) != 0) { fprintf(fw, "Windows version: %lu.%lu SP: %hu\n", ver.dwMajorVersion, ver.dwMinorVersion, ver.wServicePackMajor); } } // Write date and time when crash happen size_t szLen = strftime(sDebugBuf, szDebugBufLen, "Date and time: %d.%m.%Y %H:%M:%S\n\n", tm); if(szLen > 0) { fwrite(sDebugBuf, 1, szLen, fw); } STACKFRAME64 sf64CallStack; memset(&sf64CallStack, 0, sizeof(STACKFRAME64)); sf64CallStack.AddrPC.Mode = AddrModeFlat; sf64CallStack.AddrStack.Mode = AddrModeFlat; sf64CallStack.AddrFrame.Mode = AddrModeFlat; #ifdef _M_X64 sf64CallStack.AddrPC.Offset = ExceptionInfo->ContextRecord->Rip; sf64CallStack.AddrStack.Offset = ExceptionInfo->ContextRecord->Rsp; sf64CallStack.AddrFrame.Offset = ExceptionInfo->ContextRecord->Rbp; #else sf64CallStack.AddrPC.Offset = ExceptionInfo->ContextRecord->Eip; sf64CallStack.AddrStack.Offset = ExceptionInfo->ContextRecord->Esp; sf64CallStack.AddrFrame.Offset = ExceptionInfo->ContextRecord->Ebp; #endif // Write where crash happen fprintf(fw, "Exception location:\n"); GetSourceFileInfo(sf64CallStack.AddrPC.Offset, fw); GetFunctionInfo(sf64CallStack.AddrPC.Offset, fw); // Try to write callstack fprintf(fw, "\nCall stack:\n"); // We don't want it like never ending story, limit call stack to 100 lines for(uint32_t ui32i = 0; ui32i < 100; ui32i++) { if(StackWalk64( #ifdef _M_X64 IMAGE_FILE_MACHINE_AMD64, #else IMAGE_FILE_MACHINE_I386, #endif GetCurrentProcess(), GetCurrentThread(), &sf64CallStack, ExceptionInfo->ContextRecord, NULL, SymFunctionTableAccess64, SymGetModuleBase64, NULL) == FALSE || sf64CallStack.AddrFrame.Offset == 0) { break; } GetSourceFileInfo(sf64CallStack.AddrPC.Offset, fw); GetFunctionInfo(sf64CallStack.AddrPC.Offset, fw); } fclose(fw); #ifdef _BUILD_GUI ::MessageBox(NULL, sCrashMsg.c_str(), "PtokaX crashed!", MB_OK | MB_ICONERROR); #else AppendLog(sCrashMsg.c_str()); #endif ExceptionHandlingUnitialize(); SymCleanup(GetCurrentProcess()); exit(EXIT_FAILURE); }