Example #1
0
/*************************************************************
Function: 获得所有section
Input:  char *filename 文件,int max 最大可返回的section的个数
Output: char *sections[] 存放section名字
Return: 返回section个数。若出错,返回负数。
		-10			文件打开出错
		-12			文件读取错误
		-14			文件格式错误
Note: 
*************************************************************/
int ini_get_sections(char *filedata, unsigned char * sections[], int max)
{
	//FILE *fp; 
	char buf1[MAX_CFG_BUF + 1]; 
	int n, n_sections = 0, ret; 
	int dataoff = 0;
	int i = 0;
	
//	if((fp = fopen(filename, "rb")) == NULL) 
//		return CFG_ERR_OPEN_FILE; 
	
	while(i<5) {/*搜找项section */
		ret = CFG_ERR_READ_FILE;
		n = ini_file_get_line(filedata+dataoff, buf1, MAX_CFG_BUF);
		dataoff += n;
		if(n < -1) 
			goto cfg_scts_end; 
		if(n < 0)
			break;/* 文件尾 */ 
		n = strlen(ini_str_trim_l(ini_str_trim_r(buf1)));
		if(n == 0 || buf1[0] == CFG_NTS) 
			continue;       /* 空行 或 注释行 */ 
		ret = CFG_ERR_FILE_FORMAT;
		if(n > 2 && ((buf1[0] == CFG_SSL && buf1[n-1] != CFG_SSR)))
			goto cfg_scts_end;
		if(buf1[0] == CFG_SSL) {
			if (max!=0){
				buf1[n-1] = 0x00;
				strcpy((char *)sections[n_sections], buf1+1);
				if (n_sections>=max)
					break;		/* 超过可返回最大个数 */
			}
			n_sections++;
		} 
		i++;

	} 
	ret = n_sections;
cfg_scts_end: 
//	if(fp != NULL)
//		fclose(fp);
	return ret;
} 
Example #2
0
/*************************************************************
Function: Read all the parameters and values to the structure.
Return: Returns the number of key. If you go wrong, return a negative number.
        -10         File open failed
        -12         File read  failed
        -14         File format error
Note:
*************************************************************/
int ini_get_key_data(char *filedata)
{
    //FILE *fp;
    char buf1[MAX_CFG_BUF + 1]= {0};
    int n=0;
    int ret=0;  //n_sections = 0,
    int dataoff = 0;
    int iEqualSign = 0;
    int i = 0;
    char tmpSectionName[MAX_CFG_BUF + 1]= {0};

//  if((fp = fopen(filename, "rb")) == NULL)
//      return CFG_ERR_OPEN_FILE;
    FTS_TEST_FUNC_ENTER();

    ret = init_key_data();/*init*/
    if (ret < 0)
    {
        return -1;
    }

    g_used_key_num = 0;
    while (1) /*find section */
    {
        ret = CFG_ERR_READ_FILE;
        n = ini_file_get_line(filedata+dataoff, buf1, MAX_CFG_BUF);

        if (n < -1)
            goto cfg_scts_end;
        if (n < 0)
            break;/* file end */
        if (n >= MAX_CFG_BUF)
        {
            FTS_TEST_DBG("Error Length:%d\n",  n);
            goto cfg_scts_end;
        }

        dataoff += n;

        n = strlen(ini_str_trim_l(ini_str_trim_r(buf1)));
        if (n == 0 || buf1[0] == CFG_NTS)
            continue;       /* A blank line or a comment line */
        ret = CFG_ERR_FILE_FORMAT;
        //get section name
        if (n > 2 && ((buf1[0] == CFG_SSL && buf1[n-1] != CFG_SSR)))
        {
            FTS_TEST_DBG("Bad Section:%s\n",  buf1);
            goto cfg_scts_end;//bad section
        }


        if (buf1[0] == CFG_SSL)
        {
            g_st_ini_file_data[g_used_key_num].iSectionNameLen = n-2;
            if (MAX_KEY_NAME_LEN < g_st_ini_file_data[g_used_key_num].iSectionNameLen)
            {
                ret = CFG_ERR_OUT_OF_LEN;
                FTS_TEST_DBG("MAX_KEY_NAME_LEN: CFG_ERR_OUT_OF_LEN\n");
                goto cfg_scts_end;
            }

            buf1[n-1] = 0x00;
            strcpy((char *)tmpSectionName, buf1+1);
            //FTS_TEST_DBG("Section Name:%s, Len:%d\n",  tmpSectionName, n-2);

            continue;
        }
        //get section name end

        strcpy( g_st_ini_file_data[g_used_key_num].pSectionName, tmpSectionName);
        g_st_ini_file_data[g_used_key_num].iSectionNameLen = strlen(tmpSectionName);

        iEqualSign = 0;
        for (i=0; i < n; i++)
        {
            if (buf1[i] == CFG_EQS )
            {
                iEqualSign = i;
                break;
            }
        }
        if (0 == iEqualSign)
            continue;
        /* before equal sign is assigned to the key name*/
        g_st_ini_file_data[g_used_key_num].iKeyNameLen = iEqualSign;
        if (MAX_KEY_NAME_LEN < g_st_ini_file_data[g_used_key_num].iKeyNameLen)
        {
            ret = CFG_ERR_OUT_OF_LEN;
            FTS_TEST_DBG("MAX_KEY_NAME_LEN: CFG_ERR_OUT_OF_LEN\n");
            goto cfg_scts_end;
        }
        memcpy(g_st_ini_file_data[g_used_key_num].pKeyName,
               buf1, g_st_ini_file_data[g_used_key_num].iKeyNameLen);

        /* After equal sign is assigned to the key value*/
        g_st_ini_file_data[g_used_key_num].iKeyValueLen = n-iEqualSign-1;
        if (MAX_KEY_VALUE_LEN < g_st_ini_file_data[g_used_key_num].iKeyValueLen)
        {
            ret = CFG_ERR_OUT_OF_LEN;
            FTS_TEST_DBG("MAX_KEY_VALUE_LEN: CFG_ERR_OUT_OF_LEN\n");
            goto cfg_scts_end;
        }
        memcpy(g_st_ini_file_data[g_used_key_num].pKeyValue,
               buf1+ iEqualSign+1, g_st_ini_file_data[g_used_key_num].iKeyValueLen);


        ret = g_used_key_num;

        g_used_key_num++;   /*Parameter number accumulation*/
        if (MAX_KEY_NUM < g_used_key_num)
        {
            ret = CFG_ERR_TOO_MANY_KEY_NUM;
            FTS_TEST_DBG("MAX_KEY_NUM: CFG_ERR_TOO_MANY_KEY_NUM\n");
            goto cfg_scts_end;
        }
    }
    //ret = n_sections;
    //print_key_data();

    FTS_TEST_FUNC_EXIT();

    return 0;

cfg_scts_end:

    FTS_TEST_FUNC_EXIT();
    return ret;
}
Example #3
0
/*************************************************************
Function: 获得key的值
Input: char * filedata 文件;char * section 项值;char * key 键值
Output: char * value key的值
Return: 0		SUCCESS
		-1		未找到section
		-2		未找到key
		-10		文件打开失败
		-12		读取文件失败
		-14		文件格式错误
		-22		超出缓冲区大小
Note: 
*************************************************************/
int ini_get_key(char *filedata, char * section, char * key, char * value)
{
	char buf1[MAX_CFG_BUF + 1], buf2[MAX_CFG_BUF + 1];
	char *key_ptr, *val_ptr;
	int  n, ret;
	int dataoff = 0;
	int i = 0;
	
	*value='\0';
	
	while(i<5) { /* 搜找项section */
		ret = CFG_ERR_READ_FILE;
		n = ini_file_get_line(filedata+dataoff, buf1, MAX_CFG_BUF);
		dataoff += n;
		if(n < -1)
			goto r_cfg_end;
		ret = CFG_SECTION_NOT_FOUND;
		if(n < 0)
			goto r_cfg_end; /* 文件尾,未发现 */ 

		n = strlen(ini_str_trim_l(ini_str_trim_r(buf1)));
		if(n == 0 || buf1[0] == CFG_NTS)
			continue;       /* 空行 或 注释行 */ 

		ret = CFG_ERR_FILE_FORMAT;
		if(n > 2 && ((buf1[0] == CFG_SSL && buf1[n-1] != CFG_SSR)))
			goto r_cfg_end;
		if(buf1[0] == CFG_SSL) {
			buf1[n-1] = 0x00;
			if(strcmp(buf1+1, section) == 0) 
				break; /* 找到项section */
		} 
		i++;
	} 
	i = 0;
	while(1){ /* 搜找key */ 
		ret = CFG_ERR_READ_FILE;
		n = ini_file_get_line(filedata+dataoff, buf1, MAX_CFG_BUF);
		dataoff += n;
		if(n < -1) 
			goto r_cfg_end;
		ret = CFG_KEY_NOT_FOUND;
		if(n < 0)
			goto r_cfg_end;/* 文件尾,未发现key */ 

		n = strlen(ini_str_trim_l(ini_str_trim_r(buf1))); 
		if(n == 0 || buf1[0] == CFG_NTS) 
			continue;       /* 空行 或 注释行 */ 
		ret = CFG_KEY_NOT_FOUND; 
		if(buf1[0] == CFG_SSL) 
			goto r_cfg_end; 
		if(buf1[n-1] == '+') { /* 遇+号表示下一行继续  */ 		
			buf1[n-1] = 0x00; 
			while(1) {			
				ret = CFG_ERR_READ_FILE; 
				n = ini_file_get_line(filedata+dataoff, buf2, MAX_CFG_BUF);
				dataoff += n;
				if(n < -1) 
					goto r_cfg_end; 
				if(n < 0) 
					break;/* 文件结束 */ 

				n = strlen(ini_str_trim_r(buf2)); 
				ret = CFG_ERR_EXCEED_BUF_SIZE; 
				if(n > 0 && buf2[n-1] == '+'){/* 遇+号表示下一行继续 */ 
				 	buf2[n-1] = 0x00; 
					if( (strlen(buf1) + strlen(buf2)) > MAX_CFG_BUF) 
						goto r_cfg_end; 
					strcat(buf1, buf2); 
					continue; 
				} 
				if(strlen(buf1) + strlen(buf2) > MAX_CFG_BUF) 
					goto r_cfg_end; 
				strcat(buf1, buf2); 
				break; 
			} 
		} 
		ret = CFG_ERR_FILE_FORMAT; 
		if(ini_split_key_value(buf1, &key_ptr, &val_ptr) != 1) 
			goto r_cfg_end; 
		ini_str_trim_l(ini_str_trim_r(key_ptr)); 
		if(strcmp(key_ptr, key) != 0) 
			continue;                                  /* 和key值不匹配 */ 
		strcpy(value, val_ptr); 
		break; 
	} 
	ret = CFG_OK; 
r_cfg_end: 
	//if(fp != NULL) fclose(fp); 
	return ret; 
}