int initandparserfile(char *stringPath) { FILE *fp= NULL; char *pk = NULL; char stream[MAX_STREAM] = {0}; char str_key[MAX_KEY] = {0}; char str_type[4] = {0}; uint offset = 0; HASH s_hash; SParser s_parse_tmp; printf("STRING_PATH=%s\n",stringPath); fp=fopen(stringPath,"r"); if(fp == NULL) { printf("open STRING_PATH failed!\n"); return FAILURE; } if (FAILURE == initHashTable(&s_parse_tmp)) { printf("initHashTable failed!\n"); fclose(fp); return FAILURE; } ResetHashTable(&s_parse);//free memory at first s_parse = s_parse_tmp; fseek(fp, 0, SEEK_SET); while(fgets(stream, MAX_STREAM, fp) != NULL) { int len = strlen(stream); pk = strstr(stream,"="); if ((stream[0] == ';') || (NULL == pk)) { offset += len; continue; } *pk = '\0'; strncpy(str_key, stream, strlen(stream)); s_hash.key = getkey(str_key); s_hash.ioffset = offset; offset += len; strcpy(str_attrname, str_key); insertToHash(&s_parse, s_hash); memset(stream, 0, MAX_STREAM); memset(str_key, 0, MAX_KEY); } fclose(fp); return SUCCESS; }
static void reCreateHashTable(SParser *H) { printf("need recreate memory\r\n"); HASH *p = NULL; HASH *pold = (HASH *)malloc(m*sizeof(HASH)); int i = 0; int count = (*H).count; if (!pold) return; p = pold; for (; i<m; i++) { if((*H).ele[i].key != NULLKEY) *p++ = (*H).ele[i]; } (*H).sizeindex++; (*H).count = 0; m = hashsize[(*H).sizeindex]; p = (HASH *)realloc((*H).ele, m*sizeof(HASH)); if (p == NULL) { tcdbg_printf("realloc memory failure\r\n"); free(pold); return; } (*H).ele = p; for (i=0; i<m; i++) { (*H).ele[i].key = NULLKEY; (*H).ele[i].ioffset = NULLKEY; } for(p=pold; p<(pold+count); p++) { insertToHash(H, *p); } free(pold); }
/* Paul modify 2013/2/7 */ int initandparserfile(void) { //FILE *fp = NULL; char *pk = NULL; char str_path[PATH_LENGTH] = {0}; char stream[MAX_STREAM] = {0}; char str_key[MAX_KEY] = {0}; char str_type[4] = {0}; int nIndex = 0; uint offset = 0; HASH s_hash; SParser s_parse_tmp; //Andy Chiu, 2015/03/03. retry for cfg_manager restart scoket issue. int res = 0, i; for(i = 0; i < 5; ++i) { res = tcapi_get("LanguageSwitch_Entry", "Type", str_type); if(!res && strlen(str_type) > 0 ) break; tcdbg_printf("[%s, %d]get lang failed!\n", __FUNCTION__, __LINE__); sleep(1); } if (strlen(str_type)) nIndex = atoi(str_type); if(nIndex == 0) { for(i = 0; i < 5; ++i) { memset(str_type, 0, sizeof(str_type)); res = tcapi_get("WebCurSet_Entry", "detected_lang_type", str_type); if(!res && strlen(str_type) > 0 ) break; tcdbg_printf("[%s, %d]get lang failed!\n", __FUNCTION__, __LINE__); sleep(1); } if (strlen(str_type)) nIndex = atoi(str_type); } init_flag = nIndex; closefp();//close file pointer at first if(nIndex == 1) //English sprintf(str_path, STRING_PATH, "EN"); else if(nIndex == 2) //Brazil sprintf(str_path, STRING_PATH, "BR"); else if(nIndex == 3) //Simplified Chinese sprintf(str_path, STRING_PATH, "CN"); else if(nIndex == 4) //Cesky sprintf(str_path, STRING_PATH, "CZ"); else if(nIndex == 5) //Dansk sprintf(str_path, STRING_PATH, "DA"); else if(nIndex == 6) //Deutsch sprintf(str_path, STRING_PATH, "DE"); else if(nIndex == 7) //Espanol sprintf(str_path, STRING_PATH, "ES"); else if(nIndex == 8) //Finsk sprintf(str_path, STRING_PATH, "FI"); else if(nIndex == 9) //Francais sprintf(str_path, STRING_PATH, "FR"); else if(nIndex == 10) //Italiano sprintf(str_path, STRING_PATH, "IT"); else if(nIndex == 11) //Malay sprintf(str_path, STRING_PATH, "MS"); else if(nIndex == 12) //Norsk sprintf(str_path, STRING_PATH, "NO"); else if(nIndex == 13) //Polski sprintf(str_path, STRING_PATH, "PL"); else if(nIndex == 14) //Russian sprintf(str_path, STRING_PATH, "RU"); else if(nIndex == 15) //Svensk sprintf(str_path, STRING_PATH, "SV"); else if(nIndex == 16) //Thai sprintf(str_path, STRING_PATH, "TH"); else if(nIndex == 17) //Turkey sprintf(str_path, STRING_PATH, "TR"); else if(nIndex == 18) //Traditional Chinese sprintf(str_path, STRING_PATH, "TW"); else if(nIndex == 19) //Ukraine sprintf(str_path, STRING_PATH, "UK"); else sprintf(str_path, STRING_PATH, "EN"); fpl=fopen(str_path,"r"); if(fpl == NULL) { tcdbg_printf("\r\n%s:can't open %s\r\n",__FUNCTION__, str_path); return FAILURE; } if (FAILURE == initHashTable(&s_parse_tmp)) { tcdbg_printf("\r\n%s:alloc memory\n", __FUNCTION__); return FAILURE; } ResetHashTable(&s_parse);//free memory at first s_parse = s_parse_tmp; fseek(fpl, 0, SEEK_SET); while(fgets(stream, MAX_STREAM, fpl) != NULL) { int len = strlen(stream); pk = strstr(stream,"="); if ((stream[0] == ';') || (NULL == pk)) { offset += len; continue; } *pk = '\0'; strncpy(str_key, stream, strlen(stream)); s_hash.key = getkey(str_key); s_hash.ioffset = offset; offset += len; strcpy(str_attrname, str_key); insertToHash(&s_parse, s_hash); memset(stream, 0, MAX_STREAM); memset(str_key, 0, MAX_KEY); } //fclose(fp); return SUCCESS; }
/* Symbol Table functions*/ symtab* initial_symboltable(void){ int i; struct hash* hashTable=(struct hash*)malloc(sizeof(struct hash)); hashTable->elements=(struct Variable**)malloc(HASH_SIZE*sizeof(struct Variable*)); hashTable->count=0; hashTable->scope_heads=initial_scope_lists(); insertToHash(hashTable,0,"print",0,LIBFUNC); insertToHash(hashTable,0,"input",0,LIBFUNC); insertToHash(hashTable,0,"objectmemberkeys",0,LIBFUNC); insertToHash(hashTable,0,"objecttotalmembers",0,LIBFUNC); insertToHash(hashTable,0,"objectcopy",0,LIBFUNC); insertToHash(hashTable,0,"totalarguments",0,LIBFUNC); insertToHash(hashTable,0,"argument",0,LIBFUNC); insertToHash(hashTable,0,"typeof",0,LIBFUNC); insertToHash(hashTable,0,"strtonum",0,LIBFUNC); insertToHash(hashTable,0,"sqrt",0,LIBFUNC); insertToHash(hashTable,0,"cos",0,LIBFUNC); insertToHash(hashTable,0,"sin",0,LIBFUNC); return hashTable; }