[PATCH xserver 04/11] modesetting: Simplify output name creation
Daniel Martin
consume.noise at gmail.com
Tue Nov 7 09:38:35 UTC 2017
Looks much better without gotos.
Signed-off-by: Daniel Martin <consume.noise at gmail.com>
---
hw/xfree86/drivers/modesetting/drmmode_display.c | 75 +++++++++++-------------
1 file changed, 34 insertions(+), 41 deletions(-)
diff --git a/hw/xfree86/drivers/modesetting/drmmode_display.c b/hw/xfree86/drivers/modesetting/drmmode_display.c
index 7ff55ef24..38314ed18 100644
--- a/hw/xfree86/drivers/modesetting/drmmode_display.c
+++ b/hw/xfree86/drivers/modesetting/drmmode_display.c
@@ -1636,53 +1636,46 @@ static xf86OutputPtr find_output(ScrnInfoPtr pScrn, int id)
return NULL;
}
-static Bool
-parse_path_blob(drmModePropertyBlobPtr path_blob,
- int *conn_base_id, char **extra_path)
-{
- char *colon, *dash;
-
- if (!path_blob)
- return FALSE;
-
- colon = strchr(path_blob->data, ':');
- dash = strchr(path_blob->data, '-');
-
- if (colon && dash) {
- *conn_base_id = strtoul(colon + 1, NULL, 10);
- *extra_path = dash + 1;
-
- return TRUE;
- }
-
- return FALSE;
-}
-
static void
drmmode_create_name(ScrnInfoPtr pScrn, drmModeConnectorPtr koutput, char *name,
drmModePropertyBlobPtr path_blob)
{
- char *extra_path;
- int conn_id;
- xf86OutputPtr output;
+ char prefix[32], suffix[32];
- if (!parse_path_blob(path_blob, &conn_id, &extra_path))
- goto fallback;
-
- output = find_output(pScrn, conn_id);
- if (!output)
- goto fallback;
-
- snprintf(name, 32, "%s-%s", output->name, extra_path);
- return;
-
- fallback:
- if (koutput->connector_type >= ARRAY_SIZE(output_names))
- snprintf(name, 32, "Unknown%d-%d", koutput->connector_type, koutput->connector_type_id);
- else if (pScrn->is_gpu)
- snprintf(name, 32, "%s-%d-%d", output_names[koutput->connector_type], pScrn->scrnIndex - GPU_SCREEN_OFFSET + 1, koutput->connector_type_id);
+ /* Initialize prefix and suffix with the most commonly used values. */
+ if (koutput->connector_type < ARRAY_SIZE(output_names))
+ snprintf(prefix, 32, "%s", output_names[koutput->connector_type]);
else
- snprintf(name, 32, "%s-%d", output_names[koutput->connector_type], koutput->connector_type_id);
+ snprintf(prefix, 32, "Unknown%d", koutput->connector_type);
+
+ snprintf(suffix, 32, "%d", koutput->connector_type_id);
+
+ /* Override prefix and suffix, if we find our base connector, which is
+ * encoded within the MST path. */
+ if (path_blob) {
+ xf86OutputPtr output = NULL;
+ char *colon, *dash, *extra_path;
+
+ colon = strchr(path_blob->data, ':');
+ dash = strchr(path_blob->data, '-');
+
+ if (colon && dash) {
+ int base_id = strtoul(colon + 1, NULL, 10);
+ extra_path = dash + 1;
+ output = find_output(pScrn, base_id);
+ }
+
+ if (output) {
+ snprintf(prefix, 32, "%s", output->name);
+ snprintf(suffix, 32, "%s", extra_path);
+ }
+ }
+
+ if (pScrn->is_gpu) {
+ int gpu_scrn = pScrn->scrnIndex - GPU_SCREEN_OFFSET + 1;
+ snprintf(name, 32, "%s-%d-%s", prefix, gpu_scrn, suffix);
+ } else
+ snprintf(name, 32, "%s-%s", prefix, suffix);
}
static unsigned int
--
2.13.6
More information about the xorg-devel
mailing list