mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05:00 
			
		
		
		
	conf: improve config error handling
Make the config parser return the amount of parsed items. Fail to create a context when parsing the config fails. Log the number of items parsed from the config.
This commit is contained in:
		
							parent
							
								
									09cba1e4de
								
							
						
					
					
						commit
						577ad0c73a
					
				
					 2 changed files with 27 additions and 14 deletions
				
			
		| 
						 | 
				
			
			@ -281,6 +281,7 @@ static int parse_spa_libs(struct pw_context *context, char *str)
 | 
			
		|||
{
 | 
			
		||||
	struct spa_json it[2];
 | 
			
		||||
	char key[512], value[512];
 | 
			
		||||
	int count = 0;
 | 
			
		||||
 | 
			
		||||
	spa_json_init(&it[0], str, strlen(str));
 | 
			
		||||
	if (spa_json_enter_object(&it[0], &it[1]) < 0)
 | 
			
		||||
| 
						 | 
				
			
			@ -294,16 +295,17 @@ static int parse_spa_libs(struct pw_context *context, char *str)
 | 
			
		|||
		}
 | 
			
		||||
		else if (spa_json_get_string(&it[1], value, sizeof(value)-1) > 0) {
 | 
			
		||||
			pw_context_add_spa_lib(context, key, value);
 | 
			
		||||
			count++;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return 0;
 | 
			
		||||
	return count;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int load_module(struct pw_context *context, const char *key, const char *args, const char *flags)
 | 
			
		||||
{
 | 
			
		||||
	if (pw_context_load_module(context, key, args, NULL) == NULL) {
 | 
			
		||||
		if (errno == ENOENT && flags && strstr(flags, "ifexists") != NULL) {
 | 
			
		||||
			pw_log_debug(NAME" %p: skipping unavailable module %s",
 | 
			
		||||
			pw_log_info(NAME" %p: skipping unavailable module %s",
 | 
			
		||||
					context, key);
 | 
			
		||||
		} else if (flags == NULL || strstr(flags, "nofail") == NULL) {
 | 
			
		||||
			pw_log_error(NAME" %p: could not load mandatory module \"%s\": %m",
 | 
			
		||||
| 
						 | 
				
			
			@ -313,6 +315,8 @@ static int load_module(struct pw_context *context, const char *key, const char *
 | 
			
		|||
			pw_log_info(NAME" %p: could not load optional module \"%s\": %m",
 | 
			
		||||
					context, key);
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
		pw_log_info(NAME" %p: loaded module %s", context, key);
 | 
			
		||||
	}
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -329,7 +333,7 @@ static int parse_modules(struct pw_context *context, char *str)
 | 
			
		|||
{
 | 
			
		||||
	struct spa_json it[3];
 | 
			
		||||
	char key[512];
 | 
			
		||||
	int res = 0;
 | 
			
		||||
	int res = 0, count = 0;
 | 
			
		||||
 | 
			
		||||
	spa_json_init(&it[0], str, strlen(str));
 | 
			
		||||
	if (spa_json_enter_array(&it[0], &it[1]) < 0)
 | 
			
		||||
| 
						 | 
				
			
			@ -366,6 +370,8 @@ static int parse_modules(struct pw_context *context, char *str)
 | 
			
		|||
 | 
			
		||||
		if (res < 0)
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		res = ++count;
 | 
			
		||||
	}
 | 
			
		||||
	return res;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -409,7 +415,7 @@ static int parse_objects(struct pw_context *context, char *str)
 | 
			
		|||
{
 | 
			
		||||
	struct spa_json it[3];
 | 
			
		||||
	char key[512];
 | 
			
		||||
	int res = 0;
 | 
			
		||||
	int res = 0, count = 0;
 | 
			
		||||
 | 
			
		||||
	spa_json_init(&it[0], str, strlen(str));
 | 
			
		||||
	if (spa_json_enter_array(&it[0], &it[1]) < 0)
 | 
			
		||||
| 
						 | 
				
			
			@ -447,6 +453,7 @@ static int parse_objects(struct pw_context *context, char *str)
 | 
			
		|||
 | 
			
		||||
		if (res < 0)
 | 
			
		||||
			break;
 | 
			
		||||
		res = ++count;
 | 
			
		||||
	}
 | 
			
		||||
	return res;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -493,7 +500,7 @@ static int parse_exec(struct pw_context *context, char *str)
 | 
			
		|||
{
 | 
			
		||||
	struct spa_json it[3];
 | 
			
		||||
	char key[512];
 | 
			
		||||
	int res = 0;
 | 
			
		||||
	int res = 0, count = 0;
 | 
			
		||||
 | 
			
		||||
	spa_json_init(&it[0], str, strlen(str));
 | 
			
		||||
	if (spa_json_enter_array(&it[0], &it[1]) < 0)
 | 
			
		||||
| 
						 | 
				
			
			@ -522,6 +529,8 @@ static int parse_exec(struct pw_context *context, char *str)
 | 
			
		|||
 | 
			
		||||
		if (res < 0)
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		res = ++count;
 | 
			
		||||
	}
 | 
			
		||||
	return res;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -535,7 +544,7 @@ int pw_context_parse_conf_section(struct pw_context *context,
 | 
			
		|||
	int res;
 | 
			
		||||
 | 
			
		||||
	if ((str = pw_properties_get(conf, section)) == NULL)
 | 
			
		||||
		return -ENOENT;
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	s = strdup(str);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -361,14 +361,18 @@ struct pw_context *pw_context_new(struct pw_loop *main_loop,
 | 
			
		|||
 | 
			
		||||
	this->sc_pagesize = sysconf(_SC_PAGESIZE);
 | 
			
		||||
 | 
			
		||||
	if ((res = pw_context_parse_conf_section(this, conf, "context.spa-libs")) >= 0)
 | 
			
		||||
		pw_log_info(NAME" %p: parsed context.spa-libs section", this);
 | 
			
		||||
	if ((res = pw_context_parse_conf_section(this, conf, "context.modules")) >= 0)
 | 
			
		||||
		pw_log_info(NAME" %p: parsed context.modules section", this);
 | 
			
		||||
	if ((res = pw_context_parse_conf_section(this, conf, "context.objects")) >= 0)
 | 
			
		||||
		pw_log_info(NAME" %p: parsed context.objects section", this);
 | 
			
		||||
	if ((res = pw_context_parse_conf_section(this, conf, "context.exec")) >= 0)
 | 
			
		||||
		pw_log_info(NAME" %p: parsed context.exec section", this);
 | 
			
		||||
	if ((res = pw_context_parse_conf_section(this, conf, "context.spa-libs")) < 0)
 | 
			
		||||
		goto error_free_loop;
 | 
			
		||||
	pw_log_info(NAME" %p: parsed %d context.spa-libs items", this, res);
 | 
			
		||||
	if ((res = pw_context_parse_conf_section(this, conf, "context.modules")) < 0)
 | 
			
		||||
		goto error_free_loop;
 | 
			
		||||
	pw_log_info(NAME" %p: parsed %d context.modules items", this, res);
 | 
			
		||||
	if ((res = pw_context_parse_conf_section(this, conf, "context.objects")) < 0)
 | 
			
		||||
		goto error_free_loop;
 | 
			
		||||
	pw_log_info(NAME" %p: parsed %d context.objects items", this, res);
 | 
			
		||||
	if ((res = pw_context_parse_conf_section(this, conf, "context.exec")) < 0)
 | 
			
		||||
		goto error_free_loop;
 | 
			
		||||
	pw_log_info(NAME" %p: parsed %d context.exec items", this, res);
 | 
			
		||||
 | 
			
		||||
	pw_log_debug(NAME" %p: created", this);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue