4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: JuHyun Kim <jh8212.kim@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
30 #include <cobject_type.h>
34 #define TMP_BUF_SIZE 512
47 bool ccatalog::load(const char *conf_file , char splitter_id)
52 char line_buffer[TMP_BUF_SIZE];
53 char tmp_buffer[TMP_BUF_SIZE];
56 int group_name_check = 0;
57 char name[TMP_BUF_SIZE];
58 char value[TMP_BUF_SIZE];
61 switch (splitter_id ) {
62 case SPLITTER_FOR_CONF_FILE:
65 case SPLITTER_FOR_CPU_INFO:
74 m_head = m_tail = grp;
75 grp->name = strdup("CPU_INFO_TABLE");
77 ERR("Failed to allocate buffer for the tmp_buffer\n");
81 DBG("grp->name : %s\n",grp->name);
87 ERR("already CPU_INFO_TABLE exist !! cannot make again\n");
93 ERR("fail does not support splitter idx : %x",splitter_id);
97 fp = fopen(conf_file, "r");
102 while (fgets(line_buffer, TMP_BUF_SIZE, fp)) {
103 ptr = ctrim::ltrim(line_buffer);
107 DBG("read line_buffer : %s\n",line_buffer);
109 /* Replcate the last character if it was new line. */
110 if ( (ptr[strlen(ptr)-1] == '\n') || (ptr[strlen(ptr)-1] == '\r')) ptr[strlen(ptr)-1] = '\0';
112 rtrim_num = ctrim::rtrim(ptr);
114 switch (splitter_id ) {
115 case SPLITTER_FOR_CONF_FILE:
117 group_name_check = sscanf(ptr, "[%[^]] ", tmp_buffer);
119 case SPLITTER_FOR_CPU_INFO:
121 group_name_check = 0;
125 if (group_name_check == 1) {
126 /* We have previous group, Just link it to the end of group list */
127 DBG("check tmp_buffer : %s\n",tmp_buffer);
130 grp->link(clist::AFTER, m_tail);
133 m_head = m_tail = grp;
145 grp->name = strdup(tmp_buffer);
146 DBG("grp->name : %s\n",grp->name);
148 ERR("Failed to allocate buffer for the tmp_buffer\n");
159 switch (splitter_id ) {
160 case SPLITTER_FOR_CONF_FILE:
162 split_num = sscanf(ptr, "%[^=]=%[^\n]", name, value);
164 case SPLITTER_FOR_CPU_INFO:
166 split_num = sscanf(ptr, "%[^:]:%[^\n]", name, value);
167 DBG("split_num : %d , raw_name : [start]%s[end] , raw_value : [start]%s[end]\n",split_num ,name , value);
170 ERR("fail does not support splitter idx : %x",splitter_id);
175 if ( (split_num == 2) && (grp!=NULL) ) {
179 ERR("Failed to allocate new description\n");
186 ptr = ctrim::ltrim(name);
187 rtrim_num = ctrim::rtrim(ptr);
188 desc->name = strdup(ptr);
189 DBG("desc->name :%s[end]\n",desc->name);
192 ERR("Failed to allocate buffer for the name\n");
200 ptr = ctrim::ltrim(value);
201 rtrim_num = ctrim::rtrim(ptr);
202 desc->value = strdup(ptr);
203 DBG("desc->value :%s[end]\n",desc->value);
206 ERR("Failed to allocate buffer for the value\n");
216 desc->link(clist::AFTER, grp->tail);
219 grp->head = grp->tail = desc;
228 if (m_tail && grp != NULL) {
229 grp->link(clist::AFTER, m_tail);
232 m_tail = m_head = grp;
240 bool ccatalog::is_loaded(void)
242 return (m_head != NULL) ? true : false ;
245 bool ccatalog::unload(void)
254 next_grp = (group_t*)grp->next();
257 next_desc = (desc_t*)desc->next();
272 char *ccatalog::value(char *group, char *name)
278 if (!strncmp(group, grp->name, strlen(grp->name))) {
281 grp = (group_t*)grp->next();
289 if (!strncmp(name, desc->name, sizeof(desc->name))) {
292 desc = (desc_t*)desc->next();
299 char *ccatalog::value(char *group, char *name, int idx)
304 if (!strcmp(group, grp->name)) {
307 grp = (group_t*)grp->next();
316 if (!strcmp(name, desc->name)) {
322 desc = (desc_t *)desc->next();
329 int ccatalog::count_of_values(char *group, char *name)
332 register int count = 0;
335 if (!strcmp(group, grp->name)) {
338 grp = (group_t*)grp->next();
346 if (!strcmp(name, desc->name)) {
349 desc = (desc_t *)desc->next();
355 void *ccatalog::iterate_init(void)
357 return (void*)m_head;
360 void *ccatalog::iterate_next(void *handle)
362 group_t *grp = (group_t*)handle;
366 void *ccatalog::iterate_prev(void *handle)
368 group_t *grp = (group_t*)handle;
372 char *ccatalog::iterate_get_name(void *handle)
374 group_t *grp = (group_t*)handle;