diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/state.c | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/src/state.c b/src/state.c index 72fbb59..784b429 100644 --- a/src/state.c +++ b/src/state.c @@ -47,6 +47,16 @@ static libgamma_site_state_t *sites = NULL; */ static size_t sites_n = 0; +/** + * All partitions. + */ +static libgamma_partition_state_t *parts = NULL; + +/** + * The number of partitions stored in `parts`. + */ +static size_t parts_n = 0; + /** @@ -260,21 +270,29 @@ initialise_clut(const struct settings *settings) const char *sitename_; char *sitename = NULL; void *new; - size_t i; + size_t i, j, parts_off = 0; + libgamma_site_state_t site; int saved_errno; - try (sites = calloc(settings->monitors_n + 2, sizeof(*sites))); + try (sites = calloc(settings->monitors_n + 1, sizeof(*sites))); for (i = 0; i < settings->monitors_n; i++) { switch (settings->monitors_arg[i]) { case 'd': + parts_off = parts_n; t ((method = get_clut_method(sitename_ = settings->monitors_id[i])) < 0); if (NONE_METHOD) break; sitename_ = strchr(sitename_, '='); if (sitename_) try ((sitename = strdup(sitename_ + 1))); t ((error = libgamma_site_initialise(sites + sites_n, method, sitename))); sitename = NULL; - sites_n++; + site = sites[sites_n++]; + try (new = realloc(parts, (parts_n + site.partitions_available) * sizeof(*parts))); + parts = new; + for (j = 0; j < site.partitions_available; j++) { + t ((error = libgamma_partition_initialise(parts + parts_n, &site, j))); + parts_n++; + } break; case 'm': |