[git commit master] setkeycodes: fix handling of 0exx scancodes

Denys Vlasenko vda.linux at googlemail.com
Wed May 19 15:15:54 UTC 2010


commit: http://git.busybox.net/busybox/commit/?id=2e068e725ce693afe5e89e10feaa9f24bef5f789
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

function                                             old     new   delta
setkeycodes_main                                     143     130     -13

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 console-tools/setkeycodes.c |   16 ++++++++--------
 1 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/console-tools/setkeycodes.c b/console-tools/setkeycodes.c
index b785101..b6a9a32 100644
--- a/console-tools/setkeycodes.c
+++ b/console-tools/setkeycodes.c
@@ -21,7 +21,7 @@ enum {
 int setkeycodes_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int setkeycodes_main(int argc, char **argv)
 {
-	int fd, sc;
+	int fd;
 	struct kbkeycode a;
 
 	if (!(argc & 1) /* if even */ || argc < 2) {
@@ -30,17 +30,17 @@ int setkeycodes_main(int argc, char **argv)
 
 	fd = get_console_fd_or_die();
 
-	while (argc > 2) {
-		a.keycode = xatou_range(argv[2], 0, 127);
-		a.scancode = sc = xstrtoul_range(argv[1], 16, 0, 255);
-		if (a.scancode > 127) {
-			a.scancode -= 0xe000;
-			a.scancode += 128;
+	while (argv[1]) {
+		int sc = xstrtoul_range(argv[1], 16, 0, 0xe07f);
+		if (sc >= 0xe000) {
+			sc -= 0xe000;
+			sc += 0x0080;
 		}
+		a.scancode = sc;
+		a.keycode = xatou_range(argv[2], 0, 255);
 		ioctl_or_perror_and_die(fd, KDSETKEYCODE, &a,
 			"can't set SCANCODE %x to KEYCODE %d",
 			sc, a.keycode);
-		argc -= 2;
 		argv += 2;
 	}
 	return EXIT_SUCCESS;
-- 
1.6.3.3



More information about the busybox-cvs mailing list