/
githubmirror
/
postgres
Обзор
Документация
Войти
/
githubmirror
/
postgres
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/port/win32ntdll.c
71 строка
1 KB
Peter Eisentraut
Fix for loop variables used with lengthof
11 июл 2026, 15:39
11 июл 2026, 15:39
5f14f82
Код
Авторство
О чём код?
/*------------------------------------------------------------------------- * * win32ntdll.c * Dynamically loaded Windows NT functions. * * Portions Copyright (c) 2021-2026, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * * IDENTIFICATION * src/port/win32ntdll.c * *------------------------------------------------------------------------- */ #include "c.h" #include "port/win32ntdll.h" RtlGetLastNtStatus_t pg_RtlGetLastNtStatus; RtlNtStatusToDosError_t pg_RtlNtStatusToDosError; NtFlushBuffersFileEx_t pg_NtFlushBuffersFileEx; typedef struct NtDllRoutine { const char *name; pg_funcptr_t *address; } NtDllRoutine; static const NtDllRoutine routines[] = { {"RtlGetLastNtStatus", (pg_funcptr_t *) &pg_RtlGetLastNtStatus}, {"RtlNtStatusToDosError", (pg_funcptr_t *) &pg_RtlNtStatusToDosError}, {"NtFlushBuffersFileEx", (pg_funcptr_t *) &pg_NtFlushBuffersFileEx} }; static bool initialized; int initialize_ntdll(void) { HMODULE module; if (initialized) return 0; if (!(module = LoadLibraryEx("ntdll.dll", NULL, 0))) { _dosmaperr(GetLastError()); return -1; } for (size_t i = 0; i < lengthof(routines); ++i) { pg_funcptr_t address; address = (pg_funcptr_t) GetProcAddress(module, routines[i].name); if (!address) { _dosmaperr(GetLastError()); FreeLibrary(module); return -1; } *routines[i].address = address; } initialized = true; return 0; }