added _get_key_map() to get the character map size

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20917 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Jérôme Duval 2007-04-30 10:07:34 +00:00
parent e7e4c08faf
commit c25f230cb6
2 changed files with 14 additions and 3 deletions

View File

@ -27,10 +27,12 @@
#ifndef __INPUT_GLOBALS_H
#define __INPUT_GLOBALS_H
#include <InterfaceDefs.h>
#include <SupportDefs.h>
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

View File

@ -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);
}