aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gamma-linux-drm.c2
-rw-r--r--src/gamma-quartz-cg.h4
-rw-r--r--src/gamma-w32-gdi.c9
-rw-r--r--src/gamma-w32-gdi.h4
-rw-r--r--src/libgamma-method.c9
5 files changed, 20 insertions, 8 deletions
diff --git a/src/gamma-linux-drm.c b/src/gamma-linux-drm.c
index ff41aa3..dbe01b5 100644
--- a/src/gamma-linux-drm.c
+++ b/src/gamma-linux-drm.c
@@ -44,7 +44,7 @@ void libgamma_linux_drm_method_capabilities(libgamma_method_capabilities_t* rest
| CRTC_INFO_CONNECTOR_NAME
| CRTC_INFO_CONNECTOR_TYPE
| CRTC_INFO_GAMMA;
- this->default_site_known = NULL;
+ this->default_site_known = 1;
this->multiple_sites = 0;
this->multiple_partitions = 1;
this->multiple_crtcs = 1;
diff --git a/src/gamma-quartz-cg.h b/src/gamma-quartz-cg.h
index f4331b4..e70ecc5 100644
--- a/src/gamma-quartz-cg.h
+++ b/src/gamma-quartz-cg.h
@@ -105,14 +105,14 @@ int libgamma_quartz_cg_partition_restore(libgamma_partition_state_t* restrict th
* error identifier provided by this library
*/
int libgamma_quartz_cg_crtc_initialise(libgamma_crtc_state_t* restrict this,
- libgamma_partition_state_t* restrict partition, size_t crtc);
+ libgamma_partition_state_t* restrict partition, size_t crtc) __attribute__((pure));
/**
* Release all resources held by a CRTC state
*
* @param this The CRTC state
*/
-void libgamma_quartz_cg_crtc_destroy(libgamma_crtc_state_t* restrict this);
+void libgamma_quartz_cg_crtc_destroy(libgamma_crtc_state_t* restrict this) __attribute__((const));
/**
* Restore the gamma ramps for a CRTC to the system settings for that CRTC
diff --git a/src/gamma-w32-gdi.c b/src/gamma-w32-gdi.c
index 5065641..50683a9 100644
--- a/src/gamma-w32-gdi.c
+++ b/src/gamma-w32-gdi.c
@@ -143,6 +143,8 @@ int libgamma_w32_gdi_partition_initialise(libgamma_partition_state_t* restrict t
if (partition != 0)
return LIBGAMMA_NO_SUCH_PARTITION;
+ /* Count CRTC:s by iteration over all possible identifiers
+ until we reach on that does not exist. */
display.cb = sizeof(DISPLAY_DEVICE);
while (EnumDisplayDevices(NULL, n, &display, 0))
if (n++, n == 0)
@@ -196,11 +198,16 @@ int libgamma_w32_gdi_crtc_initialise(libgamma_crtc_state_t* restrict this,
(void) partition;
this->data = NULL;
- display.cb = sizeof(DISPLAY_DEVICE);
+
+ display.cb = sizeof(DISPLAY_DEVICE); /* Windows's API mandates this... */
+ /* Get identifier for selected CRTC. */
if (!EnumDisplayDevices(NULL, (DWORD)crtc, &display, 0))
return LIBGAMMA_NO_SUCH_CRTC;
+ /* Check that the connector is enabled,
+ * newer versions of Windows will always pass. */
if (!(display.StateFlags & DISPLAY_DEVICE_ACTIVE))
return LIBGAMMA_CONNECTOR_DISABLED;
+ /* Acquire CRTC connection. */
context = CreateDC(TEXT("DISPLAY"), display.DeviceName, NULL, NULL);
if (context == NULL)
return LIBGAMMA_OPEN_CRTC_FAILED;
diff --git a/src/gamma-w32-gdi.h b/src/gamma-w32-gdi.h
index 02c220e..74c19fb 100644
--- a/src/gamma-w32-gdi.h
+++ b/src/gamma-w32-gdi.h
@@ -54,7 +54,7 @@ int libgamma_w32_gdi_site_initialise(libgamma_site_state_t* restrict this,
*
* @param this The site state
*/
-void libgamma_w32_gdi_site_destroy(libgamma_site_state_t* restrict this);
+void libgamma_w32_gdi_site_destroy(libgamma_site_state_t* restrict this) __attribute__((const));
/**
* Restore the gamma ramps all CRTCS with a site to the system settings
@@ -83,7 +83,7 @@ int libgamma_w32_gdi_partition_initialise(libgamma_partition_state_t* restrict t
*
* @param this The partition state
*/
-void libgamma_w32_gdi_partition_destroy(libgamma_partition_state_t* restrict this);
+void libgamma_w32_gdi_partition_destroy(libgamma_partition_state_t* restrict this) __attribute__((const));
/**
* Restore the gamma ramps all CRTCS with a partition to the system settings
diff --git a/src/libgamma-method.c b/src/libgamma-method.c
index 164d0b4..47afd54 100644
--- a/src/libgamma-method.c
+++ b/src/libgamma-method.c
@@ -233,10 +233,15 @@ void libgamma_gamma_rampsf_free(libgamma_gamma_rampsf_t* restrict this)
int libgamma_gamma_rampsd_initialise(libgamma_gamma_rampsd_t* restrict this)
{
size_t n = this->red_size + this->green_size + this->blue_size;
- this->red = malloc(n * sizeof(double));
+#ifdef HAVE_GAMMA_METHOD_LINUX_DRM
+ /* Valgrind complains about us reading uninitialize memory if we just use malloc. */
+ this->red = calloc(n, sizeof(double));
+#else
+ this->red = malloc(n * sizeof(double));
+#endif
this->green = this-> red + this-> red_size;
this->blue = this->green + this->green_size;
- return this->red ? 0 : -1;
+ return this->red == NULL ? -1 : 0;
}