static int getTZIfromRegistry()

in src/win32/dt_win32.c [387:422]


static int getTZIfromRegistry(char *tszSubkey, char *tszKey, DYNAMIC_TIME_ZONE_INFORMATION *ptzi, const char szStandardName[])
{
    HKEY hkey_tz = NULL;
    DWORD dw = 0;
    REG_TZI_FORMAT regtzi = {0,};

    if (ERROR_SUCCESS != (dw = RegOpenKeyA(HKEY_LOCAL_MACHINE, tszSubkey, &hkey_tz))) {

        RegCloseKey(hkey_tz);
        free(tszSubkey);
        return EXIT_FAILURE;
    }

    GetTziFromKey(tszSubkey, tszKey, &regtzi);

    dw = sizeof(ptzi->StandardName);
    if (ERROR_SUCCESS != (dw = RegQueryValueExW(hkey_tz, REG_STD, NULL, NULL, (LPBYTE)&ptzi->StandardName, &dw))) {
        RegCloseKey(hkey_tz);
        free(tszSubkey);
        return EXIT_FAILURE;
    }

    dw = sizeof(ptzi->StandardName);
    if (ERROR_SUCCESS != (dw = RegQueryValueExW(hkey_tz, REG_DLT, NULL, NULL, (LPBYTE)&ptzi->DaylightName, &dw))) {
        RegCloseKey(hkey_tz);
        free(tszSubkey);
        return EXIT_FAILURE;
    }

    RegTziToDynamicTimeZoneInfo(&regtzi, ptzi);
    MultiByteToWideChar(CP_ACP, MB_COMPOSITE, szStandardName, -1 , ptzi->TimeZoneKeyName, sizeof(ptzi->TimeZoneKeyName));

    RegCloseKey(hkey_tz);

    return EXIT_SUCCESS;
}