void GleisbildClear(GleisbildStruct *Data) { if (GleisbildGetGleisbildDb(Data) != (Map *)NULL) MapDestroy(GleisbildGetGleisbildDb(Data)); GleisbildSetNumPages(Data, 0); GleisbildSetGleisbildDb(Data, MapCreate()); if (GleisbildGetGleisbildDb(Data) != (Map *)NULL) { MapInit(GleisbildGetGleisbildDb(Data), (CmpFkt)GleisbildIdCmp, (MapKeyDelCbFkt)NULL, (MapDataDelCbFkt)free); } }
void CanMemberClear(CanMemberStruct *Data) { if (CanMemberGetCanMemberDb(Data) != (Map *)NULL) MapDestroy(CanMemberGetCanMemberDb(Data)); CanMemberSetCanMemberDb(Data, MapCreate()); CanMemberSetNumMembers(Data, 0); if (CanMemberGetCanMemberDb(Data) != (Map *)NULL) { MapInit(CanMemberGetCanMemberDb(Data), (CmpFkt)CanMemberUidCmp, (MapKeyDelCbFkt)NULL, (MapDataDelCbFkt)free); } }
void LokClear(LokStruct *Data) { if (LokGetLokDb(Data) != (Map *)NULL) MapDestroy(LokGetLokDb(Data)); LokSetNumLoks(Data, 0); LokSetIsChanged(Data, FALSE); LokSetLokDb(Data, MapCreate()); if (LokGetLokDb(Data) != (Map *)NULL) { MapInit(LokGetLokDb(Data), (CmpFkt)strcmp, (MapKeyDelCbFkt)NULL, (MapDataDelCbFkt)free); } }
Cs2CfgData *Cs2CfgDataCreate(void) { Cs2CfgData *NewData; NewData = (Cs2CfgData *)malloc(sizeof(Cs2CfgData)); if (NewData != (Cs2CfgData *)NULL) { Cs2CfgDataSetCfgDatas(NewData, MapCreate()); if (Cs2CfgDataGetCfgDatas(NewData) == (Map *)NULL) { free(NewData); NewData = (Cs2CfgData *)NULL; } } return(NewData); }
CanMemberStruct *CanMemberCreate(void) { CanMemberStruct *NewData; NewData = (CanMemberStruct *)malloc(sizeof(CanMemberStruct)); if (NewData != (CanMemberStruct *)NULL) { CanMemberSetNumMembers(NewData, 0); CanMemberSetCanMemberDb(NewData, MapCreate()); if (CanMemberGetCanMemberDb(NewData) == (Map *)NULL) { free(NewData); NewData = (CanMemberStruct *)NULL; } } return(NewData); }
LokStruct *LokCreate(void) { LokStruct *NewData; NewData = (LokStruct *)malloc(sizeof(LokStruct)); if (NewData != (LokStruct *)NULL) { LokSetLocFilePath(NewData, "/var/www/config/"); LokSetNumLoks(NewData, 0); LokSetLokDb(NewData, MapCreate()); if (LokGetLokDb(NewData) == (Map *)NULL) { free(NewData); NewData = (LokStruct *)NULL; } } return(NewData); }
GleisbildStruct *GleisbildCreate(void) { GleisbildStruct *NewData; NewData = (GleisbildStruct *)malloc(sizeof(GleisbildStruct)); if (NewData != (GleisbildStruct *)NULL) { GleisbildSetGleisbildFilePath(NewData, "/var/www/config/"); GleisbildSetNumPages(NewData, 0); GleisbildSetGleisbildDb(NewData, MapCreate()); if (GleisbildGetGleisbildDb(NewData) == (Map *)NULL) { free(NewData); NewData = (GleisbildStruct *)NULL; } } return(NewData); }
NTSTATUS MapTest(PVOID Context) { typedef struct _SID_KV { CHAR *Key; CHAR *Value; } SID_KV, *PSID_KV; NTSTATUS Status; PVOID Value; PMAP Map; ULONG Index, ValueSize; SID_KV TestKvs[] = {{"S-1-0-0", "SID0"}, {"S-1-1-0", "SID1"}, {"S-1-0", "SID2"}, {"S-1-1", "SID3"}, {"S-1-5-21-1180699209-877415012-3182924384-1004", "BIG-SID4"}, {"S-1-5-20", "SID5"}, {"S-1-5-21-1180699209-111115012-3182924384-1004", "Another-BIG-SID6"}}; Map = MapCreate(); if (!Map) { KLErr("Can't create map"); return STATUS_INSUFFICIENT_RESOURCES; } for (Index = 0; Index < RTL_NUMBER_OF(TestKvs); Index++) { Status = MapInsertKey(Map, TestKvs[Index].Key, (ULONG)(strlen(TestKvs[Index].Key) + 1), TestKvs[Index].Value, (ULONG)(strlen(TestKvs[Index].Value) + 1)); if (!NT_SUCCESS(Status)) { KLErr("MapInsertKey failed Status 0x%x", Status); goto cleanup; } } /* Try to insert key 4 again */ Status = MapInsertKey(Map, TestKvs[4].Key, (ULONG)(strlen(TestKvs[4].Key) + 1), TestKvs[4].Value, (ULONG)(strlen(TestKvs[4].Value) + 1)); if (Status != STATUS_OBJECT_NAME_COLLISION) { Status = STATUS_UNSUCCESSFUL; KLErr("MapInsertKey duplicate Status 0x%x", Status); goto cleanup; } /* Delete key 5 */ Status = MapDeleteKey(Map, TestKvs[5].Key, (ULONG)(strlen(TestKvs[5].Key) + 1)); if (!NT_SUCCESS(Status)) { KLErr("MapDeleteKey Status 0x%x", Status); goto cleanup; } for (Index = 0; Index < RTL_NUMBER_OF(TestKvs); Index++) { /* Skip key 5 because it's already deleted */ if (Index == 5) continue; Status = MapLookupKey(Map, TestKvs[Index].Key, (ULONG)(strlen(TestKvs[Index].Key) + 1), &Value, &ValueSize); if (!NT_SUCCESS(Status)) { KLErr("MapLookupKey failed Status 0x%x", Status); goto cleanup; } if (ValueSize != (strlen(TestKvs[Index].Value) + 1)) { KLErr("MapLookupKey returned invalid ValueSize 0x%x", ValueSize); ExFreePoolWithTag(Value, MAP_TAG); Status = STATUS_UNSUCCESSFUL; goto cleanup; } if (ValueSize != RtlCompareMemory(Value, TestKvs[Index].Value, ValueSize)) { KLErr("MapLookupKey returned invalid Value content"); ExFreePoolWithTag(Value, MAP_TAG); Status = STATUS_UNSUCCESSFUL; goto cleanup; } ExFreePoolWithTag(Value, MAP_TAG); } Status = STATUS_SUCCESS; cleanup: MapDelete(Map); KLInf("MapTest Status 0x%x", Status); return Status; }