blob: 4154516baf76a1279aa72458441ab367953b19d2 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
/* See LICENSE file for copyright and license details. */
#define IN_LIBGAMMA_DUMMY
#include "common.h"
/**
* Initialise an allocated site state
*
* @param this The site state to initialise
* @param site The site identifier, unless it is `NULL` it must a
* `free`:able. Once the state is destroyed the library
* will attempt to free it. There you should not free
* it yourself, and it must not be a string constant
* or allocate on the stack. Note however that it will
* not be free:d if this function fails.
* @return Zero on success, otherwise (negative) the value of an
* error identifier provided by this library
*/
int
libgamma_dummy_site_initialise(libgamma_site_state_t *restrict this, char *restrict site)
{
libgamma_dummy_site_t *data = NULL;
size_t i, sites, crtcs;
sites = libgamma_dummy_internal_configurations.site_count;
if (!libgamma_dummy_internal_configurations.capabilities.multiple_sites)
sites = !!sites;
this->data = NULL;
if (site && *site && (atoll(site) < 0 || sites <= (unsigned long long)atoll(site)))
return LIBGAMMA_NO_SUCH_SITE;
data = malloc(sizeof(libgamma_dummy_site_t));
if (!data)
goto fail;
this->data = data;
data->state = this;
data->partition_count = libgamma_dummy_internal_configurations.default_partition_count;
if (!libgamma_dummy_internal_configurations.capabilities.multiple_partitions)
data->partition_count = !!data->partition_count;
crtcs = libgamma_dummy_internal_configurations.default_crtc_count;
if (!libgamma_dummy_internal_configurations.capabilities.multiple_crtcs)
crtcs = !!crtcs;
data->partitions = malloc(data->partition_count * sizeof(libgamma_dummy_partition_t));
if (!data->partitions)
goto fail;
for (i = 0; i < data->partition_count; i++)
data->partitions[i].crtc_count = crtcs;
this->partitions_available = data->partition_count;
return 0;
fail:
free(data);
this->data = NULL;
return LIBGAMMA_ERRNO_SET;
}
|