Commit 2a03c095 authored by João Diogo Ferreira's avatar João Diogo Ferreira Committed by Alexandre Julliard

kernel32: Handle GEOCLASS_ALL in EnumSystemGeoID().

parent f1b94dc1
...@@ -4247,16 +4247,28 @@ INT WINAPI GetGeoInfoA(GEOID geoid, GEOTYPE geotype, LPSTR data, int data_len, L ...@@ -4247,16 +4247,28 @@ INT WINAPI GetGeoInfoA(GEOID geoid, GEOTYPE geotype, LPSTR data, int data_len, L
/****************************************************************************** /******************************************************************************
* EnumSystemGeoID (KERNEL32.@) * EnumSystemGeoID (KERNEL32.@)
* *
* Call a users function for every location available on the system. * Calls a user's function for every location available on the system.
* *
* PARAMS * PARAMS
* geoclass [I] Type of information desired (SYSGEOTYPE enum from "winnls.h") * geoclass [I] Type of location desired (SYSGEOTYPE enum from "winnls.h")
* parent [I] GEOID for the parent * parent [I] GeoID for the parent
* enumproc [I] Callback function to call for each location * enumproc [I] Callback function to call for each location (prototype in "winnls.h")
* *
* RETURNS * RETURNS
* Success: TRUE. * Success: TRUE.
* Failure: FALSE. Use GetLastError() to determine the cause. * Failure: FALSE. Use GetLastError() to determine the cause.
*
* NOTES
* The enumproc function returns TRUE to continue enumerating
* or FALSE to interrupt the enumeration.
*
* On failure, GetLastError() returns one of the following values:
* - ERROR_INVALID_PARAMETER: no callback function was provided.
* - ERROR_INVALID_FLAGS: the location type was invalid.
*
* TODO
* On Windows 10, this function filters out those locations which
* simultaneously lack ISO and UN codes (e.g. Johnson Atoll).
*/ */
BOOL WINAPI EnumSystemGeoID(GEOCLASS geoclass, GEOID parent, GEO_ENUMPROC enumproc) BOOL WINAPI EnumSystemGeoID(GEOCLASS geoclass, GEOID parent, GEO_ENUMPROC enumproc)
{ {
...@@ -4269,7 +4281,7 @@ BOOL WINAPI EnumSystemGeoID(GEOCLASS geoclass, GEOID parent, GEO_ENUMPROC enumpr ...@@ -4269,7 +4281,7 @@ BOOL WINAPI EnumSystemGeoID(GEOCLASS geoclass, GEOID parent, GEO_ENUMPROC enumpr
return FALSE; return FALSE;
} }
if (geoclass != GEOCLASS_NATION && geoclass != GEOCLASS_REGION) { if (geoclass != GEOCLASS_NATION && geoclass != GEOCLASS_REGION && geoclass != GEOCLASS_ALL) {
SetLastError(ERROR_INVALID_FLAGS); SetLastError(ERROR_INVALID_FLAGS);
return FALSE; return FALSE;
} }
...@@ -4277,9 +4289,10 @@ BOOL WINAPI EnumSystemGeoID(GEOCLASS geoclass, GEOID parent, GEO_ENUMPROC enumpr ...@@ -4277,9 +4289,10 @@ BOOL WINAPI EnumSystemGeoID(GEOCLASS geoclass, GEOID parent, GEO_ENUMPROC enumpr
for (i = 0; i < ARRAY_SIZE(geoinfodata); i++) { for (i = 0; i < ARRAY_SIZE(geoinfodata); i++) {
const struct geoinfo_t *ptr = &geoinfodata[i]; const struct geoinfo_t *ptr = &geoinfodata[i];
if (geoclass == GEOCLASS_NATION && (ptr->kind == LOCATION_REGION)) if (geoclass == GEOCLASS_NATION && (ptr->kind != LOCATION_NATION))
continue; continue;
/* LOCATION_BOTH counts as region. */
if (geoclass == GEOCLASS_REGION && (ptr->kind == LOCATION_NATION)) if (geoclass == GEOCLASS_REGION && (ptr->kind == LOCATION_NATION))
continue; continue;
......
...@@ -4981,6 +4981,19 @@ static void test_EnumSystemGeoID(void) ...@@ -4981,6 +4981,19 @@ static void test_EnumSystemGeoID(void)
ret = pEnumSystemGeoID(GEOCLASS_REGION, 0, test_geoid_enumproc2); ret = pEnumSystemGeoID(GEOCLASS_REGION, 0, test_geoid_enumproc2);
ok(ret && geoidenum_count > 0, "got %d, count %d\n", ret, geoidenum_count); ok(ret && geoidenum_count > 0, "got %d, count %d\n", ret, geoidenum_count);
} }
geoidenum_count = 0;
ret = pEnumSystemGeoID(GEOCLASS_ALL, 39070, test_geoid_enumproc2);
if (ret == 0)
win_skip("GEOCLASS_ALL is not supported in EnumSystemGeoID.\n");
else
{
ok(ret && geoidenum_count > 0, "got %d, count %d\n", ret, geoidenum_count);
geoidenum_count = 0;
ret = pEnumSystemGeoID(GEOCLASS_ALL, 0, test_geoid_enumproc2);
ok(ret && geoidenum_count > 0, "got %d, count %d\n", ret, geoidenum_count);
}
} }
struct invariant_entry { struct invariant_entry {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment