예제 #1
0
파일: ini.c 프로젝트: chengs/UEFI
int ini_WriteString(INIFILEHANDLE ini, const char *secName, const char *itemName, const char *value)
{
	LPINIFILE iniFile = (LPINIFILE)ini;
	LPINISECTION sec;
	LPINIITEM item;
	iniFile->flag = 1;
	sec = ini_searchSection(iniFile, secName);
	if(sec == NULL)
	{
		sec = ini_addSection(iniFile, secName);
		item = ini_addItem(sec, itemName, value);
	}
	else
	{
		item = ini_searchItem(sec, itemName);
		if(item == NULL)
		{
			item = ini_addItem(sec, itemName, value);
		}
		else
		{
			free(item->value);
			item->value = (char *)malloc(strlen(value) + 1);
			strcpy(item->value, value);
		}
	}
	return 0;
}
예제 #2
0
static bool ini_parseSection(Ini* ini, char* line) {
	if (line == NULL)
		return false;

	int strLen = str_len(line);

	if (line[0] != '[' || line[strLen - 1] != ']' || (strLen < 3)) {
		logWarn("Invalid Section syntax '%s'", line);
		return false;
	}

	char* sectionName = str_dup(line+1);
	sectionName[strLen -2] = '\0';

	logDebug("Adding section '%s'", sectionName);
	return ini_addSection(ini, sectionName);
}
예제 #3
0
파일: ini.c 프로젝트: chengs/UEFI
INIFILEHANDLE ini_open(const char *iniFile, const char *mode)
{
	char lineBuf[1024];
	LPINIFILE file;
	LPINISECTION curSection = NULL;
	FILE *fp;
	fp = fopen(iniFile, mode);
	if(fp == NULL)
		return NULL;
	file = ini_createIniStruct(iniFile);
	strcpy(file->mode, mode);
	while(fgets(lineBuf, 1023, fp))
	{
		char *p = strtrim(lineBuf);
		int len = strlen(p);
		if(strlen(p) <= 0)
			continue;
		else if(p[0] == '#')
			continue;
		else if((p[0] == '[') && (p[len - 1] == ']'))
		{
			p[len - 1] = '\0';
			p = strtrim(&p[1]);
			curSection = ini_addSection(file, p);
		}
		else
		{
			char *p2 = strchr(lineBuf, '=');
			if(p2 == NULL)
			{
				ini_destryIniStruct(file);
				file = NULL;
				break;
			}
			*p2++ = '\0';
			p = strtrim(p);
			p2 = strtrim(p2);
			ini_addItem(curSection, p, p2);
		}
	}
	fclose(fp);
	return (INIFILEHANDLE)file;
}