diff options
author | Pierre Ossman <ossman@cendio.se> | 2017-07-13 16:04:41 +0200 |
---|---|---|
committer | Daniel P. Berrange <berrange@redhat.com> | 2017-08-02 15:32:10 +0100 |
commit | 204930bad0adc366c0269e055559bb7882570a0e (patch) | |
tree | 3fc2aa37f7b82a0c449f77798b3bbd66686ac3c3 | |
parent | 0d6d25f4da94c1d1dad3a0b97cb78be068397898 (diff) | |
download | keycodemapdb-204930bad0adc366c0269e055559bb7882570a0e.zip keycodemapdb-204930bad0adc366c0269e055559bb7882570a0e.tar.gz keycodemapdb-204930bad0adc366c0269e055559bb7882570a0e.tar.bz2 |
Provide array size constant for C output
The array might not be in the same unit as the code using it, so
we need a way of indicating the number of entries.
Signed-off-by: Pierre Ossman <ossman@cendio.se>
-rw-r--r-- | tests/stdc++.cc | 16 | ||||
-rw-r--r-- | tests/stdc.c | 16 | ||||
-rwxr-xr-x | tools/keymap-gen | 3 |
3 files changed, 27 insertions, 8 deletions
diff --git a/tests/stdc++.cc b/tests/stdc++.cc index 38551f0..71d4bcd 100644 --- a/tests/stdc++.cc +++ b/tests/stdc++.cc @@ -28,28 +28,36 @@ int main(int argc, char** argv) { unsigned i; + assert(code_map_osx_to_win32_len == ARRAY_SIZE(code_map_osx_to_win32)); assert(code_map_osx_to_win32[0x1d] == 0x30); + assert(name_map_osx_to_win32_len == ARRAY_SIZE(name_map_osx_to_win32)); assert(strcmp(name_map_osx_to_win32[0x1d], "VK_0") == 0); + assert(code_map_osx_to_xkb_len == ARRAY_SIZE(code_map_osx_to_xkb)); assert(strcmp(code_map_osx_to_xkb[0x1d], "AE10") == 0); + assert(name_map_osx_to_xkb_len == ARRAY_SIZE(name_map_osx_to_xkb)); assert(strcmp(name_map_osx_to_xkb[0x1d], "AE10") == 0); - for (i = 0;i < ARRAY_SIZE(code_map_osx_to_win32);i++) { + assert(code_map_html_to_win32_len == ARRAY_SIZE(code_map_html_to_win32)); + for (i = 0;i < code_map_html_to_win32_len;i++) { if (strcmp(code_map_html_to_win32[i].from, "ControlLeft") == 0) { assert(code_map_html_to_win32[i].to == 0x11); break; } } - assert(i != ARRAY_SIZE(code_map_osx_to_win32)); - for (i = 0;i < ARRAY_SIZE(name_map_html_to_win32);i++) { + assert(i != code_map_html_to_win32_len); + assert(name_map_html_to_win32_len == ARRAY_SIZE(name_map_html_to_win32)); + for (i = 0;i < name_map_html_to_win32_len;i++) { if (strcmp(name_map_html_to_win32[i].from, "ControlLeft") == 0) { assert(strcmp(name_map_html_to_win32[i].to, "VK_CONTROL") == 0); break; } } - assert(i != ARRAY_SIZE(name_map_html_to_win32)); + assert(i != name_map_html_to_win32_len); + assert(code_table_osx_len == ARRAY_SIZE(code_table_osx)); assert(code_table_osx[0x1d] == 0x3b); + assert(name_table_osx_len == ARRAY_SIZE(name_table_osx)); assert(strcmp(name_table_osx[0x1d], "Control") == 0); return 0; diff --git a/tests/stdc.c b/tests/stdc.c index df65116..e4946fa 100644 --- a/tests/stdc.c +++ b/tests/stdc.c @@ -28,28 +28,36 @@ int main(int argc, char** argv) { unsigned i; + assert(code_map_osx_to_win32_len == ARRAY_SIZE(code_map_osx_to_win32)); assert(code_map_osx_to_win32[0x1d] == 0x30); + assert(name_map_osx_to_win32_len == ARRAY_SIZE(name_map_osx_to_win32)); assert(strcmp(name_map_osx_to_win32[0x1d], "VK_0") == 0); + assert(code_map_osx_to_xkb_len == ARRAY_SIZE(code_map_osx_to_xkb)); assert(strcmp(code_map_osx_to_xkb[0x1d], "AE10") == 0); + assert(name_map_osx_to_xkb_len == ARRAY_SIZE(name_map_osx_to_xkb)); assert(strcmp(name_map_osx_to_xkb[0x1d], "AE10") == 0); - for (i = 0;i < ARRAY_SIZE(code_map_osx_to_win32);i++) { + assert(code_map_html_to_win32_len == ARRAY_SIZE(code_map_html_to_win32)); + for (i = 0;i < code_map_html_to_win32_len;i++) { if (strcmp(code_map_html_to_win32[i].from, "ControlLeft") == 0) { assert(code_map_html_to_win32[i].to == 0x11); break; } } - assert(i != ARRAY_SIZE(code_map_osx_to_win32)); - for (i = 0;i < ARRAY_SIZE(name_map_html_to_win32);i++) { + assert(i != code_map_html_to_win32_len); + assert(name_map_html_to_win32_len == ARRAY_SIZE(name_map_html_to_win32)); + for (i = 0;i < name_map_html_to_win32_len;i++) { if (strcmp(name_map_html_to_win32[i].from, "ControlLeft") == 0) { assert(strcmp(name_map_html_to_win32[i].to, "VK_CONTROL") == 0); break; } } - assert(i != ARRAY_SIZE(name_map_html_to_win32)); + assert(i != name_map_html_to_win32_len); + assert(code_table_osx_len == ARRAY_SIZE(code_table_osx)); assert(code_table_osx[0x1d] == 0x3b); + assert(name_table_osx_len == ARRAY_SIZE(name_table_osx)); assert(strcmp(name_table_osx[0x1d], "Control") == 0); return 0; diff --git a/tools/keymap-gen b/tools/keymap-gen index ae33f4d..cb8b8fc 100755 --- a/tools/keymap-gen +++ b/tools/keymap-gen @@ -493,6 +493,7 @@ class CLanguageGenerator(LanguageSrcGenerator): print("*/") def _array_start_code(self, varname, length, fromtype, totype): + self._varname = varname; totypename = self.inttypename if totype == int else self.strtypename if fromtype == int: print("const %s %s[%d] = {" % (totypename, varname, length)) @@ -507,6 +508,8 @@ class CLanguageGenerator(LanguageSrcGenerator): def _array_end(self): print("};") + print("const unsigned int %s_len = sizeof(%s)/sizeof(%s[0]);" % + (self._varname, self._varname, self._varname)) def _array_entry_code(self, index, value, comment): if value is None: |