14a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 24a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/*---------------------------------------------------------------------------* 34a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * NametagImpl.c * 44a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 54a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Copyright 2007, 2008 Nuance Communciations, Inc. * 64a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 74a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the 'License'); * 84a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * you may not use this file except in compliance with the License. * 94a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * You may obtain a copy of the License at * 114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 * 124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Unless required by applicable law or agreed to in writing, software * 144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * distributed under the License is distributed on an 'AS IS' BASIS, * 154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * 164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * See the License for the specific language governing permissions and * 174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * limitations under the License. * 184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *---------------------------------------------------------------------------*/ 204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_Nametag.h" 224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_NametagImpl.h" 234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_RecognizerImpl.h" 244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_VocabularyImpl.h" 254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "plog.h" 264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "pmemory.h" 274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define MTAG NULL 294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define MAX_STRING_LEN P_PATH_MAX 304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_NametagCreate(const SR_RecognizerResult* result, const LCHAR* id, SR_Nametag** self) 324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_Locale locale; 344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t len; 364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR transcription[MAX_STRING_LEN]; 374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (self == NULL) 394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("ESR_INVALID_ARGUMENT")); 414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_ARGUMENT; 424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = result->getSize(result, &len); 454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc != ESR_SUCCESS) 464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (len < 1) 514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("ESR_INVALID_ARGUMENT (recognition result nbest-list size=0)")); 534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_INVALID_ARGUMENT; 544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = result->getLocale(result, &locale); 574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project len = MAX_STRING_LEN; 594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = result->getValue(result, 0, L("meaning"), transcription, &len); 614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc != ESR_SUCCESS && rc != ESR_BUFFER_OVERFLOW) 634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#if USE_HMM_BASED_ENROLLMENT /* srec_context.h */ 694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project len = LSTRLEN(transcription)+1; 704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = SR_NametagCreateFromValue(id, transcription, (int)len, self); 714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if(rc ) goto CLEANUP; 724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#else 734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if(1) { 754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR short_pron[MAX_STRING_LEN], *short_pron_ptr; 764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR* long_pron = transcription; 774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR* multichar; 784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR* p; 794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR singlechar[2]; 804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *short_pron = 0; 824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project short_pron_ptr = short_pron; 834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project len = LSTRLEN(L("ph_")); 844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (multichar = strtok(long_pron, L(" \t\n\r")); multichar; multichar = strtok(NULL, L(" \t\n\r"))) 854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project p = multichar; 874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (LSTRNCMP(p, L("ph_"), len) != 0) 884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("Expecting 'ph_' prefix, got=%s"), p); 904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_INVALID_STATE; 914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project p += len; 944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project multichar = p; 954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project while (*p) 964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (isdigit(*p)) 984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *p = L('\0'); 1004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 1014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ++p; 1034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ((rc = SR_Vocabulary_etiinf_conv_from_multichar(locale, multichar, singlechar)) != ESR_SUCCESS) 1054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 1064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("Could not convert long to short pron (input=%s, locale=%s)"), multichar, ESR_locale2str(locale)); 1074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 1084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project singlechar[1] = 0; 1104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if((short_pron_ptr - short_pron + 3) >= MAX_STRING_LEN) { 1114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("Chopping too long pron in SR_NametagCreate()\n")); 1124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; // just cut if off 1134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *short_pron_ptr++ = *singlechar; 1154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *short_pron_ptr++ = 0; // null-term 1174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *short_pron_ptr++ = 0; // double-null-term! 1184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* +2 = +1 for null, +1 for double-null */ 1204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = SR_NametagCreateFromValue(id, short_pron, (short_pron_ptr-short_pron), self); 1214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if(rc ) goto CLEANUP; 1224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif 1244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 1264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 1274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 1284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 1294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_NametagCreateFromValue(const LCHAR* id, const char* value, size_t len, SR_Nametag** self) 1314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 1324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_NametagImpl* impl; 1334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 1344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project passert(self != NULL); 1364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl = NEW(SR_NametagImpl, MTAG); 1374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl == NULL) 1384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 1394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("ESR_OUT_OF_MEMORY")); 1404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_OUT_OF_MEMORY; 1414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.setID = &SR_Nametag_SetID; 1444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.getID = &SR_Nametag_GetID; 1454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.getValue = &SR_Nametag_GetValue; 1464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.clone = &SR_Nametag_Clone; 1474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.destroy = &SR_Nametag_Destroy; 1484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->id = NULL; 1494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->value = NULL; 1504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->value = (LCHAR*) MALLOC(sizeof(LCHAR) * (len), MTAG); 1514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->value == NULL) 1534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 1544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_OUT_OF_MEMORY; 1554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 1564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 1574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->value_len = len; 1594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project // make sure we have a double-null term 1604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project memcpy( (void*)impl->value, value, len); 1614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LSTRNCPY(impl->value, value, len); 1624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = SR_NametagSetID(&impl->Interface, id); 1644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc != ESR_SUCCESS) 1654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 1664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 1674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 1684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *self = (SR_Nametag*) impl; 1714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 1724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 1734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.destroy(&impl->Interface); 1744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 1754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 1764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_Nametag_Destroy(SR_Nametag* self) 1784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 1794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_NametagImpl* impl = (SR_NametagImpl*) self; 1804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->value != NULL) 1814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 1824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project FREE(impl->value); 1834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->value = NULL; 1844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->id != NULL) 1864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 1874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project FREE(impl->id); 1884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->id = NULL; 1894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project FREE(impl); 1914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 1924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 1934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_Nametag_GetID(const SR_Nametag* self, LCHAR** id) 1954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 1964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_NametagImpl* impl = (SR_NametagImpl*) self; 1974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *id = impl->id; 1994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 2004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 2014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_Nametag_GetValue(const SR_Nametag* self, const char** pvalue, size_t* plen) 2034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 2044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_NametagImpl* impl = (SR_NametagImpl*) self; 2054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *pvalue = (const char*)impl->value; 2074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if(!impl->value) 2084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_NO_MATCH_ERROR; 2094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *plen = impl->value_len; 2104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 2114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 2124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_Nametag_SetID(SR_Nametag* self, const LCHAR* id) 2144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 2154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_NametagImpl* impl = (SR_NametagImpl*) self; 2164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 2174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project FREE(impl->id); 2194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->id = (LCHAR*) MALLOC(sizeof(LCHAR) * (LSTRLEN(id) + 1), MTAG); 2204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->id == NULL) 2214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 2224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_OUT_OF_MEMORY; 2234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 2244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 2254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LSTRCPY(impl->id, id); 2274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 2294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 2304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 2314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 2324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_Nametag_Clone(const SR_Nametag* self, SR_Nametag** result) 2344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 2354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_NametagImpl* impl = (SR_NametagImpl*) self; 2364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 2374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_NametagCreateFromValue(impl->id, impl->value, LSTRLEN(impl->value)+1, result)); 2394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 2404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 2414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 2424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 243