14a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/*---------------------------------------------------------------------------*
24a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  SessionTypeImpl.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
214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "ESR_SessionType.h"
224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "ESR_SessionTypeImpl.h"
234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "HashMap.h"
244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "IntArrayList.h"
254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "LCHAR.h"
264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "lstring.h"
274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "passert.h"
284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "pendian.h"
294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "PFile.h"
304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "PFileSystem.h"
314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "plog.h"
324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "pmemory.h"
334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "pstdio.h"
344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "string.h"
354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "ESR_SessionTypeListener.h"
364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define MTAG NULL
384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode ESR_SessionTypeCreate(ESR_SessionType** self)
404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_SessionType* Interface;
424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_SessionTypeData* data;
434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_ReturnCode rc;
444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (self == NULL)
464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    PLogError(L("ESR_OUT_OF_MEMORY"));
484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_OUT_OF_MEMORY;
494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Interface = NEW(ESR_SessionType, MTAG);
514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (Interface == NULL)
524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    PLogError(L("ESR_OUT_OF_MEMORY"));
544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_OUT_OF_MEMORY;
554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  data = NEW(ESR_SessionTypeData, MTAG);
574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (data == NULL)
584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    rc = ESR_OUT_OF_MEMORY;
604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    goto CLEANUP;
614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Interface->addListener = &ESR_SessionTypeAddListenerImpl;
654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Interface->contains = &ESR_SessionTypeContainsImpl;
664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Interface->convertToBool = &ESR_SessionTypeConvertToBoolImpl;
674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Interface->convertToFloat = &ESR_SessionTypeConvertToFloatImpl;
684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Interface->convertToInt = &ESR_SessionTypeConvertToIntImpl;
694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Interface->convertToUint16_t = &ESR_SessionTypeConvertToUint16_tImpl;
704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Interface->convertToSize_t = &ESR_SessionTypeConvertToSize_tImpl;
714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Interface->destroy = &ESR_SessionTypeDestroyImpl;
724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Interface->getBool = &ESR_SessionTypeGetBoolImpl;
734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Interface->getFloat = &ESR_SessionTypeGetFloatImpl;
744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Interface->getInt = &ESR_SessionTypeGetIntImpl;
754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Interface->getUint16_t = &ESR_SessionTypeGetUint16_tImpl;
764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Interface->getKeyAtIndex = &ESR_SessionTypeGetKeyAtIndexImpl;
774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Interface->getLCHAR = &ESR_SessionTypeGetLCHARImpl;
784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Interface->getProperty = &ESR_SessionTypeGetPropertyImpl;
794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Interface->getPropertyType = &ESR_SessionTypeGetPropertyTypeImpl;
804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Interface->getSize = &ESR_SessionTypeGetSizeImpl;
814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Interface->getSize_t = &ESR_SessionTypeGetSize_tImpl;
824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Interface->importCommandLine = &ESR_SessionTypeImportCommandLineImpl;
834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Interface->importParFile = &ESR_SessionTypeImportParFileImpl;
844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Interface->removeProperty = &ESR_SessionTypeRemovePropertyImpl;
854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Interface->removeAndFreeProperty = &ESR_SessionTypeRemoveAndFreePropertyImpl;
864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Interface->setBool = &ESR_SessionTypeSetBoolImpl;
874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Interface->setBoolIfEmpty = &ESR_SessionTypeSetBoolIfEmptyImpl;
884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Interface->setFloat = &ESR_SessionTypeSetFloatImpl;
894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Interface->setFloatIfEmpty = &ESR_SessionTypeSetFloatIfEmptyImpl;
904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Interface->setInt = &ESR_SessionTypeSetIntImpl;
914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Interface->setIntIfEmpty = &ESR_SessionTypeSetIntIfEmptyImpl;
924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Interface->setUint16_t = &ESR_SessionTypeSetUint16_tImpl;
934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Interface->setUint16_tIfEmpty = &ESR_SessionTypeSetUint16_tIfEmptyImpl;
944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Interface->setLCHAR = &ESR_SessionTypeSetLCHARImpl;
954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Interface->setLCHARIfEmpty = &ESR_SessionTypeSetLCHARIfEmptyImpl;
964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Interface->setProperty = &ESR_SessionTypeSetPropertyImpl;
974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Interface->setSize_t = &ESR_SessionTypeSetSize_tImpl;
984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Interface->setSize_tIfEmpty = &ESR_SessionTypeSetSize_tIfEmptyImpl;
994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Interface->removeListener = &ESR_SessionTypeRemoveListenerImpl;
1004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Interface->data = data;
1024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  data->value = NULL;
1034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  data->listeners = NULL;
1044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHK(rc, HashMapCreate(&data->value));
1064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHK(rc, ArrayListCreate(&data->listeners));
1074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  *self = Interface;
1084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
1094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP:
1104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Interface->destroy(Interface);
1114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return rc;
1124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/*
1154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Because there are no functions to set and get int size_t parameters and because most if not
1164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * all int parameters should be size_t anyway, I am adding code to allow size_t and int parameters
1174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * to be considered equal. Besides, this check is kind of overkill anyway. SteveR
1184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */
1194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode ESR_SessionTypeGetPropertyImpl(ESR_SessionType* self,
1214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const LCHAR* name, void** value,
1224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    VariableTypes type)
1234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
1244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_SessionTypeData* data = self->data;
1254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_SessionPair* pair;
1264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_ReturnCode rc;
1274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHK(rc, HashMapGet(data->value, name, (void **)&pair));
1294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if ( ( pair->type != type) && ( ( ( pair->type != TYPES_INT ) && ( type != TYPES_SIZE_T ) ) ||
1304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      ( ( type != TYPES_INT ) && ( pair->type != TYPES_SIZE_T ) ) ) )
1314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
1324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    PLogError(L("ESR_INVALID_RESULT_TYPE: [got=%d, expected=%d]"), type, pair->type);
1334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_INVALID_RESULT_TYPE;
1344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
1354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  *value = pair->value;
1364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
1374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP:
1384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return rc;
1394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode ESR_SessionTypeGetIntImpl(ESR_SessionType* self,
1424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const LCHAR* name, int* value)
1434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
1444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_ReturnCode rc;
1454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_SessionTypeData* data;
1464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_SessionPair* pair;
1474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  data = self->data;
1494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHK(rc, HashMapGet(data->value, name, (void **)&pair));
1504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if ( ( pair->type != TYPES_INT ) && ( pair->type != TYPES_SIZE_T ) )
1514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
1524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    PLogError(L("ESR_INVALID_RESULT_TYPE: [got=%d, expected=%d]"), TYPES_INT, pair->type);
1534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_INVALID_RESULT_TYPE;
1544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
1554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  *value = *((int*) pair->value);
1564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
1574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP:
1584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return rc;
1594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode ESR_SessionTypeGetUint16_tImpl(ESR_SessionType* self,
1624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const LCHAR* name, asr_uint16_t* value)
1634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
1644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_ReturnCode rc;
1654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_SessionTypeData* data;
1664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_SessionPair* pair;
1674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  data = self->data;
1694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHK(rc, HashMapGet(data->value, name, (void **)&pair));
1704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (pair->type != TYPES_UINT16_T)
1714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
1724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    PLogError(L("ESR_INVALID_RESULT_TYPE: [got=%d, expected=%d]"), TYPES_UINT16_T, pair->type);
1734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_INVALID_RESULT_TYPE;
1744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
1754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  *value = *((asr_uint16_t*) pair->value);
1764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
1774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP:
1784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return rc;
1794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode ESR_SessionTypeGetSize_tImpl(ESR_SessionType* self,
1824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const LCHAR* name,
1834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    size_t* value)
1844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
1854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_ReturnCode rc;
1864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_SessionTypeData* data;
1874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_SessionPair* pair;
1884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  data = self->data;
1904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, HashMapGet(data->value, name, (void **)&pair));
1914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if ( ( pair->type != TYPES_INT ) && ( pair->type != TYPES_SIZE_T ) )
1924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
1934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    PLogError(L("ESR_INVALID_RESULT_TYPE: [got=%d, expected=%d]"), TYPES_SIZE_T, pair->type);
1944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_INVALID_RESULT_TYPE;
1954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
1964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  *value = *((size_t*) pair->value);
1974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
1984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP:
1994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return rc;
2004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
2014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode ESR_SessionTypeGetFloatImpl(ESR_SessionType* self,
2034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const LCHAR* name, float* value)
2044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
2054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_ReturnCode rc;
2064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_SessionTypeData* data;
2074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_SessionPair* pair;
2084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  data = self->data;
2104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHK(rc, HashMapGet(data->value, name, (void **)&pair));
2114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (pair->type != TYPES_FLOAT)
2124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
2134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    PLogError(L("ESR_INVALID_RESULT_TYPE: [got=%d, expected=%d]"), TYPES_FLOAT, pair->type);
2144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_INVALID_RESULT_TYPE;
2154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
2164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  *value = *((float*) pair->value);
2174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
2184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP:
2194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return rc;
2204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
2214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode ESR_SessionTypeGetBoolImpl(ESR_SessionType* self,
2234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const LCHAR* name, ESR_BOOL* value)
2244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
2254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_ReturnCode rc;
2264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_SessionTypeData* data;
2274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_SessionPair* pair;
2284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  data = self->data;
2304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHK(rc, HashMapGet(data->value, name, (void **)&pair));
2314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (pair->type != TYPES_BOOL)
2324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
2334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    PLogError(L("ESR_INVALID_RESULT_TYPE: [got=%d, expected=%d]"), TYPES_BOOL, pair->type);
2344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_INVALID_RESULT_TYPE;
2354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
2364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  *value = *((ESR_BOOL*) pair->value);
2374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
2384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP:
2394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return rc;
2404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
2414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode ESR_SessionTypeGetLCHARImpl(ESR_SessionType* self,
2434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const LCHAR* name,
2444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    LCHAR* value, size_t* len)
2454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
2464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  LCHAR* lValue;
2474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_ReturnCode rc;
2484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_SessionTypeData* data;
2494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_SessionPair* pair;
2504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (name == NULL || value == NULL || len == NULL)
2524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_INVALID_ARGUMENT;
2534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  data = self->data;
2544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHK(rc, HashMapGet(data->value, name, (void **)&pair));
2564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (pair->type != TYPES_PLCHAR)
2574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
2584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    PLogError(L("ESR_INVALID_RESULT_TYPE: [got=%d, expected=%d]"), TYPES_PLCHAR, pair->type);
2594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_INVALID_RESULT_TYPE;
2604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
2614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  lValue = (LCHAR*) pair->value;
2624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (LSTRLEN(pair->value) + 1 > *len)
2634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
2644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    *len = LSTRLEN(lValue) + 1;
2654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_BUFFER_OVERFLOW;
2664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
2674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  LSTRCPY(value, lValue);
2684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
2694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP:
2704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return rc;
2714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
2724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode ESR_SessionTypeContainsImpl(ESR_SessionType* self,
2744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const LCHAR* name, ESR_BOOL* exists)
2754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
2764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_SessionTypeData* data = self->data;
2774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return HashMapContainsKey(data->value, name, exists);
2794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
2804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic ESR_ReturnCode firePropertyChanged(ESR_SessionType* self, const LCHAR* name,
2824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const void* oldValue, const void* newValue,
2834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    enum VariableTypes_t type)
2844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
2854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_SessionTypeData* data = self->data;
2864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ArrayList* list = data->listeners;
2874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  size_t size, i;
2884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_SessionTypeListenerPair* listener;
2894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_ReturnCode rc;
2904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, list->getSize(list, &size));
2924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  for (i = 0; i < size; ++i)
2934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
2944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    CHKLOG(rc, list->get(list, i, (void **)&listener));
2954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    CHKLOG(rc, listener->listener->propertyChanged(listener->listener, name, oldValue, newValue, type, listener->data));
2964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
2974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
2984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP:
2994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return rc;
3004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
3014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode ESR_SessionTypeSetPropertyImpl(ESR_SessionType* self,
3034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const LCHAR* name, void* value,
3044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    VariableTypes type)
3054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
3064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_SessionTypeData* data = self->data;
3074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_SessionPair* pair = NULL;
3084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_BOOL exists;
3094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_ReturnCode rc;
3104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, HashMapContainsKey(data->value, name, &exists));
3124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if ( exists )
3134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
3144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* We allow change of parameters through the recognizer and we rely on the recognizer to do
3154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * all of the needed validation. SteveR
3164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */
3174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* Deleting the old entry seems stupid, but it's the only way to prevent a memory leak,
3184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * since the old data is not returned when you add the new data. SteveR
3194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */
3204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    CHKLOG ( rc, ESR_SessionTypeRemoveAndFreePropertyImpl ( self, name ) );
3214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
3224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  pair = NEW(ESR_SessionPair, MTAG);
3234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (pair == NULL)
3244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
3254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    PLogError(L("ESR_OUT_OF_MEMORY"));
3264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_OUT_OF_MEMORY;
3274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
3284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  pair->value = value;
3294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  pair->type = type;
3304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, firePropertyChanged(self, name, NULL, value, type));
3324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, HashMapPut(data->value, name, pair));
3334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
3344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP:
3354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* The cleanup potentially leaks memory which could be cleard up with  FREE ( pair->value );
3364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * but you can't guarantee that the value was allocated. A leak is better than a crash. SteveR
3374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */
3384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  FREE(pair);
3394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return rc;
3404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
3414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode ESR_SessionTypeSetIntImpl(ESR_SessionType* self,
3434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const LCHAR* name, int value)
3444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
3454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_SessionTypeData* data;
3464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  int* clone;
3474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  data = self->data;
3494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  clone = MALLOC(sizeof(int), MTAG);
3504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (clone == NULL)
3514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
3524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    PLogError(L("ESR_OUT_OF_MEMORY"));
3534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_OUT_OF_MEMORY;
3544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
3554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  *clone = value;
3574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return self->setProperty(self, name, clone, TYPES_INT);
3584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
3594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode ESR_SessionTypeSetUint16_tImpl(ESR_SessionType* self,
3614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const LCHAR* name, asr_uint16_t value)
3624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
3634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_SessionTypeData* data;
3644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  asr_uint16_t* clone;
3654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  data = self->data;
3674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  clone = MALLOC(sizeof(asr_uint16_t), MTAG);
3684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (clone == NULL)
3694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
3704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    PLogError(L("ESR_OUT_OF_MEMORY"));
3714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_OUT_OF_MEMORY;
3724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
3734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  *clone = value;
3754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return self->setProperty(self, name, clone, TYPES_UINT16_T);
3764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
3774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode ESR_SessionTypeSetSize_tImpl(ESR_SessionType* self,
3794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const LCHAR* name, size_t value)
3804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
3814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_SessionTypeData* data;
3824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  int* clone;
3834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  data = self->data;
3854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  clone = MALLOC(sizeof(size_t), MTAG);
3864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (clone == NULL)
3874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
3884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    PLogError(L("ESR_OUT_OF_MEMORY"));
3894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_OUT_OF_MEMORY;
3904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
3914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  *clone = value;
3934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return self->setProperty(self, name, clone, TYPES_SIZE_T);
3944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
3954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
3964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode ESR_SessionTypeSetFloatImpl(ESR_SessionType* self,
3974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const LCHAR* name, float value)
3984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
3994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_SessionTypeData* data;
4004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  float* clone;
4014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  data = self->data;
4034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  clone = MALLOC(sizeof(float), MTAG);
4044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (clone == NULL)
4054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
4064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    PLogError(L("ESR_OUT_OF_MEMORY"));
4074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_OUT_OF_MEMORY;
4084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
4094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  *clone = value;
4114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return self->setProperty(self, name, clone, TYPES_FLOAT);
4124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
4134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode ESR_SessionTypeSetBoolImpl(ESR_SessionType* self,
4154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const LCHAR* name, ESR_BOOL value)
4164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
4174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_SessionTypeData* data;
4184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_BOOL* clone;
4194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  data = self->data;
4214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  clone = MALLOC(sizeof(ESR_BOOL), MTAG);
4224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (clone == NULL)
4234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
4244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    PLogError(L("ESR_OUT_OF_MEMORY"));
4254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_OUT_OF_MEMORY;
4264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
4274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  *clone = value;
4294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return self->setProperty(self, name, clone, TYPES_BOOL);
4304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
4314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode ESR_SessionTypeSetLCHARImpl(ESR_SessionType* self,
4334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const LCHAR* name, LCHAR* value)
4344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
4354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_SessionTypeData* data;
4364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  LCHAR* clone;
4374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  data = self->data;
4394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  clone = MALLOC(sizeof(LCHAR) * (LSTRLEN(value) + 1), MTAG);
4404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (clone == NULL)
4414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
4424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    PLogError(L("ESR_OUT_OF_MEMORY"));
4434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_OUT_OF_MEMORY;
4444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
4454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  LSTRCPY(clone, value);
4474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return self->setProperty(self, name, clone, TYPES_PLCHAR);
4484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
4494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode ESR_SessionTypeSetIntIfEmptyImpl(ESR_SessionType* self,
4514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const LCHAR* name, int value)
4524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
4534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_BOOL exists;
4544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_ReturnCode rc;
4554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHK(rc, self->contains(self, name, &exists));
4574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (exists)
4584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_SUCCESS;
4594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return self->setInt(self, name, value);
4604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP:
4614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return rc;
4624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
4634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode ESR_SessionTypeSetUint16_tIfEmptyImpl(ESR_SessionType* self,
4654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const LCHAR* name, asr_uint16_t value)
4664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
4674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_BOOL exists;
4684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_ReturnCode rc;
4694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHK(rc, self->contains(self, name, &exists));
4714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (exists)
4724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_SUCCESS;
4734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return self->setInt(self, name, value);
4744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP:
4754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return rc;
4764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
4774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode ESR_SessionTypeSetSize_tIfEmptyImpl(ESR_SessionType* self,
4794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const LCHAR* name, size_t value)
4804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
4814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_BOOL exists;
4824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_ReturnCode rc;
4834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHK(rc, self->contains(self, name, &exists));
4854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (exists)
4864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_SUCCESS;
4874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return self->setSize_t(self, name, value);
4884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP:
4894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return rc;
4904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
4914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode ESR_SessionTypeSetFloatIfEmptyImpl(ESR_SessionType* self,
4934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const LCHAR* name, float value)
4944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
4954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_BOOL exists;
4964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_ReturnCode rc;
4974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
4984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHK(rc, self->contains(self, name, &exists));
4994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (exists)
5004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_SUCCESS;
5014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return self->setFloat(self, name, value);
5024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP:
5034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return rc;
5044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
5054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
5064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode ESR_SessionTypeSetBoolIfEmptyImpl(ESR_SessionType* self,
5074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const LCHAR* name, ESR_BOOL value)
5084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
5094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_BOOL exists;
5104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_ReturnCode rc;
5114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
5124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHK(rc, self->contains(self, name, &exists));
5134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (exists)
5144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_SUCCESS;
5154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return self->setBool(self, name, value);
5164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP:
5174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return rc;
5184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
5194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
5204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode ESR_SessionTypeSetLCHARIfEmptyImpl(ESR_SessionType* self,
5214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const LCHAR* name, LCHAR* value)
5224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
5234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_BOOL exists;
5244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_ReturnCode rc;
5254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
5264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHK(rc, self->contains(self, name, &exists));
5274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (exists)
5284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_SUCCESS;
5294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return self->setLCHAR(self, name, value);
5304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP:
5314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return rc;
5324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
5334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
5344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode ESR_SessionTypeRemovePropertyImpl(ESR_SessionType* self,
5354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const LCHAR* name)
5364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
5374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_ReturnCode rc;
5384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_SessionTypeData* data = self->data;
5394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_SessionPair* pair;
5404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
5414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHK(rc, HashMapGet(data->value, name, (void **)&pair));
5424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, firePropertyChanged(self, name, pair->value, NULL, pair->type));
5434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHK(rc, HashMapRemove(data->value, name));
5444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  FREE(pair);
5454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
5464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP:
5474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return rc;
5484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
5494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
5504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode ESR_SessionTypeRemoveAndFreePropertyImpl(ESR_SessionType* self,
5514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const LCHAR* name)
5524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
5534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_ReturnCode rc;
5544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_SessionTypeData* data = self->data;
5554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_SessionPair* pair;
5564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_SessionPair temp;
5574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  IntArrayList* intList;
5584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
5594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHK(rc, data->value->get(data->value, name, (void **)&pair));
5604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  temp = *pair;
5614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHK(rc, self->removeProperty(self, name));
5624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (temp.value)
5634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
5644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if (temp.type == TYPES_INTARRAYLIST)
5654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
5664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      intList = temp.value;
5674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      intList->destroy(intList);
5684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
5694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    else
5704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      FREE(temp.value);
5714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
5724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
5734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP:
5744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return rc;
5754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
5764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
5774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode ESR_SessionTypeImportCommandLineImpl(ESR_SessionType* self,
5784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    int argc, LCHAR* argv[])
5794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
5804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  char* key = NULL;
5814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  char* value = NULL;
5824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  VariableTypes type;
5834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_ReturnCode rc;
5844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
5854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  while (--argc > 0 && **++argv)
5864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
5874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if (**argv != '-')
5884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
5894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      /* got value */
5904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      if (key == NULL)
5914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      {
5924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        /* but we don't have any key to associate it with */
5934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        pfprintf(PSTDERR, "Options must be prefixed by '-'%s\n", *argv);
5944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      }
5954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      else
5964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      {
5974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        rc = self->getPropertyType(self, key, &type);
5984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        if (rc == ESR_SUCCESS)
5994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        {
6004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project          CHKLOG(rc, self->getProperty(self, key, (void **)&value, type));
6014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project          CHKLOG(rc, self->removeProperty(self, key));
6024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project          FREE(value);
6034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project          value = NULL;
6044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        }
6054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        else if (rc != ESR_NO_MATCH_ERROR)
6064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        {
6074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project          PLogError(ESR_rc2str(rc));
6084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project          goto CLEANUP;
6094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        }
6104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        value = MALLOC(sizeof(LCHAR) * (strlen(*argv) + 1), MTAG);
6114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        if (value == NULL)
6124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        {
6134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project          rc = ESR_OUT_OF_MEMORY;
6144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project          PLogError(L("ESR_OUT_OF_MEMORY"));
6154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project          goto CLEANUP;
6164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        }
6174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        LSTRCPY(value, *argv);
6184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        CHKLOG(rc, self->setProperty(self, key, value, TYPES_PLCHAR));
6194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        FREE(key);
6204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        key = NULL;
6214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        value = NULL;
6224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      }
6234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
6244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    else
6254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
6264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      /* got key */
6274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      if (key != NULL)
6284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      {
6294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        /* But we already have a key without a value, so set the old key's value to "" */
6304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        rc = self->getPropertyType(self, key, &type);
6314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        if (rc == ESR_SUCCESS)
6324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        {
6334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project          CHKLOG(rc, self->getProperty(self, key, (void **)&value, type));
6344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project          CHKLOG(rc, self->removeProperty(self, key));
6354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project          FREE(value);
6364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project          value = NULL;
6374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        }
6384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        else if (rc != ESR_NO_MATCH_ERROR)
6394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        {
6404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project          PLogError(ESR_rc2str(rc));
6414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project          goto CLEANUP;
6424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        }
6434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        value = MALLOC(sizeof(LCHAR) + 1, MTAG);
6444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        strcpy(value, "");
6454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        CHKLOG(rc, self->setProperty(self, key, value, TYPES_PLCHAR));
6464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        FREE(key);
6474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        value = NULL;
6484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      }
6494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      key = MALLOC(sizeof(LCHAR) * (LSTRLEN("cmdline.") + LSTRLEN(*argv) + 1), MTAG);
6504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      if (key == NULL)
6514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      {
6524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        rc = ESR_OUT_OF_MEMORY;
6534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        PLogError(L("ESR_OUT_OF_MEMORY"));
6544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        goto CLEANUP;
6554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      }
6564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      LSTRCPY(key, "cmdline.");
6574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      LSTRCAT(key, *argv + 1);
6584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
6594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
6604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
6614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP:
6624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (key != NULL)
6634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    FREE(key);
6644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (value != NULL)
6654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    FREE(value);
6664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return rc;
6674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
6684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
6694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode ESR_SessionTypeGetSizeImpl(ESR_SessionType* self, size_t* size)
6704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
6714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_SessionTypeData* data = self->data;
6724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_ReturnCode rc;
6734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
6744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHK(rc, HashMapGetSize(data->value, size));
6754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
6764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP:
6774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return rc;
6784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
6794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
6804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode ESR_SessionTypeGetKeyAtIndexImpl(ESR_SessionType* self,
6814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    size_t index, LCHAR** key)
6824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
6834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_SessionTypeData* data = self->data;
6844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_ReturnCode rc;
6854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
6864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHK(rc, HashMapGetKeyAtIndex(data->value, index, key));
6874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
6884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP:
6894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return rc;
6904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
6914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
6924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode ESR_SessionTypeConvertToIntImpl(ESR_SessionType* self,
6934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const LCHAR* key)
6944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
6954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  LCHAR* value;
6964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  int *newValue = NULL;
6974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_ReturnCode rc;
6984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
6994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHK(rc, self->getProperty(self, key, (void **)&value, TYPES_PLCHAR));
7004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (value == NULL)
7014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_SUCCESS;
7024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  newValue = MALLOC(sizeof(long), MTAG);
7034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (newValue == NULL)
7044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
7054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    rc = ESR_OUT_OF_MEMORY;
7064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    goto CLEANUP;
7074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
7084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, lstrtoi(value, newValue, 10));
7094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, self->setProperty(self, key, newValue, TYPES_INT));
7104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  FREE(value);
7114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
7124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP:
7134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (newValue != NULL)
7144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    FREE(newValue);
7154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return rc;
7164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
7174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
7184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode ESR_SessionTypeConvertToUint16_tImpl(ESR_SessionType* self,
7194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const LCHAR* key)
7204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
7214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  LCHAR* value;
7224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  int *newValue = NULL;
7234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_ReturnCode rc;
7244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
7254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHK(rc, self->getProperty(self, key, (void **)&value, TYPES_PLCHAR));
7264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (value == NULL)
7274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_SUCCESS;
7284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  newValue = MALLOC(sizeof(long), MTAG);
7294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (newValue == NULL)
7304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
7314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    rc = ESR_OUT_OF_MEMORY;
7324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    goto CLEANUP;
7334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
7344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, lstrtoi(value, newValue, 10));
7354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, self->setProperty(self, key, newValue, TYPES_UINT16_T));
7364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  FREE(value);
7374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
7384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP:
7394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (newValue != NULL)
7404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    FREE(newValue);
7414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return rc;
7424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
7434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
7444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode ESR_SessionTypeConvertToSize_tImpl(ESR_SessionType* self,
7454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const LCHAR* key)
7464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
7474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  LCHAR* value;
7484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  size_t* newValue = NULL;
7494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_ReturnCode rc;
7504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
7514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHK(rc, self->getProperty(self, key, (void **)&value, TYPES_PLCHAR));
7524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (value == NULL)
7534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_SUCCESS;
7544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  newValue = MALLOC(sizeof(size_t), MTAG);
7554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (newValue == NULL)
7564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
7574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    rc = ESR_OUT_OF_MEMORY;
7584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    goto CLEANUP;
7594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
760b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland  CHKLOG(rc, lstrtosize_t(value, newValue, 10));
7614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, self->setProperty(self, key, newValue, TYPES_SIZE_T));
7624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  FREE(value);
7634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
7644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP:
7654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (newValue != NULL)
7664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    FREE(newValue);
7674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return rc;
7684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
7694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
7704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode ESR_SessionTypeConvertToFloatImpl(ESR_SessionType* self,
7714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const LCHAR* key)
7724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
7734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  LCHAR* value;
7744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  float *newValue = NULL;
7754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_ReturnCode rc;
7764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
7774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHK(rc, self->getProperty(self, key, (void **)&value, TYPES_PLCHAR));
7784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (value == NULL)
7794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_SUCCESS;
7804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  newValue = MALLOC(sizeof(double), MTAG);
7814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (newValue == NULL)
7824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
7834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    rc = ESR_OUT_OF_MEMORY;
7844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    goto CLEANUP;
7854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
7864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, lstrtof(value, newValue));
7874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, self->setProperty(self, key, newValue, TYPES_FLOAT));
7884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  FREE(value);
7894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
7904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP:
7914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (newValue != NULL)
7924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    FREE(newValue);
7934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return rc;
7944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
7954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
7964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode ESR_SessionTypeConvertToBoolImpl(ESR_SessionType* self,
7974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const LCHAR* key)
7984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
7994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  LCHAR* value;
8004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_BOOL *newValue = NULL;
8014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_ReturnCode rc;
8024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
8034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHK(rc, self->getProperty(self, key, (void **)&value, TYPES_PLCHAR));
8044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (value == NULL)
8054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_SUCCESS;
8064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  newValue = MALLOC(sizeof(ESR_BOOL), MTAG);
8074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (newValue == NULL)
8084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
8094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    rc = ESR_OUT_OF_MEMORY;
8104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    goto CLEANUP;
8114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
8124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  rc = lstrtob(value, newValue);
8134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (rc != ESR_SUCCESS)
8144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
8154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    FREE(newValue);
8164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return rc;
8174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
8184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  rc = self->setProperty(self, key, newValue, TYPES_BOOL);
8194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (rc != ESR_SUCCESS)
8204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
8214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    FREE(newValue);
8224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return rc;
8234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
8244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  FREE(value);
8254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
8264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP:
8274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (newValue != NULL)
8284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    FREE(newValue);
8294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return rc;
8304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
8314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
8324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/**
8334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Imports file containing [key, value] pairs into session.
8344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *
8354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param self ESR_SessionType handle
8364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param filename File to read session from
8374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param addMapping Function used to map keys to their type and add them to the session
8384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param data Data used by the mapping function
8394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */
8404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic ESR_ReturnCode importKeyValueFile(ESR_SessionType* self,
8414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const LCHAR* filename,
8424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    ESR_ReturnCode(*addMapping)(ESR_SessionType* self, const LCHAR* key, LCHAR* value, void* data),
8434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    void* data)
8444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
8454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  const size_t LINE_SIZE = 512;
8464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  LCHAR key[512];
8474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  LCHAR buffer[512];
8484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  LCHAR* value;
8494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  LCHAR* ending;
8504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  LCHAR* line;
8514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  PFile* file = NULL;
8524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_BOOL lineSpan = ESR_FALSE;
8534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  LString* valueBuffer = NULL;
8544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_ReturnCode rc = ESR_SUCCESS;
8554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
8564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (filename == NULL)
8574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_INVALID_ARGUMENT;
8584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
8594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  file = pfopen ( filename, L("r") );
8604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/*  CHKLOG(rc, PFileSystemCreatePFile(filename, ESR_TRUE, &file));
8614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, PFileOpen(file, L("r")));*/
8624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
8634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (file == NULL)
8644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
8654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    LCHAR msg[P_PATH_MAX + 30];
8664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    LCHAR cwd[P_PATH_MAX];
8674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    size_t len;
8684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
8694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    len = P_PATH_MAX;
8704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    CHKLOG(rc, pf_get_cwd (cwd, &len));
8714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    psprintf(msg, L("ESR_OPEN_FILE_ERROR(filename=%s, cwd=%s)"), filename, cwd);
8724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    rc = ESR_OPEN_ERROR;
8734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    PLogError(msg);
8744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    goto CLEANUP;
8754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
8764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
8774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  rc = LStringCreate(&valueBuffer);
8784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (rc != ESR_SUCCESS)
8794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    goto CLEANUP;
8804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
8814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  line = buffer;
8824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  while (ESR_TRUE)
8834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
8844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    line = pfgets(line, LINE_SIZE, file);
8854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if (line == NULL)
8864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
8874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      if (pfeof(file))
8884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        break;
8894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      rc = ESR_READ_ERROR;
8904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      PLogError(ESR_rc2str(rc));
8914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      goto CLEANUP;
8924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
8934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if (LSTRLEN(line) == LINE_SIZE)
8944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
8954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      PLogError(L("%s: line surpasses %d character limit: '%s'"), filename, line);
8964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      continue;
8974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
8984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    lstrtrim(line);
8994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if (LSTRLEN(line) == 0 || line[0] == '#')
9004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      continue;
9014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
9024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if (!lineSpan)
9034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
9044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      if (rc != ESR_SUCCESS) goto CLEANUP;
9054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
9064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      /* locate the key and value pair */
9074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      ending = LSTRCHR(line, '=');
9084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      if (ending == NULL)
9094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      {
9104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        fprintf(stderr, "Missing equal sign on line '%s'\n", line);
9114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        continue;
9124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      }
9134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      *ending = L('\0');
9144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      value = ending + 1;
9154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
9164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    else
9174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      value = line;
9184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
9194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    /* Optionally use ';' to denote end of value */
9204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    ending = LSTRCHR(value, L(';'));
9214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if (ending != NULL)
9224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      *ending = L('\0');
9234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    else
9244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
9254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      ending = LSTRCHR(value, L('\n'));
9264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      if (ending != NULL)
9274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        *ending = L('\0');
9284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
9294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if (!lineSpan)
9304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
9314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      LSTRCPY(key, line);
9324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      lstrtrim(key);
9334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
9344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if (LSTRLEN(value) == 0)
9354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
9364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      pfprintf(PSTDERR, L("Missing value for '%s'\n"), key);
9374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      continue;
9384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
9394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    lstrtrim(value);
9404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if ((ending = LSTRCHR(value, '\\')) == (value + LSTRLEN(value) - 1))
9414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
9424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      /* found '\\' at end of line which means data will span to the next line */
9434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      lineSpan = ESR_TRUE;
9444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      *ending = L('\0');
9454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
9464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    else
9474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      lineSpan = ESR_FALSE;
9484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    rc = LStringAppend(valueBuffer, value);
9494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if (rc != ESR_SUCCESS)
9504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
9514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      PLogError(ESR_rc2str(rc));
9524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      goto CLEANUP;
9534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
9544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if (!lineSpan)
9554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
9564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      rc = LStringToLCHAR(valueBuffer, &value);
9574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      valueBuffer = NULL;
9584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      if (rc != ESR_SUCCESS)
9594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      {
9604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        PLogError(ESR_rc2str(rc));
9614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        goto CLEANUP;
9624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      }
9634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      rc = addMapping(self, key, value, data);
9644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      if (value != NULL)
9654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      {
9664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        FREE(value);
9674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        value = NULL;
9684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      }
9694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      if (rc != ESR_SUCCESS)
9704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      {
9714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        PLogError(ESR_rc2str(rc));
9724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        goto CLEANUP;
9734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      }
9744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      rc = LStringCreate(&valueBuffer);
9754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      if (rc != ESR_SUCCESS)
9764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      {
9774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        PLogError(ESR_rc2str(rc));
9784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        goto CLEANUP;
9794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      }
9804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
9814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
9824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
9834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (pferror(file))
9844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
9854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    rc = ESR_READ_ERROR;
9864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    PLogError(ESR_rc2str(rc));
9874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    goto CLEANUP;
9884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
9894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (pfclose(file) != 0)
9904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
9914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    rc = ESR_CLOSE_ERROR;
9924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    PLogError(ESR_rc2str(rc));
9934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    goto CLEANUP;
9944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
9954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (valueBuffer != NULL)
9964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    LStringDestroy(valueBuffer);
9974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
9984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP:
9994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (file != NULL)
10004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    pfclose(file);
10014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (valueBuffer != NULL)
10024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    LStringDestroy(valueBuffer);
10034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return rc;
10044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
10054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
10064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/**
10074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Appends a collection of integers stored in string format to an IntArrayList.
10084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *
10094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param self ESR_SessionType handle
10104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param text Text containing integers
10114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param list List to be populated
10124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */
10134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic ESR_ReturnCode parseIntList(ESR_SessionType* self,
10144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project                                   LCHAR* text, IntArrayList* list)
10154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
10164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  size_t size, pos, beginning;
10174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  int value;
10184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_ReturnCode rc;
10194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
10204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  size = LSTRLEN(text);
10214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  pos = 0;
10224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  while (ESR_TRUE)
10234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
10244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    /* Scan for beginning of next token */
10254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    for (; pos < size && LISSPACE(text[pos]); ++pos);
10264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
10274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if (pos >= size)
10284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
10294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      /* Reached end of string while looking for beginning of next token */
10304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      break;
10314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
10324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    beginning = pos;
10334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
10344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    /* Scan for ending of current token */
10354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    for (; pos < size && !LISSPACE(text[pos]); ++pos);
10364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    text[pos] = L('\0');
10374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    CHKLOG(rc, lstrtoi(text + beginning, &value, 10));
10384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    CHKLOG(rc, IntArrayListAdd(list, value));
10394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    ++pos;
10404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
10414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
10424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP:
10434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return rc;
10444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
10454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
10464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode ESR_SessionTypeGetPropertyTypeImpl(ESR_SessionType* self,
10474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const LCHAR* name, VariableTypes* type)
10484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
10494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_SessionTypeData* data = self->data;
10504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_SessionPair* pair;
10514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_ReturnCode rc;
10524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
10534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHK(rc, HashMapGet(data->value, name, (void **)&pair));
10544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  *type = pair->type;
10554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
10564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP:
10574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return rc;
10584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
10594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
10604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/**
10614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Maps key -> type for PAR files.
10624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *
10634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param self ESR_Session handle
10644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param key Key name
10654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param value The value
10664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */
10674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic ESR_ReturnCode addParMapping(ESR_SessionType* self,
10684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project                                    const LCHAR* key, LCHAR* value, void* data)
10694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
10704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  IntArrayList* iList;
10714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_ReturnCode rc;
10724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  HashMap* map;
10734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  VariableTypes* type;
10744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  int iValue;
10754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  size_t size_tValue;
10764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  float fValue;
10774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_BOOL bValue;
10784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_BOOL exists;
10794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
10804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  map = (HashMap*) data;
10814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  rc = HashMapGet(data, key, (void **)&type);
10824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (rc == ESR_NO_MATCH_ERROR)
10834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
10844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    /* If type is unknown, assume LCHAR* */
10854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    PLogMessage(L("Unknown parfile key '%s'"), key);
10864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    CHKLOG(rc, self->setLCHAR(self, key, value));
10874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
10884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  else if (rc == ESR_SUCCESS)
10894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
10904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    switch (*type)
10914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
10924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      case TYPES_INT:
10934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        CHKLOG(rc, lstrtoi(value, &iValue, 10));
10944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        CHKLOG(rc, self->contains(self, key, &exists));
10954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        if (exists)
10964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project          CHKLOG(rc, self->removeAndFreeProperty(self, key));
10974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        CHKLOG(rc, self->setInt(self, key, iValue));
10984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        break;
10994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      case TYPES_UINT16_T:
1100b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland        CHKLOG(rc, lstrtosize_t(value, &size_tValue, 10));
11014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        passert(size_tValue >= UINT16_TMIN && size_tValue <= UINT16_TMAX);
11024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        CHKLOG(rc, self->contains(self, key, &exists));
11034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        if (exists)
11044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project          CHKLOG(rc, self->removeAndFreeProperty(self, key));
11054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        CHKLOG(rc, self->setUint16_t(self, key, (asr_uint16_t) size_tValue));
11064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        break;
11074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      case TYPES_SIZE_T:
1108b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland        CHKLOG(rc, lstrtosize_t(value, &size_tValue, 10));
11094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        CHKLOG(rc, self->contains(self, key, &exists));
11104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        if (exists)
11114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project          CHKLOG(rc, self->removeAndFreeProperty(self, key));
11124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        CHKLOG(rc, self->setSize_t(self, key, size_tValue));
11134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        break;
11144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      case TYPES_FLOAT:
11154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        CHKLOG(rc, lstrtof(value, &fValue));
11164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        CHKLOG(rc, self->contains(self, key, &exists));
11174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        if (exists)
11184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project          CHKLOG(rc, self->removeAndFreeProperty(self, key));
11194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        CHKLOG(rc, self->setFloat(self, key, fValue));
11204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        break;
11214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      case TYPES_BOOL:
11224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        CHKLOG(rc, lstrtob(value, &bValue));
11234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        CHKLOG(rc, self->contains(self, key, &exists));
11244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        if (exists)
11254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project          CHKLOG(rc, self->removeAndFreeProperty(self, key));
11264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        CHKLOG(rc, self->setBool(self, key, bValue));
11274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        break;
11284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      case TYPES_INTARRAYLIST:
11294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        CHKLOG(rc, self->contains(self, key, &exists));
11304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        if (exists)
11314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        {
11324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project          CHKLOG(rc, self->getProperty(self, key, (void **)&iList, TYPES_INTARRAYLIST));
11334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project          CHKLOG(rc, self->removeProperty(self, key));
11344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project          CHKLOG(rc, iList->destroy(iList));
11354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        }
11364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        CHKLOG(rc, IntArrayListCreate(&iList));
11374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        CHKLOG(rc, parseIntList(self, value, iList));
11384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        CHKLOG(rc, self->setProperty(self, key, iList, TYPES_INTARRAYLIST));
11394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        break;
11404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      default:
11414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        passert(0); /* Unknown variable type. Assuming LCHAR* */
11424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      case TYPES_PLCHAR:
11434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        CHKLOG(rc, self->contains(self, key, &exists));
11444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        if (exists)
11454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project          CHKLOG(rc, self->removeAndFreeProperty(self, key));
11464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        CHKLOG(rc, self->setLCHAR(self, key, value));
11474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        break;
11484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
11494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
11504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return rc;
11514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP:
11524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return rc;
11534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
11544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
11554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode ESR_SessionTypeImportParFileImpl(ESR_SessionType* self,
11564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const LCHAR* filename)
11574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
11584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_ReturnCode rc;
11594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  HashMap* parameterList;
11604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  VariableTypes Int = TYPES_INT;
11614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  VariableTypes UInt16_t = TYPES_UINT16_T;
11624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  VariableTypes Float = TYPES_FLOAT;
11634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  VariableTypes Bool = TYPES_BOOL;
11644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  VariableTypes IntArrayList = TYPES_INTARRAYLIST;
11654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  VariableTypes PLChar = TYPES_PLCHAR;
11664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  VariableTypes Size_t = TYPES_SIZE_T;
11674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
11684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  /* Create [key, type] lookup table */
11694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, HashMapCreate(&parameterList));
11704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
11714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "cmdline.arbfile", &PLChar));
11724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "cmdline.bgsniff", &Size_t));
11734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "cmdline.channel", &PLChar));
11744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "cmdline.datapath", &PLChar));
11754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "cmdline.DataCaptureDirectory", &PLChar));
11764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "cmdline.detail_res", &PLChar));
11774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "cmdline.lda", &PLChar));
11784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "cmdline.modelfiles", &PLChar));
11794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "cmdline.modelfiles11", &PLChar));
11804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "cmdline.modelfiles8", &PLChar));
11814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "cmdline.lda11", &PLChar));
11824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "cmdline.lda8", &PLChar));
11834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "cmdline.results", &PLChar));
11844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "cmdline.rules", &PLChar));
11854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "cmdline.tcp", &PLChar));
11864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "cmdline.multable", &PLChar));
11874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "cmdline.parfile", &PLChar));
11884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "cmdline.vocabulary", &PLChar));
11894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "cmdline.use_image", &Int));
11904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "cmdline.semproc_verbose", &Bool));
11914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "cmdline.nametagPath", &PLChar));
11924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
11934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  /* Beginning of speech detection stuff */
11944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "cmdline.bgsniff_min", &Size_t));
11954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "cmdline.silence_duration_in_frames", &Size_t));
11964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "cmdline.end_of_utterance_hold_off_in_frames", &Size_t));
11974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "cmdline.gatedmode", &Bool));
11984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
11994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  /* new param from SREC that did not exist in CREC */
12004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "SREC.Recognizer.utterance_timeout", &Size_t));
12014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "SREC.Recognizer.osi_log_level", &Size_t));
12024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "SREC.voice_enroll.bufsz_kB", &Size_t));
12034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "SREC.voice_enroll.eos_comfort_frames", &Size_t));
12044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "SREC.voice_enroll.bos_comfort_frames", &Size_t));
12054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
12064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "SREC.Confidence.sigmoid_param.gdiff.one_nbest", &PLChar));
12074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "SREC.Confidence.sigmoid_param.gdiff.many_nbest", &PLChar));
12084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "SREC.Confidence.sigmoid_param.sd.one_nbest", &PLChar));
12094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "SREC.Confidence.sigmoid_param.sd.many_nbest", &PLChar));
12104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "SREC.Confidence.sigmoid_param.sd13.one_nbest", &PLChar));
12114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "SREC.Confidence.sigmoid_param.sd13.many_nbest", &PLChar));
12124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "SREC.Confidence.sigmoid_param.spf.one_nbest", &PLChar));
12134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "SREC.Confidence.sigmoid_param.spf.many_nbest", &PLChar));
12144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "SREC.Confidence.sigmoid_param.abs.one_nbest", &PLChar));
12154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "SREC.Confidence.sigmoid_param.abs.many_nbest", &PLChar));
12164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "SREC.Confidence.sigmoid_param.gdiffpf.one_nbest", &PLChar));
12174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "SREC.Confidence.sigmoid_param.gdiffpf.many_nbest", &PLChar));
12184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
12194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.ParVersion", &Float));
12204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.useCREClogger", &Int));
12214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Acoustic.dimen", &Int));
12224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Acoustic.skip", &Int));
12234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Acoustic.stay", &Int));
12244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Acoustic.durscale", &Int));
12254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Acoustic.minvar", &Int));
12264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Acoustic.maxvar", &Int));
12274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Acoustic.frame_period", &Int));
12284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Acoustic.load_models", &PLChar));
12294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Frontend.mel_dim", &Int));
12304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Frontend.samplerate", &Size_t));
12314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Frontend.premel", &Float));
12324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Frontend.lowcut", &Int));
12334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Frontend.highcut", &Int));
12344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Frontend.window_factor", &Float));
12354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Frontend.offset", &Float));
12364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Frontend.ddmel", &Bool));
12374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Frontend.peakdecayup", &Float));
12384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Frontend.peakdecaydown", &Float));
12394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Frontend.do_skip_even_frames", &Bool));
12404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Frontend.do_smooth_c0", &Bool));
12414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Frontend.melA", &IntArrayList));
12424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Frontend.melB", &IntArrayList));
12434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Frontend.dmelA", &IntArrayList));
12444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Frontend.dmelB", &IntArrayList));
12454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Frontend.ddmelA", &IntArrayList));
12464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Frontend.ddmelB", &IntArrayList));
12474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
12484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  /* new for S2G 3 (read from parfile instead of hardcoding) */
12494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Frontend.swicms.cmn", &IntArrayList));
12504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Frontend.swicms.cmn8", &IntArrayList));
12514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Frontend.swicms.cmn11", &IntArrayList));
12524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Frontend.swicms.tmn", &IntArrayList));
12534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Frontend.swicms.adjust", &IntArrayList));
12544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Frontend.swicms.debug", &Bool));
12554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Frontend.swicms.sbindex", &IntArrayList));
12564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Frontend.swicms.forget_factor", &IntArrayList));
12574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Frontend.swicms.cache_resolution", &IntArrayList));
12584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Frontend.swicms.inutt.forget_factor2", &IntArrayList));
12594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Frontend.swicms.inutt.disable_after", &IntArrayList));
12604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Frontend.swicms.inutt.enable_after", &IntArrayList));
12614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
12624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
12634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  /* zwz */
12644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Frontend.swicms.do_VN", &Bool));
12654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
12664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Frontend.speech_detect", &Int));
12674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Frontend.ambient_within", &Int));
12684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Frontend.speech_above", &Int));
12694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Frontend.start_windback", &Int));
12704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Frontend.utterance_allowance", &Int));
12714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
12724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
12734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Pattern.dimen", &Int));
12744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Pattern.whole_dimen", &Int));
12754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Pattern.mix_score_scale", &Float));
12764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Pattern.start", &Int));
12774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Pattern.chelt_imelda", &Bool));
12784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Pattern.vfrlimit", &Bool));
12794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Pattern.vfrthresh", &Bool));
12804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Pattern.mix_score_scale", &Float));
12814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Pattern.imelda_scale", &Float));
12824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Pattern.uni_score_scale", &Float));
12834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Pattern.uni_score_offset", &Float));
12844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Pattern.forget_speech", &Int));
12854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Pattern.forget_background", &Int));
12864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Pattern.rel_low", &Int));
12874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Pattern.rel_high", &Int));
12884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Pattern.gap_period", &Int));
12894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Pattern.click_period", &Int));
12904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Pattern.breath_period", &Int));
12914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Pattern.extend_annotation", &Int));
12924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Pattern.min_initial_quiet_frames", &Int));
12934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Pattern.min_annotation_frames", &Int));
12944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Pattern.min_initial_quiet_frames", &Int));
12954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Pattern.max_annotation_frames", &Int));
12964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Pattern.delete_leading_segments", &Int));
12974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Pattern.leading_segment_min_frames", &Int));
12984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Pattern.leading_segment_max_frames", &Int));
12994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Pattern.leading_segment_min_silence_gap_frames", &Int));
13004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Pattern.leading_segment_accept_if_not_found", &Int));
13014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Pattern.snr_holdoff", &Int));
13024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Pattern.min_acceptable_snr", &Int));
13034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Pattern.param", &Int));
13044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Pattern.beep_size", &Int));
13054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Pattern.beep_threshold", &Int));
13064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Pattern.partial_distance_dim", &Int));
13074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Pattern.partial_distance_threshold", &Int));
13084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Pattern.partial_distance_offset", &Int));
13094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Pattern.global_model_means", &IntArrayList));
13104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
13114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Recognizer.NBest", &Int));
13124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Recognizer.reject", &Int));
13134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Recognizer.often", &Int));
13144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Recognizer.partial_results", &Bool));
13154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Recognizer.wordpen", &Int));
13164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Recognizer.viterbi_prune_thresh", &Int));
13174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Recognizer.max_hmm_tokens", &Int));
13184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Recognizer.max_fsmnode_tokens", &Int));
13194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Recognizer.max_word_tokens", &Int));
13204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Recognizer.max_altword_tokens", &Int));
13214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Recognizer.num_wordends_per_frame", &Int));
13224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Recognizer.max_fsm_nodes", &Int));
13234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Recognizer.max_fsm_arcs", &Int));
13244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Recognizer.max_searches", &Int));
13254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Recognizer.terminal_timeout", &Int));
13264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Recognizer.optional_terminal_timeout", &Int));
13274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Recognizer.non_terminal_timeout", &Int));
13284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Recognizer.eou_threshold", &Int));
13294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Recognizer.max_frames", &Int));
13304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "CREC.Recognizer.max_model_states", &Int));
13314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "thread.priority", &UInt16_t));
13324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  /* for G2P */
13334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "G2P.Available", &Bool));
13344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "G2P.Data", &PLChar));
13354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "G2P.Dictionary", &PLChar));
13364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  /* Enable Get Waveform */
13374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, parameterList->put(parameterList, "enableGetWaveform", &Bool));
13384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
13394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  rc = importKeyValueFile(self, filename, addParMapping, parameterList);
13404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (rc != ESR_SUCCESS)
13414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    goto CLEANUP;
13424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, HashMapDestroy(parameterList));
13434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
13444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP:
13454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  HashMapDestroy(parameterList);
13464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return rc;
13474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
13484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
13494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode ESR_SessionTypeAddListenerImpl(ESR_SessionType* self, ESR_SessionTypeListenerPair* listener)
13504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
13514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_SessionTypeData* data = self->data;
13524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ArrayList* listeners = data->listeners;
13534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_ReturnCode rc;
13544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
13554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, listeners->add(listeners, listener));
13564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
13574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP:
13584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return rc;
13594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
13604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
13614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode ESR_SessionTypeRemoveListenerImpl(ESR_SessionType* self, ESR_SessionTypeListenerPair* listener)
13624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
13634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_SessionTypeData* data = self->data;
13644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ArrayList* listeners = data->listeners;
13654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_ReturnCode rc;
13664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
13674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHKLOG(rc, listeners->remove(listeners, listener));
13684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
13694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP:
13704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return rc;
13714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
13724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
13734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode ESR_SessionTypeDestroyImpl(ESR_SessionType* self)
13744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
13754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_SessionTypeData* data = self->data;
13764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  size_t hashSize;
13774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_SessionPair* pair;
13784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_ReturnCode rc;
13794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
13804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (data != NULL)
13814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
13824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if (data->value != NULL)
13834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
13844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      CHKLOG(rc, HashMapGetSize(data->value, &hashSize));
13854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      while (hashSize > 0)
13864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      {
13874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        CHKLOG(rc, HashMapGetValueAtIndex(data->value, 0, (void **)&pair));
13884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
13894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        if (pair->value)
13904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        {
13914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project          if (pair->type == TYPES_INTARRAYLIST)
13924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project            CHKLOG(rc, IntArrayListDestroy((IntArrayList*) pair->value));
13934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project          else
13944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project            FREE(pair->value);
13954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        }
13964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        CHKLOG(rc, HashMapRemoveAtIndex(data->value, 0));
13974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        --hashSize;
13984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        FREE(pair);
13994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      }
14004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
14014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      CHKLOG(rc, HashMapDestroy(data->value));
14024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      data->value = NULL;
14034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
14044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if (data->listeners != NULL)
14054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
14064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      CHKLOG(rc, data->listeners->destroy(data->listeners));
14074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      data->listeners = NULL;
14084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
14094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    FREE(data);
14104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
14114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
14124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  FREE(self);
14134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
14144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP:
14154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return rc;
14164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1417