14a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/*---------------------------------------------------------------------------* 24a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * NametagsImpl.c * 34a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 44a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Copyright 2007, 2008 Nuance Communciations, Inc. * 54a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 64a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the 'License'); * 74a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * you may not use this file except in compliance with the License. * 84a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 94a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * You may obtain a copy of the License at * 104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 * 114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Unless required by applicable law or agreed to in writing, software * 134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * distributed under the License is distributed on an 'AS IS' BASIS, * 144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * 154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * See the License for the specific language governing permissions and * 164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * limitations under the License. * 174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *---------------------------------------------------------------------------*/ 194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "ESR_Session.h" 214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "HashMap.h" 224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "LCHAR.h" 234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "plog.h" 244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "pmemory.h" 254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_NametagImpl.h" 264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_NametagsImpl.h" 274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define MTAG NULL 294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_NametagsCreate(SR_Nametags** self) 314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_NametagsImpl* impl; 334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (self == NULL) 364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("ESR_INVALID_ARGUMENT")); 384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_ARGUMENT; 394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl = NEW(SR_NametagsImpl, MTAG); 414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl == NULL) 424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("ESR_OUT_OF_MEMORY")); 444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_OUT_OF_MEMORY; 454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.load = &SR_NametagsLoadImpl; 484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.save = &SR_NametagsSaveImpl; 494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.add = &SR_NametagsAddImpl; 504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.remove = &SR_NametagsRemoveImpl; 514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.getSize = &SR_NametagsGetSizeImpl; 524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.get = &SR_NametagsGetImpl; 534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.getAtIndex = &SR_NametagsGetAtIndexImpl; 544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.contains = &SR_NametagsContainsImpl; 554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.destroy = &SR_NametagsDestroyImpl; 564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->value = NULL; 574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->eventLog = NULL; 584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, HashMapCreate(&impl->value)); 604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetSize_t(L("SREC.Recognizer.osi_log_level"), &impl->logLevel)); 614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->logLevel > 0) 624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetProperty(L("eventlog"), (void **)&impl->eventLog, TYPES_SR_EVENTLOG)); 63b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland CHKLOG(rc, SR_EventLogTokenPointer_BASIC(impl->eventLog, impl->logLevel, L("pointer"), self)); 644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->logLevel, L("SR_NametagsCreate"))); 654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *self = (SR_Nametags*) impl; 664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.destroy(&impl->Interface); 694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_NametagsLoadImpl(SR_Nametags* self, const LCHAR* filename) 734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_NametagsImpl* impl = (SR_NametagsImpl*) self; 754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PFile* file = NULL; 774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR line[256]; 784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR* result = NULL; 794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR* id; 804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR* value; 814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_Nametag* newNametag = NULL; 824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_Nametag* oldNametag; 834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project HashMap* nametags = impl->value; 844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t size, len, i; 854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR devicePath[P_PATH_MAX]; 864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR number[MAX_UINT_DIGITS+1]; 874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define NAMETAGID_LENGTH 20 884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* strlen("token\0") == 6 */ 894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define TOKEN_LENGTH 6 + NAMETAGID_LENGTH 904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR tokenName[TOKEN_LENGTH]; 914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (filename == NULL) 934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_INVALID_STATE; 954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size = P_PATH_MAX; 994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetLCHAR(L("cmdline.nametagPath"), devicePath, &size)); 1004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* check if the filename has the path */ 1014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (LSTRNCMP(filename, devicePath, LSTRLEN(devicePath)) != 0) 1024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LSTRCAT(devicePath, filename); 1034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 1044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LSTRCPY(devicePath, filename); 1054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project file = pfopen ( devicePath, L("r")); 1064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* CHKLOG(rc, PFileSystemCreatePFile(devicePath, ESR_TRUE, &file)); 1074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, file->open(file, L("r")));*/ 1084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ( file == NULL ) 1104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 1114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Flush collection */ 1134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, nametags->getSize(nametags, &size)); 1144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (i = 0; i < size; ++i) 1154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 1164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, nametags->getValueAtIndex(nametags, 0, (void **)&oldNametag)); 1174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, nametags->removeAtIndex(nametags, 0)); 1184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, oldNametag->destroy(oldNametag)); 1194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project len = MAX_UINT_DIGITS + 1; 1214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, lultostr(size, number, &len, 10)); 1224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->logLevel, L("removeCount"), number)); 1234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project while (ESR_TRUE) 1254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 1264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project result = pfgets ( line, 256, file ); 1274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (result == NULL) 1284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 1294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (LSTRLEN(line) == 255) 1304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 1314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_BUFFER_OVERFLOW; 1324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 1334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 1344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project lstrtrim(line); 1364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Get the Nametag ID */ 1384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project id = line; 1394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Find next whitespace */ 1414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (value = id + 1; *value != L('\0') && !LISSPACE(*value); ++value); 1424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (*value == L('\0')) 1434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 1444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_INVALID_STATE; 1454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("%s: Cannot find end of Nametag id"), ESR_rc2str(rc)); 1464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 1474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Delimit end of nametag ID */ 1494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *value = L('\0'); 1504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Find next non-whitespace */ 1524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (++value; *value != L('\0') && LISSPACE(*value); ++value); 1534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (*value == L('\0')) 1544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 1554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_INVALID_STATE; 1564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("%s: Cannot find Nametag value"), ESR_rc2str(rc)); 1574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 1584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* We now have both the Nametag ID and value */ 1614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project len = (LSTRLEN(value)+1) * sizeof(LCHAR) ; 1624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_NametagCreateFromValue(id, (const char*)value, len, &newNametag)); 1634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Add Nametag to collection */ 1644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, impl->value->put(impl->value, id, newNametag)); 1654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (LSTRLEN(id) > NAMETAGID_LENGTH) 1674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 1684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_BUFFER_OVERFLOW; 1694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 1704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 1714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project psprintf(tokenName, L("nametag[%s]"), id); 1734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->logLevel, tokenName, value)); 1744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project newNametag = NULL; 1754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->logLevel, L("filename"), filename)); 1774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, nametags->getSize(nametags, &size)); 1784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project len = MAX_UINT_DIGITS + 1; 1794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, lultostr(size, number, &len, 10)); 1804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->logLevel, L("addCount"), number)); 1814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->logLevel, L("SR_NametagsLoad"))); 1824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project pfclose (file); 1834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 1844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 1854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (file != NULL) 1864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project pfclose (file); 1874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (newNametag != NULL) 1884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project newNametag->destroy(newNametag); 1894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 1904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 1914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_NametagsSaveImpl(SR_Nametags* self, const LCHAR* filename) 1934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 1944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_NametagsImpl* impl = (SR_NametagsImpl*) self; 1954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 1964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PFile* file = NULL; 1974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t size, i; 1984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project HashMap* nametags = impl->value; 1994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_NametagImpl* nametag; 2004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR* id; 2014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t len; 2024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR devicePath[P_PATH_MAX]; 2034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define NAMETAG_LENGTH 200 2044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR nametagBuffer[NAMETAG_LENGTH]; 2054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR number[MAX_UINT_DIGITS+1]; 2064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define NAMETAGID_LENGTH 20 2074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* "token\0" == 6 */ 2084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define TOKEN_LENGTH 6 + NAMETAGID_LENGTH 2094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR tokenName[TOKEN_LENGTH]; 2104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t num_written; 2114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (filename == NULL) 2134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 2144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_INVALID_STATE; 2154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 2164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 2174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size = P_PATH_MAX; 2194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetLCHAR(L("cmdline.nametagPath"), devicePath, &size)); 2204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (LSTRNCMP(filename, devicePath, LSTRLEN(devicePath)) != 0) 2224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LSTRCAT(devicePath, filename); 2234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 2244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LSTRCPY(devicePath, filename); 2254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project file = pfopen ( devicePath, L("w")); 2274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* CHKLOG(rc, PFileSystemCreatePFile(devicePath, ESR_TRUE, &file)); 2284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, file->open(file, L("w")));*/ 2294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, nametags->getSize(nametags, &size)); 2304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ( file == NULL ) 2324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 2334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (i = 0; i < size; ++i) 2354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 2364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, nametags->getValueAtIndex(nametags, i, (void **)&nametag)); 2374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, nametag->Interface.getID(&nametag->Interface, &id)); 2394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (LSTRLEN(id) + 1 + LSTRLEN(nametag->value) + 2 >= NAMETAG_LENGTH) 2414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 2424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_BUFFER_OVERFLOW; 2434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 2444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 2454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project psprintf(nametagBuffer, L("%s %s\n"), id, nametag->value); 2474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project len = LSTRLEN(nametagBuffer); 2484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* CHKLOG(rc, file->write(file, nametagBuffer, sizeof(LCHAR), &len));*/ 2494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project num_written = pfwrite ( nametagBuffer, sizeof ( LCHAR ), len, file ); 2504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ( num_written != len ) 2524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 2534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (LSTRLEN(id) > NAMETAGID_LENGTH) 2554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 2564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_BUFFER_OVERFLOW; 2574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 2584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 2594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project psprintf(tokenName, L("nametag[%s]"), id); 2614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->logLevel, tokenName, nametag->value)); 2624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->logLevel, L("filename"), filename)); 2644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project len = MAX_UINT_DIGITS + 1; 2654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, lultostr(size, (LCHAR*) &number, &len, 10)); 2664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->logLevel, L("saveCount"), number)); 2674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->logLevel, L("SR_NametagsSave"))); 2684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project pfclose (file); 2694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 2704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 2714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (file != NULL) 2724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project pfclose (file); 2734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 2744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 2754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_NametagsAddImpl(SR_Nametags* self, SR_Nametag* nametag) 2774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 2784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_NametagsImpl* impl = (SR_NametagsImpl*) self; 2794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project HashMap* nametags = impl->value; 2804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR* id; 2814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_BOOL exists; 2824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 2834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, nametag->getID(nametag, &id)); 2854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, nametags->containsKey(nametags, id, &exists)); 2864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (exists) 2874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 2884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->logLevel, L("id"), id)); 2894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_IDENTIFIER_COLLISION; 2904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->logLevel, L("rc"), ESR_rc2str(rc))); 2914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->logLevel, L("SR_NametagsAdd"))); 2924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_IDENTIFIER_COLLISION; 2934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 2944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 2954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, nametags->put(nametags, id, nametag)); 2974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->logLevel, L("id"), id)); 2994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->logLevel, L("SR_NametagsAdd"))); 3004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 3014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 3024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 3034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 3044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_NametagsRemoveImpl(SR_Nametags* self, const LCHAR* id) 3064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 3074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_NametagsImpl* impl = (SR_NametagsImpl*) self; 3084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project HashMap* nametags = impl->value; 3094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 3104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, nametags->remove(nametags, id)); 3124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->logLevel, L("id"), id)); 3144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->logLevel, L("SR_NametagsRemove"))); 3154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 3164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 3174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 3184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 3194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_NametagsGetSizeImpl(SR_Nametags* self, size_t* result) 3214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 3224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_NametagsImpl* impl = (SR_NametagsImpl*) self; 3234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project HashMap* nametags = impl->value; 3244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 3254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, nametags->getSize(nametags, result)); 3274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 3284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 3294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 3304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 3314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_NametagsGetImpl(SR_Nametags* self, const LCHAR* id, SR_Nametag** nametag) 3334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 3344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_NametagsImpl* impl = (SR_NametagsImpl*) self; 3354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project HashMap* nametags = impl->value; 3364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 3374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, nametags->get(nametags, id, (void **)nametag)); 3394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->logLevel, L("id"), id)); 3414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->logLevel, L("SR_NametagsGet"))); 3424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 3434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 3444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 3454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 3464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_NametagsGetAtIndexImpl(SR_Nametags* self, size_t index, SR_Nametag** nametag) 3484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 3494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_NametagsImpl* impl = (SR_NametagsImpl*) self; 3504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project HashMap* nametags = impl->value; 3514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR* id; 3524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 3534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, nametags->getValueAtIndex(nametags, index, (void **)nametag)); 3554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, (*nametag)->getID(*nametag, &id)); 3574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->logLevel, L("id"), id)); 3584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->logLevel, L("SR_NametagsGetAtIndex"))); 3594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 3604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 3614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 3624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 3634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_NametagsContainsImpl(SR_Nametags* self, const LCHAR* id, ESR_BOOL* result) 3654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 3664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_NametagsImpl* impl = (SR_NametagsImpl*) self; 3674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project HashMap* nametags = impl->value; 3684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 3694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, nametags->containsKey(nametags, id, result)); 3714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 3724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 3734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 3744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 3754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_NametagsDestroyImpl(SR_Nametags* self) 3774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 3784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_NametagsImpl* impl = (SR_NametagsImpl*) self; 3794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR number[MAX_UINT_DIGITS+1]; 3804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 3814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->value != NULL) 3834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 3844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t size, i, len; 3854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project HashMap* list = impl->value; 3864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_Nametag* nametag; 3874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, list->getSize(list, &size)); 3894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (i = 0; i < size; ++i) 3904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 3914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, list->getValueAtIndex(list, 0, (void **)&nametag)); 3924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, list->removeAtIndex(list, 0)); 3934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, nametag->destroy(nametag)); 3944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 3954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project len = MAX_UINT_DIGITS + 1; 3974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, lultostr(size, (LCHAR*) &number, &len, 10)); 3984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->logLevel, L("removeCount"), number)); 3994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->logLevel, L("SR_NametagsDestroy"))); 4004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project list->destroy(list); 4014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->value = NULL; 4024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 403b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland CHKLOG(rc, SR_EventLogTokenPointer_BASIC(impl->eventLog, impl->logLevel, L("pointer"), self)); 4044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->logLevel, L("SR_NametagsDestroy"))); 4054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->eventLog = NULL; 4064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project FREE(self); 4074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 4084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 4094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 4104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 411