config-parser: Add section iterator API
The X backend needs to iterate through all outputs.
This commit is contained in:
@@ -75,6 +75,10 @@ static const char t1[] =
|
|||||||
"color=red\n"
|
"color=red\n"
|
||||||
"contents=sand\n";
|
"contents=sand\n";
|
||||||
|
|
||||||
|
static const char *section_names[] = {
|
||||||
|
"foo", "bar", "stuff", "bucket", "bucket"
|
||||||
|
};
|
||||||
|
|
||||||
static const char t2[] =
|
static const char t2[] =
|
||||||
"# invalid section...\n"
|
"# invalid section...\n"
|
||||||
"[this bracket isn't closed\n";
|
"[this bracket isn't closed\n";
|
||||||
@@ -93,8 +97,9 @@ int main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
struct weston_config *config;
|
struct weston_config *config;
|
||||||
struct weston_config_section *section;
|
struct weston_config_section *section;
|
||||||
|
const char *name;
|
||||||
char *s;
|
char *s;
|
||||||
int r, b;
|
int r, b, i;
|
||||||
int32_t n;
|
int32_t n;
|
||||||
uint32_t u;
|
uint32_t u;
|
||||||
|
|
||||||
@@ -170,6 +175,12 @@ int main(int argc, char *argv[])
|
|||||||
assert(r == -1 && errno == ENOENT && strcmp(s, "eels") == 0);
|
assert(r == -1 && errno == ENOENT && strcmp(s, "eels") == 0);
|
||||||
free(s);
|
free(s);
|
||||||
|
|
||||||
|
section = NULL;
|
||||||
|
i = 0;
|
||||||
|
while (weston_config_next_section(config, §ion, &name))
|
||||||
|
assert(strcmp(section_names[i++], name) == 0);
|
||||||
|
assert(i == 5);
|
||||||
|
|
||||||
weston_config_destroy(config);
|
weston_config_destroy(config);
|
||||||
|
|
||||||
config = run_test(t2);
|
config = run_test(t2);
|
||||||
|
|||||||
@@ -36,6 +36,10 @@
|
|||||||
#include <wayland-util.h>
|
#include <wayland-util.h>
|
||||||
#include "config-parser.h"
|
#include "config-parser.h"
|
||||||
|
|
||||||
|
#define container_of(ptr, type, member) ({ \
|
||||||
|
const __typeof__( ((type *)0)->member ) *__mptr = (ptr); \
|
||||||
|
(type *)( (char *)__mptr - offsetof(type,member) );})
|
||||||
|
|
||||||
static int
|
static int
|
||||||
handle_key(const struct config_key *key, const char *value)
|
handle_key(const struct config_key *key, const char *value)
|
||||||
{
|
{
|
||||||
@@ -472,6 +476,26 @@ weston_config_parse(int fd)
|
|||||||
return config;
|
return config;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
weston_config_next_section(struct weston_config *config,
|
||||||
|
struct weston_config_section **section,
|
||||||
|
const char **name)
|
||||||
|
{
|
||||||
|
if (*section == NULL)
|
||||||
|
*section = container_of(config->section_list.next,
|
||||||
|
struct weston_config_section, link);
|
||||||
|
else
|
||||||
|
*section = container_of((*section)->link.next,
|
||||||
|
struct weston_config_section, link);
|
||||||
|
|
||||||
|
if (&(*section)->link == &config->section_list)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
*name = (*section)->name;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
weston_config_destroy(struct weston_config *config)
|
weston_config_destroy(struct weston_config *config)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -102,6 +102,11 @@ weston_config_parse(int fd);
|
|||||||
void
|
void
|
||||||
weston_config_destroy(struct weston_config *config);
|
weston_config_destroy(struct weston_config *config);
|
||||||
|
|
||||||
|
int weston_config_next_section(struct weston_config *config,
|
||||||
|
struct weston_config_section **section,
|
||||||
|
const char **name);
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user