diff --git a/headers/private/interface/input_globals.h b/headers/private/interface/input_globals.h index 742dc62c38..d94093e25a 100644 --- a/headers/private/interface/input_globals.h +++ b/headers/private/interface/input_globals.h @@ -27,10 +27,12 @@ #ifndef __INPUT_GLOBALS_H #define __INPUT_GLOBALS_H +#include #include status_t _control_input_server_(BMessage *command, BMessage *reply); status_t _restore_key_map_(); +void _get_key_map(key_map **map, char **key_buffer, ssize_t *key_buffer_size); #endif // __INPUT_GLOBALS_H diff --git a/src/kits/interface/InterfaceDefs.cpp b/src/kits/interface/InterfaceDefs.cpp index 9844b68792..a3bf4500c4 100644 --- a/src/kits/interface/InterfaceDefs.cpp +++ b/src/kits/interface/InterfaceDefs.cpp @@ -502,11 +502,20 @@ get_key_info(key_info *info) _IMPEXP_BE void get_key_map(key_map **map, char **key_buffer) +{ + _get_key_map(map, key_buffer, NULL); +} + + +_IMPEXP_BE void +_get_key_map(key_map **map, char **key_buffer, ssize_t *key_buffer_size) { BMessage command(IS_GET_KEY_MAP); BMessage reply; ssize_t map_count, key_count; const void *map_array = 0, *key_array = 0; + if (key_buffer_size == NULL) + key_buffer_size = &key_count; _control_input_server_(&command, &reply); @@ -515,15 +524,15 @@ get_key_map(key_map **map, char **key_buffer) return; } - if (reply.FindData("key_buffer", B_ANY_TYPE, &key_array, &key_count) != B_OK) { + if (reply.FindData("key_buffer", B_ANY_TYPE, &key_array, key_buffer_size) != B_OK) { *map = 0; *key_buffer = 0; return; } *map = (key_map *)malloc(map_count); memcpy(*map, map_array, map_count); - *key_buffer = (char *)malloc(key_count); - memcpy(*key_buffer, key_array, key_count); + *key_buffer = (char *)malloc(*key_buffer_size); + memcpy(*key_buffer, key_array, *key_buffer_size); }