Ejemplo n.º 1
0
void ConfigSetChanged(Config *c)
{
	switch (c->Type)
	{
	case CONFIG_TYPE_STRING:
		CFREE(c->u.String.Last);
		if (c->u.String.Value != NULL)
		{
			CSTRDUP(c->u.String.Last, c->u.String.Value);
		}
		break;
	case CONFIG_TYPE_INT:
		c->u.Int.Last = c->u.Int.Value;
		break;
	case CONFIG_TYPE_FLOAT:
		c->u.Float.Last = c->u.Float.Value;
		break;
	case CONFIG_TYPE_BOOL:
		c->u.Bool.Last = c->u.Bool.Value;
		break;
	case CONFIG_TYPE_ENUM:
		c->u.Enum.Last = c->u.Enum.Value;
		break;
	case CONFIG_TYPE_GROUP:
		CA_FOREACH(Config, child, c->u.Group)
			ConfigSetChanged(child);
		CA_FOREACH_END()
		break;
	default:
		CASSERT(false, "Unknown config type");
		break;
	}
}
Ejemplo n.º 2
0
Config ConfigLoad(const char *filename)
{
	// Load default values first
	Config c = ConfigDefault();
	if (filename == NULL)
	{
		// This is equivalent to loading nothing; just exit
		return c;
	}
	FILE *f = fopen(filename, "r");
	if (f == NULL)
	{
		printf("Error loading config '%s'\n", filename);
		return c;
	}
	const int configVersion = ConfigGetVersion(f);
	fclose(f);
	switch (configVersion)
	{
	case 0:
		printf("Classic config is no longer supported\n");
		break;
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
	case 6:
	case 7:
		ConfigLoadJSON(&c, filename);
		break;
	default:
		LOG(LM_MAIN, LL_ERROR, "Unknown config version");
		break;
	}
	ConfigSetChanged(&c);
	return c;
}