changeset 9809:decd140e1fad

6846252 hald-probe-xkb crashing on snv115 causing really poor selection of xkb layouts.
author Lin Guo - Sun Microsystems <Lin.Guo@Sun.COM>
date Mon, 08 Jun 2009 07:59:22 +0800
parents bab459bb4db2
children 0bddf3c4f9fb
files usr/src/cmd/hal/probing/xkb/probe-xkb.c
diffstat 1 files changed, 18 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/cmd/hal/probing/xkb/probe-xkb.c	Sat Jun 06 17:36:42 2009 -0700
+++ b/usr/src/cmd/hal/probing/xkb/probe-xkb.c	Mon Jun 08 07:59:22 2009 +0800
@@ -235,17 +235,15 @@
 		/* record default entry if/when found */
 		if (*type == '*') {
 			if (defkeymap == NULL) {
-				defkeymap = keymap;
-				defmodel = model;
-				defxkblay = xkblay;
+				defkeymap = strdup(keymap);
+				defmodel = strdup(model);
+				defxkblay = strdup(xkblay);
 			}
 		} else if (atoi(type) == kb_type) {
-			if (*type == '*') {
-				if (defkeymap == NULL) {
-					defkeymap = keymap;
-					defmodel = model;
-					defxkblay = xkblay;
-				}
+			if (*layout == '*') {
+				defkeymap = strdup(keymap);
+				defmodel = strdup(model);
+				defxkblay = strdup(xkblay);
 			} else if (atoi(layout) == kb_layout) {
 				found_keytable = 1;
 				break;
@@ -329,12 +327,18 @@
 		goto out;
 	}
 
-	libhal_changeset_set_property_string(cs,
-	    "input.x11_options.XkbModel", xkbmodel);
-	libhal_changeset_set_property_string(cs,
-	    "input.x11_options.XkbLayout", xkblayout);
+	/*
+	 * If doesn't find matching entry in xkbtable.map, using default
+	 * values setting in 10-x11-input.fdi
+	 */
+	if ((xkbmodel != NULL) && (xkblayout != NULL)) {
+		libhal_changeset_set_property_string(cs,
+		    "input.x11_options.XkbModel", xkbmodel);
+		libhal_changeset_set_property_string(cs,
+		    "input.x11_options.XkbLayout", xkblayout);
 
-	libhal_device_commit_changeset(ctx, cs, &error);
+		libhal_device_commit_changeset(ctx, cs, &error);
+	}
 
 	ret = 0;