1e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/* Copyright (c) 2011-2015, The Linux Foundation. All rights reserved.
2e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *
3e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * Redistribution and use in source and binary forms, with or without
4e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * modification, are permitted provided that the following conditions are
5e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * met:
6e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *     * Redistributions of source code must retain the above copyright
7e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *       notice, this list of conditions and the following disclaimer.
8e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *     * Redistributions in binary form must reproduce the above
9e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *       copyright notice, this list of conditions and the following
10e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *       disclaimer in the documentation and/or other materials provided
11e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *       with the distribution.
12e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *     * Neither the name of The Linux Foundation, nor the names of its
13e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *       contributors may be used to endorse or promote products derived
14e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *       from this software without specific prior written permission.
15e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *
16e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
17e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
19e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
20e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
23e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
25e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
26e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *
28e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti */
29e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
30e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#define LOG_NDDEBUG 0
31e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#define LOG_TAG "LocSvc_utils_cfg"
32e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
33e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <stdio.h>
34e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <stdlib.h>
35e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <pthread.h>
36e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <string.h>
37e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <ctype.h>
38e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <unistd.h>
39e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <time.h>
40e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <loc_cfg.h>
41e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <log_util.h>
42e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <loc_misc_utils.h>
43e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#ifdef USE_GLIB
44e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <glib.h>
45e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#endif
46e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include "platform_lib_includes.h"
47e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
48e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/*=============================================================================
49e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *
50e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *                          GLOBAL DATA DECLARATION
51e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *
52e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *============================================================================*/
53e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
54e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/* Parameter data */
55e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletistatic uint32_t DEBUG_LEVEL = 0xff;
56e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletistatic uint32_t TIMESTAMP = 0;
57e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
58e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/* Parameter spec table */
59e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletistatic const loc_param_s_type loc_param_table[] =
60e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
61e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    {"DEBUG_LEVEL",    &DEBUG_LEVEL, NULL,    'n'},
62e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    {"TIMESTAMP",      &TIMESTAMP,   NULL,    'n'},
63e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti};
64e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletistatic const int loc_param_num = sizeof(loc_param_table) / sizeof(loc_param_s_type);
65e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
66e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletitypedef struct loc_param_v_type
67e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
68e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    char* param_name;
69e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    char* param_str_value;
70e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    int param_int_value;
71e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    double param_double_value;
72e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}loc_param_v_type;
73e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
74e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/*===========================================================================
75e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiFUNCTION loc_set_config_entry
76e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
77e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiDESCRIPTION
78e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   Potentially sets a given configuration table entry based on the passed in
79e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   configuration value. This is done by using a string comparison of the
80e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   parameter names and those found in the configuration file.
81e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
82e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiPARAMETERS:
83e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   config_entry: configuration entry in the table to possibly set
84e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   config_value: value to store in the entry if the parameter names match
85e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
86e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiDEPENDENCIES
87e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   N/A
88e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
89e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiRETURN VALUE
90e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   None
91e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
92e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiSIDE EFFECTS
93e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   N/A
94e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti===========================================================================*/
95e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletiint loc_set_config_entry(const loc_param_s_type* config_entry, loc_param_v_type* config_value)
96e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
97e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    int ret=-1;
98e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    if(NULL == config_entry || NULL == config_value)
99e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    {
100e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        LOC_LOGE("%s: INVALID config entry or parameter", __FUNCTION__);
101e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        return ret;
102e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
103e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
104e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    if (strcmp(config_entry->param_name, config_value->param_name) == 0 &&
105e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        config_entry->param_ptr)
106e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    {
107e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        switch (config_entry->param_type)
108e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        {
109e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        case 's':
110e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            if (strcmp(config_value->param_str_value, "NULL") == 0)
111e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            {
112e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                *((char*)config_entry->param_ptr) = '\0';
113e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            }
114e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            else {
115e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                strlcpy((char*) config_entry->param_ptr,
116e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                        config_value->param_str_value,
117e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                        LOC_MAX_PARAM_STRING + 1);
118e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            }
119e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            /* Log INI values */
120e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            LOC_LOGD("%s: PARAM %s = %s", __FUNCTION__,
121e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                     config_entry->param_name, (char*)config_entry->param_ptr);
122e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
123e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            if(NULL != config_entry->param_set)
124e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            {
125e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                *(config_entry->param_set) = 1;
126e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            }
127e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            ret = 0;
128e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            break;
129e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        case 'n':
130e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            *((int *)config_entry->param_ptr) = config_value->param_int_value;
131e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            /* Log INI values */
132e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            LOC_LOGD("%s: PARAM %s = %d", __FUNCTION__,
133e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                     config_entry->param_name, config_value->param_int_value);
134e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
135e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            if(NULL != config_entry->param_set)
136e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            {
137e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                *(config_entry->param_set) = 1;
138e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            }
139e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            ret = 0;
140e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            break;
141e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        case 'f':
142e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            *((double *)config_entry->param_ptr) = config_value->param_double_value;
143e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            /* Log INI values */
144e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            LOC_LOGD("%s: PARAM %s = %f", __FUNCTION__,
145e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                     config_entry->param_name, config_value->param_double_value);
146e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
147e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            if(NULL != config_entry->param_set)
148e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            {
149e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                *(config_entry->param_set) = 1;
150e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            }
151e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            ret = 0;
152e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            break;
153e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        default:
154e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            LOC_LOGE("%s: PARAM %s parameter type must be n, f, or s",
155e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                     __FUNCTION__, config_entry->param_name);
156e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        }
157e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
158e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    return ret;
159e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
160e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
161e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/*===========================================================================
162e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiFUNCTION loc_fill_conf_item
163e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
164e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiDESCRIPTION
165e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   Takes a line of configuration item and sets defined values based on
166e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   the passed in configuration table. This table maps strings to values to
167e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   set along with the type of each of these values.
168e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
169e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiPARAMETERS:
170e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   input_buf : buffer contanis config item
171e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   config_table: table definition of strings to places to store information
172e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   table_length: length of the configuration table
173e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
174e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiDEPENDENCIES
175e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   N/A
176e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
177e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiRETURN VALUE
178e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   0: Number of records in the config_table filled with input_buf
179e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
180e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiSIDE EFFECTS
181e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   N/A
182e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti===========================================================================*/
183e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletiint loc_fill_conf_item(char* input_buf,
184e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                       const loc_param_s_type* config_table, uint32_t table_length)
185e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
186e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    int ret = 0;
187e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
188e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    if (input_buf && config_table) {
189e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        char *lasts;
190e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        loc_param_v_type config_value;
191e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        memset(&config_value, 0, sizeof(config_value));
192e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
193e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        /* Separate variable and value */
194e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        config_value.param_name = strtok_r(input_buf, "=", &lasts);
195e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        /* skip lines that do not contain "=" */
196e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        if (config_value.param_name) {
197e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            config_value.param_str_value = strtok_r(NULL, "=", &lasts);
198e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
199e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            /* skip lines that do not contain two operands */
200e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            if (config_value.param_str_value) {
201e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                /* Trim leading and trailing spaces */
202e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                loc_util_trim_space(config_value.param_name);
203e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                loc_util_trim_space(config_value.param_str_value);
204e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
205e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                /* Parse numerical value */
206e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                if ((strlen(config_value.param_str_value) >=3) &&
207e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    (config_value.param_str_value[0] == '0') &&
208e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    (tolower(config_value.param_str_value[1]) == 'x'))
209e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                {
210e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    /* hex */
211e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    config_value.param_int_value = (int) strtol(&config_value.param_str_value[2],
212e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                                                                (char**) NULL, 16);
213e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                }
214e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                else {
215e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    config_value.param_double_value = (double) atof(config_value.param_str_value); /* float */
216e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    config_value.param_int_value = atoi(config_value.param_str_value); /* dec */
217e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                }
218e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
219e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                for(uint32_t i = 0; NULL != config_table && i < table_length; i++)
220e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                {
221e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    if(!loc_set_config_entry(&config_table[i], &config_value)) {
222e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                        ret += 1;
223e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    }
224e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                }
225e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            }
226e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        }
227e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
228e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
229e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    return ret;
230e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
231e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
232e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/*===========================================================================
233e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiFUNCTION loc_read_conf_r (repetitive)
234e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
235e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiDESCRIPTION
236e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   Reads the specified configuration file and sets defined values based on
237e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   the passed in configuration table. This table maps strings to values to
238e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   set along with the type of each of these values.
239e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   The difference between this and loc_read_conf is that this function returns
240e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   the file pointer position at the end of filling a config table. Also, it
241e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   reads a fixed number of parameters at a time which is equal to the length
242e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   of the configuration table. This functionality enables the caller to
243e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   repeatedly call the function to read data from the same file.
244e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
245e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiPARAMETERS:
246e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   conf_fp : file pointer
247e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   config_table: table definition of strings to places to store information
248e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   table_length: length of the configuration table
249e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
250e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiDEPENDENCIES
251e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   N/A
252e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
253e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiRETURN VALUE
254e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   0: Table filled successfully
255e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   1: No more parameters to read
256e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti  -1: Error filling table
257e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
258e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiSIDE EFFECTS
259e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   N/A
260e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti===========================================================================*/
261e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletiint loc_read_conf_r(FILE *conf_fp, const loc_param_s_type* config_table, uint32_t table_length)
262e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
263e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    int ret=0;
264e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
265e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    unsigned int num_params=table_length;
266e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    if(conf_fp == NULL) {
267e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        LOC_LOGE("%s:%d]: ERROR: File pointer is NULL\n", __func__, __LINE__);
268e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        ret = -1;
269e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        goto err;
270e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
271e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
272e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    /* Clear all validity bits */
273e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    for(uint32_t i = 0; NULL != config_table && i < table_length; i++)
274e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    {
275e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        if(NULL != config_table[i].param_set)
276e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        {
277e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            *(config_table[i].param_set) = 0;
278e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        }
279e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
280e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
281e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    char input_buf[LOC_MAX_PARAM_LINE];  /* declare a char array */
282e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
283e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    LOC_LOGD("%s:%d]: num_params: %d\n", __func__, __LINE__, num_params);
284e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    while(num_params)
285e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    {
286e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        if(!fgets(input_buf, LOC_MAX_PARAM_LINE, conf_fp)) {
287e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            LOC_LOGD("%s:%d]: fgets returned NULL\n", __func__, __LINE__);
288e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            break;
289e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        }
290e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
291e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        num_params -= loc_fill_conf_item(input_buf, config_table, table_length);
292e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
293e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
294e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletierr:
295e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    return ret;
296e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
297e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
298e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/*===========================================================================
299e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiFUNCTION loc_udpate_conf
300e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
301e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiDESCRIPTION
302e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   Parses the passed in buffer for configuration items, and update the table
303e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   that is also passed in.
304e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
305e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiReads the specified configuration file and sets defined values based on
306e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   the passed in configuration table. This table maps strings to values to
307e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   set along with the type of each of these values.
308e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
309e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiPARAMETERS:
310e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   conf_data: configuration items in bufferas a string
311e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   length: strlen(conf_data)
312e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   config_table: table definition of strings to places to store information
313e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   table_length: length of the configuration table
314e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
315e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiDEPENDENCIES
316e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   N/A
317e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
318e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiRETURN VALUE
319e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   number of the records in the table that is updated at time of return.
320e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
321e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiSIDE EFFECTS
322e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   N/A
323e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti===========================================================================*/
324e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletiint loc_update_conf(const char* conf_data, int32_t length,
325e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    const loc_param_s_type* config_table, uint32_t table_length)
326e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
327e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    int ret = -1;
328e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
329e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    if (conf_data && length && config_table && table_length) {
330e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        // make a copy, so we do not tokenize the original data
331e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        char* conf_copy = (char*)malloc(length+1);
332e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
333e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        if (conf_copy != NULL)
334e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        {
335e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            memcpy(conf_copy, conf_data, length);
336e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            // we hard NULL the end of string to be safe
337e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            conf_copy[length] = 0;
338e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
339e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            // start with one record off
340e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            uint32_t num_params = table_length - 1;
341e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            char* saveptr = NULL;
342e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            char* input_buf = strtok_r(conf_copy, "\n", &saveptr);
343e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            ret = 0;
344e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
345e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            LOC_LOGD("%s:%d]: num_params: %d\n", __func__, __LINE__, num_params);
346e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            while(num_params && input_buf) {
347e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                ret++;
348e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                num_params -= loc_fill_conf_item(input_buf, config_table, table_length);
349e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                input_buf = strtok_r(NULL, "\n", &saveptr);
350e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            }
351e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            free(conf_copy);
352e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        }
353e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
354e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
355e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    return ret;
356e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
357e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
358e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/*===========================================================================
359e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiFUNCTION loc_read_conf
360e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
361e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiDESCRIPTION
362e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   Reads the specified configuration file and sets defined values based on
363e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   the passed in configuration table. This table maps strings to values to
364e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   set along with the type of each of these values.
365e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
366e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiPARAMETERS:
367e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   conf_file_name: configuration file to read
368e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   config_table: table definition of strings to places to store information
369e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   table_length: length of the configuration table
370e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
371e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiDEPENDENCIES
372e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   N/A
373e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
374e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiRETURN VALUE
375e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   None
376e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
377e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiSIDE EFFECTS
378e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   N/A
379e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti===========================================================================*/
380e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletivoid loc_read_conf(const char* conf_file_name, const loc_param_s_type* config_table,
381e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                   uint32_t table_length)
382e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
383e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    FILE *conf_fp = NULL;
384e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    char *lasts;
385e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    loc_param_v_type config_value;
386e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    uint32_t i;
387e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
388e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    if((conf_fp = fopen(conf_file_name, "r")) != NULL)
389e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    {
390e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        LOC_LOGD("%s: using %s", __FUNCTION__, conf_file_name);
391e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        if(table_length && config_table) {
392e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            loc_read_conf_r(conf_fp, config_table, table_length);
393e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            rewind(conf_fp);
394e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        }
395e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        loc_read_conf_r(conf_fp, loc_param_table, loc_param_num);
396e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        fclose(conf_fp);
397e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
398e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    /* Initialize logging mechanism with parsed data */
399e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    loc_logger_init(DEBUG_LEVEL, TIMESTAMP);
400e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
401