NametagsImpl.c revision 4a68b3365c8c50aa93505e99ead2565ab73dcdb0
15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/*---------------------------------------------------------------------------* 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * NametagsImpl.c * 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * * 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Copyright 2007, 2008 Nuance Communciations, Inc. * 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * * 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Licensed under the Apache License, Version 2.0 (the 'License'); * 7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * you may not use this file except in compliance with the License. * 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * * 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * You may obtain a copy of the License at * 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * http://www.apache.org/licenses/LICENSE-2.0 * 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * * 12effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch * Unless required by applicable law or agreed to in writing, software * 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * distributed under the License is distributed on an 'AS IS' BASIS, * 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * See the License for the specific language governing permissions and * 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * limitations under the License. * 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * * 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *---------------------------------------------------------------------------*/ 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ESR_Session.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "HashMap.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "LCHAR.h" 234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "plog.h" 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "pmemory.h" 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "SR_NametagImpl.h" 264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "SR_NametagsImpl.h" 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MTAG NULL 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ESR_ReturnCode SR_NametagsCreate(SR_Nametags** self) 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SR_NametagsImpl* impl; 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ESR_ReturnCode rc; 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (self == NULL) 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) PLogError(L("ESR_INVALID_ARGUMENT")); 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return ESR_INVALID_ARGUMENT; 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 40effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch impl = NEW(SR_NametagsImpl, MTAG); 41effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (impl == NULL) 42effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch { 434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) PLogError(L("ESR_OUT_OF_MEMORY")); 444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return ESR_OUT_OF_MEMORY; 454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) impl->Interface.load = &SR_NametagsLoadImpl; 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) impl->Interface.save = &SR_NametagsSaveImpl; 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) impl->Interface.add = &SR_NametagsAddImpl; 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) impl->Interface.remove = &SR_NametagsRemoveImpl; 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) impl->Interface.getSize = &SR_NametagsGetSizeImpl; 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) impl->Interface.get = &SR_NametagsGetImpl; 5323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) impl->Interface.getAtIndex = &SR_NametagsGetAtIndexImpl; 54effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch impl->Interface.contains = &SR_NametagsContainsImpl; 55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) impl->Interface.destroy = &SR_NametagsDestroyImpl; 56effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch impl->value = NULL; 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) impl->eventLog = NULL; 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CHKLOG(rc, HashMapCreate(&impl->value)); 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CHKLOG(rc, ESR_SessionGetSize_t(L("SREC.Recognizer.osi_log_level"), &impl->logLevel)); 6123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) if (impl->logLevel > 0) 62effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch CHKLOG(rc, ESR_SessionGetProperty(L("eventlog"), (void **)&impl->eventLog, TYPES_SR_EVENTLOG)); 63a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) CHKLOG(rc, SR_EventLogTokenInt_BASIC(impl->eventLog, impl->logLevel, L("pointer"), (int) self)); 64effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->logLevel, L("SR_NametagsCreate"))); 654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *self = (SR_Nametags*) impl; 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return ESR_SUCCESS; 674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)CLEANUP: 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) impl->Interface.destroy(&impl->Interface); 69effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return rc; 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)ESR_ReturnCode SR_NametagsLoadImpl(SR_Nametags* self, const LCHAR* filename) 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles){ 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SR_NametagsImpl* impl = (SR_NametagsImpl*) self; 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ESR_ReturnCode rc; 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) PFile* file = NULL; 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LCHAR line[256]; 785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) LCHAR* result = NULL; 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) LCHAR* id; 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LCHAR* value; 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SR_Nametag* newNametag = NULL; 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SR_Nametag* oldNametag; 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HashMap* nametags = impl->value; 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t size, len, i; 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) LCHAR devicePath[P_PATH_MAX]; 865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) LCHAR number[MAX_UINT_DIGITS+1]; 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define NAMETAGID_LENGTH 20 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /* strlen("token\0") == 6 */ 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define TOKEN_LENGTH 6 + NAMETAGID_LENGTH 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LCHAR tokenName[TOKEN_LENGTH]; 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (filename == NULL) 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) rc = ESR_INVALID_STATE; 955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) PLogError(ESR_rc2str(rc)); 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) goto CLEANUP; 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size = P_PATH_MAX; 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHKLOG(rc, ESR_SessionGetLCHAR(L("cmdline.nametagPath"), devicePath, &size)); 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /* check if the filename has the path */ 1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (LSTRNCMP(filename, devicePath, LSTRLEN(devicePath)) != 0) 1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) LSTRCAT(devicePath, filename); 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) LSTRCPY(devicePath, filename); 1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) file = pfopen ( devicePath, L("r")); 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* CHKLOG(rc, PFileSystemCreatePFile(devicePath, ESR_TRUE, &file)); 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CHKLOG(rc, file->open(file, L("r")));*/ 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if ( file == NULL ) 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) goto CLEANUP; 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /* Flush collection */ 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHKLOG(rc, nametags->getSize(nametags, &size)); 1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (i = 0; i < size; ++i) 1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) { 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHKLOG(rc, nametags->getValueAtIndex(nametags, 0, (void **)&oldNametag)); 1175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CHKLOG(rc, nametags->removeAtIndex(nametags, 0)); 1185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CHKLOG(rc, oldNametag->destroy(oldNametag)); 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) len = MAX_UINT_DIGITS + 1; 1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CHKLOG(rc, lultostr(size, number, &len, 10)); 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->logLevel, L("removeCount"), number)); 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) while (ESR_TRUE) 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result = pfgets ( line, 256, file ); 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (result == NULL) 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (LSTRLEN(line) == 255) 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 1315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) rc = ESR_BUFFER_OVERFLOW; 132effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PLogError(ESR_rc2str(rc)); 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) goto CLEANUP; 1345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) lstrtrim(line); 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /* Get the Nametag ID */ 1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) id = line; 1395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 140effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch /* Find next whitespace */ 141effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch for (value = id + 1; *value != L('\0') && !LISSPACE(*value); ++value); 142effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (*value == L('\0')) 143effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch { 144effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch rc = ESR_INVALID_STATE; 145effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PLogError(L("%s: Cannot find end of Nametag id"), ESR_rc2str(rc)); 146effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch goto CLEANUP; 147effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 148effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch /* Delimit end of nametag ID */ 149effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch *value = L('\0'); 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /* Find next non-whitespace */ 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (++value; *value != L('\0') && LISSPACE(*value); ++value); 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (*value == L('\0')) 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) rc = ESR_INVALID_STATE; 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PLogError(L("%s: Cannot find Nametag value"), ESR_rc2str(rc)); 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) goto CLEANUP; 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /* We now have both the Nametag ID and value */ 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) len = (LSTRLEN(value)+1) * sizeof(LCHAR) ; 162effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch CHKLOG(rc, SR_NametagCreateFromValue(id, (const char*)value, len, &newNametag)); 163effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch /* Add Nametag to collection */ 164effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch CHKLOG(rc, impl->value->put(impl->value, id, newNametag)); 165effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (LSTRLEN(id) > NAMETAGID_LENGTH) 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 1685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) rc = ESR_BUFFER_OVERFLOW; 16923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) PLogError(ESR_rc2str(rc)); 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) goto CLEANUP; 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) psprintf(tokenName, L("nametag[%s]"), id); 173a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->logLevel, tokenName, value)); 1745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) newNametag = NULL; 1755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->logLevel, L("filename"), filename)); 1775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CHKLOG(rc, nametags->getSize(nametags, &size)); 178a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) len = MAX_UINT_DIGITS + 1; 1794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) CHKLOG(rc, lultostr(size, number, &len, 10)); 1804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->logLevel, L("addCount"), number)); 1814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->logLevel, L("SR_NametagsLoad"))); 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pfclose (file); 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return ESR_SUCCESS; 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)CLEANUP: 18523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) if (file != NULL) 18623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) pfclose (file); 1875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (newNametag != NULL) 188ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch newNametag->destroy(newNametag); 189ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return rc; 19023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 1915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)ESR_ReturnCode SR_NametagsSaveImpl(SR_Nametags* self, const LCHAR* filename) 193ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch{ 194ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch SR_NametagsImpl* impl = (SR_NametagsImpl*) self; 195ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ESR_ReturnCode rc; 1964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) PFile* file = NULL; 1974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) size_t size, i; 198ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch HashMap* nametags = impl->value; 199ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch SR_NametagImpl* nametag; 200ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch LCHAR* id; 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t len; 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LCHAR devicePath[P_PATH_MAX]; 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define NAMETAG_LENGTH 200 204effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch LCHAR nametagBuffer[NAMETAG_LENGTH]; 205effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch LCHAR number[MAX_UINT_DIGITS+1]; 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define NAMETAGID_LENGTH 20 20723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) /* "token\0" == 6 */ 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define TOKEN_LENGTH 6 + NAMETAGID_LENGTH 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LCHAR tokenName[TOKEN_LENGTH]; 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t num_written; 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (filename == NULL) 213f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) rc = ESR_INVALID_STATE; 215f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) PLogError(ESR_rc2str(rc)); 216f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) goto CLEANUP; 217f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 218f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) size = P_PATH_MAX; 219f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CHKLOG(rc, ESR_SessionGetLCHAR(L("cmdline.nametagPath"), devicePath, &size)); 220f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 221f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (LSTRNCMP(filename, devicePath, LSTRLEN(devicePath)) != 0) 222f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) LSTRCAT(devicePath, filename); 223f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) else 224f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) LSTRCPY(devicePath, filename); 225f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) file = pfopen ( devicePath, L("w")); 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* CHKLOG(rc, PFileSystemCreatePFile(devicePath, ESR_TRUE, &file)); 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHKLOG(rc, file->open(file, L("w")));*/ 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHKLOG(rc, nametags->getSize(nametags, &size)); 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if ( file == NULL ) 2325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) goto CLEANUP; 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (i = 0; i < size; ++i) 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHKLOG(rc, nametags->getValueAtIndex(nametags, i, (void **)&nametag)); 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CHKLOG(rc, nametag->Interface.getID(&nametag->Interface, &id)); 23923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (LSTRLEN(id) + 1 + LSTRLEN(nametag->value) + 2 >= NAMETAG_LENGTH) 24123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) { 2425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) rc = ESR_BUFFER_OVERFLOW; 2435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) PLogError(ESR_rc2str(rc)); 2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) goto CLEANUP; 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) psprintf(nametagBuffer, L("%s %s\n"), id, nametag->value); 247effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch len = LSTRLEN(nametagBuffer); 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* CHKLOG(rc, file->write(file, nametagBuffer, sizeof(LCHAR), &len));*/ 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) num_written = pfwrite ( nametagBuffer, sizeof ( LCHAR ), len, file ); 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if ( num_written != len ) 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) goto CLEANUP; 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (LSTRLEN(id) > NAMETAGID_LENGTH) 2555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) { 2565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) rc = ESR_BUFFER_OVERFLOW; 2575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) PLogError(ESR_rc2str(rc)); 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) goto CLEANUP; 25923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) } 26023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) psprintf(tokenName, L("nametag[%s]"), id); 2615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->logLevel, tokenName, nametag->value)); 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->logLevel, L("filename"), filename)); 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) len = MAX_UINT_DIGITS + 1; 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHKLOG(rc, lultostr(size, (LCHAR*) &number, &len, 10)); 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->logLevel, L("saveCount"), number)); 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->logLevel, L("SR_NametagsSave"))); 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pfclose (file); 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return ESR_SUCCESS; 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)CLEANUP: 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (file != NULL) 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pfclose (file); 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return rc; 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 27623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)ESR_ReturnCode SR_NametagsAddImpl(SR_Nametags* self, SR_Nametag* nametag) 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SR_NametagsImpl* impl = (SR_NametagsImpl*) self; 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HashMap* nametags = impl->value; 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LCHAR* id; 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ESR_BOOL exists; 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ESR_ReturnCode rc; 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHKLOG(rc, nametag->getID(nametag, &id)); 2855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CHKLOG(rc, nametags->containsKey(nametags, id, &exists)); 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (exists) 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->logLevel, L("id"), id)); 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) rc = ESR_IDENTIFIER_COLLISION; 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->logLevel, L("rc"), ESR_rc2str(rc))); 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->logLevel, L("SR_NametagsAdd"))); 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) rc = ESR_IDENTIFIER_COLLISION; 2935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) PLogError(ESR_rc2str(rc)); 294effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch goto CLEANUP; 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHKLOG(rc, nametags->put(nametags, id, nametag)); 2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->logLevel, L("id"), id)); 2995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->logLevel, L("SR_NametagsAdd"))); 3005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return ESR_SUCCESS; 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)CLEANUP: 3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return rc; 3035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 3045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ESR_ReturnCode SR_NametagsRemoveImpl(SR_Nametags* self, const LCHAR* id) 3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SR_NametagsImpl* impl = (SR_NametagsImpl*) self; 3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HashMap* nametags = impl->value; 3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ESR_ReturnCode rc; 3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHKLOG(rc, nametags->remove(nametags, id)); 312a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->logLevel, L("id"), id)); 3145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->logLevel, L("SR_NametagsRemove"))); 3155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return ESR_SUCCESS; 3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)CLEANUP: 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return rc; 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ESR_ReturnCode SR_NametagsGetSizeImpl(SR_Nametags* self, size_t* result) 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 3225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SR_NametagsImpl* impl = (SR_NametagsImpl*) self; 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HashMap* nametags = impl->value; 3245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ESR_ReturnCode rc; 32523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 326effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch CHKLOG(rc, nametags->getSize(nametags, result)); 3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return ESR_SUCCESS; 3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)CLEANUP: 3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return rc; 3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ESR_ReturnCode SR_NametagsGetImpl(SR_Nametags* self, const LCHAR* id, SR_Nametag** nametag) 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 3345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SR_NametagsImpl* impl = (SR_NametagsImpl*) self; 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HashMap* nametags = impl->value; 3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ESR_ReturnCode rc; 3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHKLOG(rc, nametags->get(nametags, id, (void **)nametag)); 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->logLevel, L("id"), id)); 3415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->logLevel, L("SR_NametagsGet"))); 34223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) return ESR_SUCCESS; 3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)CLEANUP: 344868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return rc; 345868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 346868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 347868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)ESR_ReturnCode SR_NametagsGetAtIndexImpl(SR_Nametags* self, size_t index, SR_Nametag** nametag) 348868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles){ 349868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SR_NametagsImpl* impl = (SR_NametagsImpl*) self; 350868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) HashMap* nametags = impl->value; 3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LCHAR* id; 3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ESR_ReturnCode rc; 3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHKLOG(rc, nametags->getValueAtIndex(nametags, index, (void **)nametag)); 3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CHKLOG(rc, (*nametag)->getID(*nametag, &id)); 3575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->logLevel, L("id"), id)); 358effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->logLevel, L("SR_NametagsGetAtIndex"))); 3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return ESR_SUCCESS; 36023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)CLEANUP: 3612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return rc; 36223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 36423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)ESR_ReturnCode SR_NametagsContainsImpl(SR_Nametags* self, const LCHAR* id, ESR_BOOL* result) 3652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 36623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) SR_NametagsImpl* impl = (SR_NametagsImpl*) self; 3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HashMap* nametags = impl->value; 3684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ESR_ReturnCode rc; 3694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 370 CHKLOG(rc, nametags->containsKey(nametags, id, result)); 371 return ESR_SUCCESS; 372CLEANUP: 373 return rc; 374} 375 376ESR_ReturnCode SR_NametagsDestroyImpl(SR_Nametags* self) 377{ 378 SR_NametagsImpl* impl = (SR_NametagsImpl*) self; 379 LCHAR number[MAX_UINT_DIGITS+1]; 380 ESR_ReturnCode rc; 381 382 if (impl->value != NULL) 383 { 384 size_t size, i, len; 385 HashMap* list = impl->value; 386 SR_Nametag* nametag; 387 388 CHKLOG(rc, list->getSize(list, &size)); 389 for (i = 0; i < size; ++i) 390 { 391 CHKLOG(rc, list->getValueAtIndex(list, 0, (void **)&nametag)); 392 CHKLOG(rc, list->removeAtIndex(list, 0)); 393 CHKLOG(rc, nametag->destroy(nametag)); 394 } 395 396 len = MAX_UINT_DIGITS + 1; 397 CHKLOG(rc, lultostr(size, (LCHAR*) &number, &len, 10)); 398 CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->logLevel, L("removeCount"), number)); 399 CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->logLevel, L("SR_NametagsDestroy"))); 400 list->destroy(list); 401 impl->value = NULL; 402 } 403 CHKLOG(rc, SR_EventLogTokenInt_BASIC(impl->eventLog, impl->logLevel, L("pointer"), (int) self)); 404 CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->logLevel, L("SR_NametagsDestroy"))); 405 impl->eventLog = NULL; 406 FREE(self); 407 return ESR_SUCCESS; 408CLEANUP: 409 return rc; 410} 411