Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F115644855
D38381.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
7 KB
Referenced Files
None
Subscribers
None
D38381.diff
View Options
diff --git a/sys/dev/adb/adb_kbd.c b/sys/dev/adb/adb_kbd.c
--- a/sys/dev/adb/adb_kbd.c
+++ b/sys/dev/adb/adb_kbd.c
@@ -798,6 +798,7 @@
case OPIO_KEYMAP:
case PIO_KEYMAPENT:
case PIO_DEADKEYMAP:
+ case OPIO_DEADKEYMAP:
default:
return (genkbd_commonioctl(kbd, cmd, data));
}
diff --git a/sys/dev/atkbdc/atkbd.c b/sys/dev/atkbdc/atkbd.c
--- a/sys/dev/atkbdc/atkbd.c
+++ b/sys/dev/atkbdc/atkbd.c
@@ -1091,6 +1091,7 @@
case OPIO_KEYMAP: /* set keyboard translation table (compat) */
case PIO_KEYMAPENT: /* set keyboard translation table entry */
case PIO_DEADKEYMAP: /* set accent key translation table */
+ case OPIO_DEADKEYMAP: /* set accent key translation table (compat) */
state->ks_accents = 0;
/* FALLTHROUGH */
default:
diff --git a/sys/dev/gpio/gpiokeys.c b/sys/dev/gpio/gpiokeys.c
--- a/sys/dev/gpio/gpiokeys.c
+++ b/sys/dev/gpio/gpiokeys.c
@@ -899,6 +899,7 @@
case PIO_KEYMAPENT: /* set keyboard translation table
* entry */
case PIO_DEADKEYMAP: /* set accent key translation table */
+ case OPIO_DEADKEYMAP: /* set accent key translation table (compat) */
sc->sc_accents = 0;
/* FALLTHROUGH */
default:
diff --git a/sys/dev/hid/hkbd.c b/sys/dev/hid/hkbd.c
--- a/sys/dev/hid/hkbd.c
+++ b/sys/dev/hid/hkbd.c
@@ -1640,6 +1640,7 @@
case PIO_KEYMAPENT: /* set keyboard translation table
* entry */
case PIO_DEADKEYMAP: /* set accent key translation table */
+ case OPIO_DEADKEYMAP: /* set accent key translation table (compat) */
sc->sc_accents = 0;
/* FALLTHROUGH */
default:
diff --git a/sys/dev/hyperv/input/hv_kbd.c b/sys/dev/hyperv/input/hv_kbd.c
--- a/sys/dev/hyperv/input/hv_kbd.c
+++ b/sys/dev/hyperv/input/hv_kbd.c
@@ -666,6 +666,7 @@
case OPIO_KEYMAP: /* set keyboard translation table (compat) */
case PIO_KEYMAPENT: /* set keyboard translation table entry */
case PIO_DEADKEYMAP: /* set accent key translation table */
+ case OPIO_DEADKEYMAP: /* set accent key translation table (compat) */
sc->sc_accents = 0;
/* FALLTHROUGH */
default:
diff --git a/sys/dev/kbd/kbd.c b/sys/dev/kbd/kbd.c
--- a/sys/dev/kbd/kbd.c
+++ b/sys/dev/kbd/kbd.c
@@ -790,6 +790,8 @@
{
keymap_t *mapp;
okeymap_t *omapp;
+ accentmap_t *accentmapp;
+ oaccentmap_t *oaccentmapp;
keyarg_t *keyp;
fkeyarg_t *fkeyp;
int i, j;
@@ -898,16 +900,58 @@
#endif
case GIO_DEADKEYMAP: /* get accent key translation table */
- bcopy(kbd->kb_accentmap, arg, sizeof(*kbd->kb_accentmap));
+ error = copyout(kbd->kb_accentmap, *(void **)arg,
+ sizeof(accentmap_t));
+ return (error);
+ break;
+ case OGIO_DEADKEYMAP: /* get accent key translation table (compat) */
+ accentmapp = kbd->kb_accentmap;
+ oaccentmapp = (oaccentmap_t *)arg;
+ oaccentmapp->n_accs = accentmapp->n_accs;
+ for (i = 0; i < NUM_DEADKEYS; i++) {
+ oaccentmapp->acc[i].accchar =
+ accentmapp->acc[i].accchar;
+ for (j = 0; j < NUM_ACCENTCHARS; j++) {
+ oaccentmapp->acc[i].map[j][0] =
+ accentmapp->acc[i].map[j][0];
+ oaccentmapp->acc[i].map[j][1] =
+ accentmapp->acc[i].map[j][1];
+ }
+ }
break;
+
case PIO_DEADKEYMAP: /* set accent key translation table */
+ case OPIO_DEADKEYMAP: /* set accent key translation table (compat) */
#ifndef KBD_DISABLE_KEYMAP_LOAD
- error = accent_change_ok(kbd->kb_accentmap,
- (accentmap_t *)arg, curthread);
+ accentmapp = malloc(sizeof(*accentmapp), M_TEMP, M_WAITOK);
+ if (cmd == OPIO_DEADKEYMAP) {
+ oaccentmapp = (oaccentmap_t *)arg;
+ accentmapp->n_accs = oaccentmapp->n_accs;
+ for (i = 0; i < NUM_DEADKEYS; i++) {
+ for (j = 0; j < NUM_ACCENTCHARS; j++) {
+ accentmapp->acc[i].map[j][0] =
+ oaccentmapp->acc[i].map[j][0];
+ accentmapp->acc[i].map[j][1] =
+ oaccentmapp->acc[i].map[j][1];
+ accentmapp->acc[i].accchar =
+ oaccentmapp->acc[i].accchar;
+ }
+ }
+ } else {
+ error = copyin(*(void **)arg, accentmapp, sizeof(*accentmapp));
+ if (error != 0) {
+ free(accentmapp, M_TEMP);
+ return (error);
+ }
+ }
+
+ error = accent_change_ok(kbd->kb_accentmap, accentmapp, curthread);
if (error != 0) {
+ free(accentmapp, M_TEMP);
return (error);
}
- bcopy(arg, kbd->kb_accentmap, sizeof(*kbd->kb_accentmap));
+ bcopy(accentmapp, kbd->kb_accentmap, sizeof(*kbd->kb_accentmap));
+ free(accentmapp, M_TEMP);
break;
#else
return (ENODEV);
diff --git a/sys/dev/kbdmux/kbdmux.c b/sys/dev/kbdmux/kbdmux.c
--- a/sys/dev/kbdmux/kbdmux.c
+++ b/sys/dev/kbdmux/kbdmux.c
@@ -1243,6 +1243,7 @@
case OPIO_KEYMAP: /* set keyboard translation table (compat) */
case PIO_KEYMAPENT: /* set keyboard translation table entry */
case PIO_DEADKEYMAP: /* set accent key translation table */
+ case OPIO_DEADKEYMAP: /* set accent key translation table (compat) */
KBDMUX_LOCK(state);
state->ks_accents = 0;
diff --git a/sys/dev/syscons/syscons.c b/sys/dev/syscons/syscons.c
--- a/sys/dev/syscons/syscons.c
+++ b/sys/dev/syscons/syscons.c
@@ -1598,6 +1598,8 @@
case OPIO_KEYMAP: /* set keyboard translation table (compat) */
case GIO_DEADKEYMAP: /* get accent key translation table */
case PIO_DEADKEYMAP: /* set accent key translation table */
+ case OGIO_DEADKEYMAP: /* get accent key translation table (compat) */
+ case OPIO_DEADKEYMAP: /* set accent key translation table (compat) */
case GETFKEY: /* get function key string */
case SETFKEY: /* set function key string */
error = kbdd_ioctl(sc->kbd, cmd, data);
diff --git a/sys/dev/usb/input/ukbd.c b/sys/dev/usb/input/ukbd.c
--- a/sys/dev/usb/input/ukbd.c
+++ b/sys/dev/usb/input/ukbd.c
@@ -1862,6 +1862,7 @@
case PIO_KEYMAPENT: /* set keyboard translation table
* entry */
case PIO_DEADKEYMAP: /* set accent key translation table */
+ case OPIO_DEADKEYMAP: /* set accent key translation table (compat) */
sc->sc_accents = 0;
/* FALLTHROUGH */
default:
diff --git a/sys/dev/vkbd/vkbd.c b/sys/dev/vkbd/vkbd.c
--- a/sys/dev/vkbd/vkbd.c
+++ b/sys/dev/vkbd/vkbd.c
@@ -1207,6 +1207,7 @@
case OPIO_KEYMAP: /* set keyboard translation table (compat) */
case PIO_KEYMAPENT: /* set keyboard translation table entry */
case PIO_DEADKEYMAP: /* set accent key translation table */
+ case OPIO_DEADKEYMAP: /* set accent key translation table (compat) */
state->ks_accents = 0;
/* FALLTHROUGH */
diff --git a/sys/dev/vt/vt_core.c b/sys/dev/vt/vt_core.c
--- a/sys/dev/vt/vt_core.c
+++ b/sys/dev/vt/vt_core.c
@@ -2403,7 +2403,9 @@
case GIO_KEYMAP:
case PIO_KEYMAP:
case GIO_DEADKEYMAP:
+ case OGIO_DEADKEYMAP:
case PIO_DEADKEYMAP:
+ case OPIO_DEADKEYMAP:
case GETFKEY:
case SETFKEY:
case KDGKBINFO:
diff --git a/sys/sys/kbio.h b/sys/sys/kbio.h
--- a/sys/sys/kbio.h
+++ b/sys/sys/kbio.h
@@ -199,8 +199,8 @@
#define ACC(x) ((x)+F_ACC)
struct acc_t {
- u_char accchar;
- u_char map[NUM_ACCENTCHARS][2];
+ u_int accchar;
+ u_int map[NUM_ACCENTCHARS][2];
};
struct accentmap {
@@ -209,6 +209,19 @@
};
typedef struct accentmap accentmap_t;
+#ifdef _KERNEL
+struct oacc_t {
+ u_char accchar;
+ u_char map[NUM_ACCENTCHARS][2];
+};
+
+struct oaccentmap {
+ u_short n_accs;
+ struct oacc_t acc[NUM_DEADKEYS];
+};
+typedef struct oaccentmap oaccentmap_t;
+#endif /* _KERNEL */
+
struct keyarg {
u_short keynum;
struct keyent_t key;
@@ -241,8 +254,13 @@
#define OGIO_KEYMAP _IOR('k', 6, okeymap_t)
#define OPIO_KEYMAP _IOW('k', 7, okeymap_t)
#endif /* _KERNEL */
-#define GIO_DEADKEYMAP _IOR('k', 8, accentmap_t)
-#define PIO_DEADKEYMAP _IOW('k', 9, accentmap_t)
+/* XXX: Should have accentmap_t as an argument, but that's too big for ioctl()! */
+#define GIO_DEADKEYMAP _IO('k', 8)
+#define PIO_DEADKEYMAP _IO('k', 9)
+#ifdef _KERNEL
+#define OGIO_DEADKEYMAP _IOR('k', 8, oaccentmap_t)
+#define OPIO_DEADKEYMAP _IOW('k', 9, oaccentmap_t)
+#endif /* _KERNEL */
#define GIO_KEYMAPENT _IOWR('k', 10, keyarg_t)
#define PIO_KEYMAPENT _IOW('k', 11, keyarg_t)
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Apr 27, 11:50 AM (2 h, 29 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
17817249
Default Alt Text
D38381.diff (7 KB)
Attached To
Mode
D38381: Add support for Unicode characters in kbdmap dead key maps
Attached
Detach File
Event Timeline
Log In to Comment