示例#1
0
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;
}
示例#2
0
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);
}
示例#3
0
/* 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;
}
示例#4
0
/* 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;
}