kc3-lang/libxkbcommon/src/xkbcomp

Branch :


Log

Author Commit Date CI Message
caf8f3be 2014-02-22 23:43:19 symbols, keycodes: fix int return type when bool is intended Signed-off-by: Ran Benita <ran234@gmail.com>
09bcf0ff 2014-02-22 23:37:37 symbols: cleanup SetSymbolsField Normalize the style and error message levels. Signed-off-by: Ran Benita <ran234@gmail.com>
35dea49b 2014-02-22 23:20:04 symbols: fix possible use of uninitialized value Nothing bad can come out of it, but for some reason this error didn't return early (inherited from xkbcomp). Also promote the log message to an error, as it clearly is. Signed-off-by: Ran Benita <ran234@gmail.com>
1fa7d6d3 2014-02-16 18:32:44 action: unify SetLatch and Lock handler functions This is a little shorter and follows easier from the spec flag description table. Also a few were too permissive (like allowing LatchToLock in SetMods). Signed-off-by: Ran Benita <ran234@gmail.com>
af75353a 2014-02-16 10:20:32 action: add a common CheckBooleanFlag function Signed-off-by: Ran Benita <ran234@gmail.com>
18191702 2014-02-16 10:59:42 keymap: change action flag NO_ACCEL -> ACCEL It's easier to deal with, but we need to set it as "factory default". Signed-off-by: Ran Benita <ran234@gmail.com>
af261cb6 2014-02-16 10:22:32 action: fix SwitchScreen "same" field handling This used to *unset* a flag called "SwitchApplication"; we changed the flag to "same" but forgot to switch the cases. Signed-off-by: Ran Benita <ran234@gmail.com>
8d3db622 2014-02-15 23:50:21 keymap-dump: add missing support for NoLock and NoUnlock flags Based on a libxkbfile patch by Andreas Wettstein. Signed-off-by: Ran Benita <ran234@gmail.com>
11a9f76b 2014-02-15 23:27:23 keymap-dump: don't print "affect=lock" in PtrLock It's the same as no flags, so might as well not print it. (In fact it is slightly harmful, because it actively *clears* the affect flags, which might have been set in some other manner. But in practice this cannot happen). Signed-off-by: Ran Benita <ran234@gmail.com>
be27b603 2014-02-15 23:13:21 keymap-dump: unbreak some complex lines It's very hard to read as-is. Apologies for those reading over a VT100. Signed-off-by: Ran Benita <ran234@gmail.com>
b95df2a6 2014-02-15 22:59:12 expr: simplify ExprResolveButton Signed-off-by: Ran Benita <ran234@gmail.com>
efe2880e 2014-02-15 22:28:41 action: don't pass a keymap where a ctx is sufficient Signed-off-by: Ran Benita <ran234@gmail.com>
3acea3b3 2014-02-15 22:16:41 action: add missing array_ndx checks Only the "data" field can have them, and every other field needs to error out if it appears. But some didn't check. Signed-off-by: Ran Benita <ran234@gmail.com>
477407f7 2014-02-15 21:55:36 action: move array_ndx errors into the Check functions Makes more sense and flows more nicely this way. Signed-off-by: Ran Benita <ran234@gmail.com>
7c5e7915 2014-02-15 21:48:31 action: fix missing support for "affect" field Support for setting this field was missing from the LockMods and LockControls actions. Based on a xkbcomp patch by Andreas Wettstein. Signed-off-by: Ran Benita <ran234@gmail.com>
1b2bb204 2014-02-13 23:57:22 ast: cast to ParseCommon explictly instead of using ->common Some tools were getting mighty confused with what we were doing. Signed-off-by: Ran Benita <ran234@gmail.com>
6248b09f 2014-02-13 23:11:31 action: simplify Check* functions Instead of using those t1 t2 variables, pass the final destinations directly (while making sure they are not modified in case of error). This also ensures the types are right, e.g. in CheckGroupField it should be int32_t, not xkb_layout_index_t (and indeed it takes a negation!). Signed-off-by: Ran Benita <ran234@gmail.com>
5bd273a7 2012-11-27 10:42:15 vmod: bring back support for direct vmod -> real mod mapping This brings back the functionality that was removed in b9c87eb710ba4a86455601ca8c5a516b25e20366. Though it is not used in xkeyboard-config, from our current perspective it can be quite useful to be able to set the mappings directly, thus sidestepping the ugly and legacy-ridden modifier_map statement. Here's an example of how to get rid of modifier_map statements (though that would break core-X11 applications, since they must have the mappings through keysyms): virtual_modifiers NumLock = Mod2; virtual_modifiers Alt = Mod1; // Would be nice to map these to Alt, but that would be // incompatible with xkbcomp and somewhat complicated virtual_modifiers LAlt = Mod1; virtual_modifiers RAlt = Mod1; virtual_modifiers LevelThree = Mod5; virtual_modifiers RControl = Control; virtual_modifiers LControl = Control; virtual_modifiers Super = Mod4; virtual_modifiers Meta = Mod1; virtual_modifiers Hyper = Mod4; virtual_modifiers AltGr = Mod5; virtual_modifiers LShift = Shift; virtual_modifiers RShift = Shift; Signed-off-by: Ran Benita <ran234@gmail.com>
e55a0cea 2013-10-27 20:10:15 Move src/xkbcomp/scanner-utils.h to src/ As we'll use it for things unrelated to xkbcomp. Signed-off-by: Ran Benita <ran234@gmail.com>
28d5f770 2014-02-10 20:33:34 scanner: sort out scanner logging functions First, make the rules and xkb scanners/parsers use the same logging functions instead of rolling their own. Second, use the gcc ##__VA_ARGS extension instead of dealing with C99 stupidity. I hope all relevant compilers support it. Signed-off-by: Ran Benita <ran234@gmail.com>
c4259ff2 2014-02-10 15:18:22 rules: always %-expand kccgst values Previously the early-exit codepath might have left some values unexpanded, and we'd go looking for e.g "%l%(v)". Signed-off-by: Ran Benita <ran234@gmail.com>
c11f05e0 2014-02-10 11:16:37 rules: print full path in error messages There can be multiple include paths. But it's nicer in any case. This also makes scanner_error actually use log_err instead of log_warn - oops. Signed-off-by: Ran Benita <ran234@gmail.com>
537564cb 2014-02-10 11:11:27 rules: include the path in failed-to-map error message Signed-off-by: Ran Benita <ran234@gmail.com>
16aab829 2014-02-09 23:21:19 ast: remove unneeded 'ctx' param to XkbFileCreate Signed-off-by: Ran Benita <ran234@gmail.com>
71a25931 2014-02-09 17:18:08 symbols: steal keys and modmaps when merging if possible Signed-off-by: Ran Benita <ran234@gmail.com>
a7d753e4 2014-02-09 17:17:13 compat: steal interps and leds when merging if possible Signed-off-by: Ran Benita <ran234@gmail.com>
35cab168 2014-02-09 16:49:45 types: steal types when merging if possible Like we do everywhere else. Removes some unnecessary allocations and copying. Signed-off-by: Ran Benita <ran234@gmail.com>
3923aa71 2014-02-09 11:27:34 doc: move some file comments into txt files in doc/ Signed-off-by: Ran Benita <ran234@gmail.com>
68b03097 2014-02-08 17:22:14 scanner: make line and column unsigned Signed-off-by: Ran Benita <ran234@gmail.com>
cf513f70 2014-02-08 17:15:37 rules: get rid of struct location Use the scanner token_{line,column} like we do in the other places. Signed-off-by: Ran Benita <ran234@gmail.com>
769b91c5 2014-02-08 15:30:05 Use (1u << idx) instead of (1 << idx) where appropriate It doesn't matter (I think), since the implicit conversion doesn't have any effect (e.g. sign-extension). But it's better to be aware of the type. Signed-off-by: Ran Benita <ran234@gmail.com>
50b73ec0 2014-02-08 15:10:09 Use unsigned int for saving darray_size return value See: b9b3593cbdeb7f5b02d50cecaba6a0b47d4979ad So these should be unsigned int's now. Signed-off-by: Ran Benita <ran234@gmail.com>
e2c336cb 2014-02-08 15:06:28 action: fix misleading cast The type is uint8_t and so is the checked range. Signed-off-by: Ran Benita <ran234@gmail.com>
bbd2a9c0 2014-02-08 15:05:05 action: fix printing of underflowed value in error message Signed-off-by: Ran Benita <ran234@gmail.com>
27e20662 2014-02-08 12:31:21 scanner-utils: add some likely/unlikely annotations Signed-off-by: Ran Benita <ran234@gmail.com>
0e20cfed 2014-02-08 02:01:17 Partially revert "ast: pack the ParseCommon struct" This reverts commit 1e6e5669c6229846830f0b497591de4e3cf588eb. It's probably safe, but let's not take any chances, as I don't have any esoteric arch to test on. But keep the ATTR in case it's ever useful. Signed-off-by: Ran Benita <ran234@gmail.com>
6ea15719 2014-02-08 01:26:35 ast: use more suitable types in a few ast nodes The int ones cannot be signed (they come as such from the scanner, and NEGATE is never applied to them). The uint32_t one is really an atom, but presumably the type was never converted to xkb_atom_t. Signed-off-by: Ran Benita <ran234@gmail.com>
623b10f8 2014-02-08 00:27:54 Fix sign-compare warnings Signed-off-by: Ran Benita <ran234@gmail.com>
893f0130 2014-02-08 00:18:32 symbols: reduce some loop iterators scope Signed-off-by: Ran Benita <ran234@gmail.com>
5547a82f 2014-02-07 21:12:53 parser: fix unrecognized keysym handling Integer may be negative, so also need to test >= 0. Also, $$ was left uninitialized if the keysym wasn't recognized. Signed-off-by: Ran Benita <ran234@gmail.com>
fa87cdb8 2014-02-07 19:39:42 darray: cleanup We have quite diverged from the upstream file, so let's make it at least easier to look at. Remove some unused macros and rename some for consistency. Signed-off-by: Ran Benita <ran234@gmail.com>
6f2df7df 2014-02-07 19:28:48 ast: make symsMapIndex unsigned It doesn't need to be signed. Signed-off-by: Ran Benita <ran234@gmail.com>
e9e39932 2014-02-07 18:49:22 action: Use ResolveInteger for PtrBtn.count, not ResolveButton It's not a button. Signed-off-by: Ran Benita <ran234@gmail.com>
e0137cac 2014-02-07 18:48:16 action: check range of MovePtr X,Y values Signed-off-by: Ran Benita <ran234@gmail.com>
b82a0a86 2014-02-07 18:09:30 scanner: avoid strlen in keyword lookup, we know the len Signed-off-by: Ran Benita <ran234@gmail.com>
4884a8e6 2013-08-02 10:19:01 keymap: move XkbEscapeMapName() to keymap.c. So we can use it outside src/xkbcomp; it is not really specific to it. Signed-off-by: Ran Benita <ran234@gmail.com>
917c7515 2014-01-12 14:37:39 context: remove mostly useless log wrappers Just use xkb_log directly. Signed-off-by: Ran Benita <ran234@gmail.com>
101720a2 2014-01-12 13:18:39 parser: shutup some 'may be used uninitialized' warnings Signed-off-by: Ran Benita <ran234@gmail.com>
bbc69b63 2014-01-12 10:53:23 action, types: remove unused Report functions Signed-off-by: Ran Benita <ran234@gmail.com>
31430670 2014-01-11 16:40:42 Fix some cppcheck warnings Someone was nice enough to run this for us: ftp://ftp.sunet.se/pub/Linux/distributions/Debian/debian/pool/main/libx/libxkbcommon/libxkbcommon_0.3.1.orig.tar.gz [libxkbcommon-0.3.1/src/keymap.c:86]: (style) The scope of the variable 'j' can be reduced. [libxkbcommon-0.3.1/src/keymap.c:87]: (style) The scope of the variable 'key' can be reduced. [libxkbcommon-0.3.1/src/keysym-utf.c:843]: (style) The scope of the variable 'mid' can be reduced. [libxkbcommon-0.3.1/src/state.c:992]: (style) The scope of the variable 'str' can be reduced. [libxkbcommon-0.3.1/src/xkbcomp/action.c:467]: (style) The scope of the variable 'absolute' can be reduced. [libxkbcommon-0.3.1/src/xkbcomp/rules.c:468]: (style) The scope of the variable 'consumed' can be reduced. [libxkbcommon-0.3.1/src/xkbcomp/rules.c:862]: (style) The scope of the variable 'mlvo' can be reduced. [libxkbcommon-0.3.1/src/xkbcomp/rules.c:863]: (style) The scope of the variable 'kccgst' can be reduced. [libxkbcommon-0.3.1/src/xkbcomp/rules.c:865]: (style) The scope of the variable 'match_type' can be reduced. [libxkbcommon-0.3.1/src/xkbcomp/symbols.c:753]: (style) The scope of the variable 'toAct' can be reduced. [libxkbcommon-0.3.1/src/xkbcomp/symbols.c:1573]: (style) The scope of the variable 'key' can be reduced. [libxkbcommon-0.3.1/test/common.c:80]: (warning) %d in format string (no. 1) requires 'int' but the argument type is 'unsigned int'. [libxkbcommon-0.3.1/test/interactive.c:358]: (style) The scope of the variable 'nevs' can be reduced. [libxkbcommon-0.3.1/test/interactive.c:236]: (style) Checking if unsigned variable 'nsyms' is less than zero. [libxkbcommon-0.3.1/test/interactive.c:226]: (style) Unused variable: unicode Signed-off-by: Ran Benita <ran234@gmail.com>
1e6e5669 2013-12-14 17:39:11 ast: pack the ParseCommon struct This shows a measurable improvement in memory and performance for free, on 64bit at least. Packing is (or should be) safe in this case. Signed-off-by: Ran Benita <ran234@gmail.com>
b63fa3b1 2013-12-01 13:32:51 expr: make Expr creation naming and file location consistent Signed-off-by: Ran Benita <ran234@gmail.com>
07334f4d 2013-12-01 13:29:30 expr: add wrapper macro for ExprCreate Signed-off-by: Ran Benita <ran234@gmail.com>
972395b8 2013-12-01 12:08:47 expr: split expression types and allocate them separately Currently, we have one ExprDef type, which contains a tagged union with the value of all expression types. Turns out, this union is quite wasteful memory-wise. Instead, create separate types for all expressions (e.g ExprBinary, ExprInteger) which embed the common fields (ExprCommon), and malloc them per their size; ExprDef then becomes a union of all these types, but is just used as a generic pointer. [Instead of making ExprDef a union, another option is to use ExprCommon as the generic pointer type and then do up-castings, like we do with ParseCommon. But this makes the code much uglier.] The diff is mostly straightforward mechanical adaptations. It could have been much smaller with the help of C11 anonymous structs (which were previously a gnu extension). This will have saved all of the 'op' -> 'expr->op', etc changes. But if we can be a bit more portable for a little effort, we should. Before (./test/rulescomp, x86 32 bit, -O2): ==12974== total heap usage: 145,217 allocs, 145,217 frees, 10,476,238 bytes allocated After: ==11145== total heap usage: 145,217 allocs, 145,217 frees, 8,270,358 bytes allocated Signed-off-by: Ran Benita <ran234@gmail.com>
068016e4 2013-12-01 10:45:52 parser, symbols: drop unnecessary casts It's casted into ExprDef and then uncasted for no reason. Signed-off-by: Ran Benita <ran234@gmail.com>
4a7bfb68 2013-12-01 10:31:27 expr: use ExprCreate in more places Signed-off-by: Ran Benita <ran234@gmail.com>
fd98d64b 2013-11-30 23:29:58 parser: remove 'uval' yylval type We don't care about DoodadType. Signed-off-by: Ran Benita <ran234@gmail.com>
c24b6420 2013-11-30 23:24:18 expr: add constructor for boolean expressions Also add a 'bool set' to the ExprDef union, instead of using 'ival' as a bool. Signed-off-by: Ran Benita <ran234@gmail.com>
c5d85938 2013-11-30 23:12:45 expr: add constructors for more expression types This makes the parser a bit more declarative. But really it might make error handling easier. Signed-off-by: Ran Benita <ran234@gmail.com>
dbd8b1ef 2013-11-30 22:25:39 expr: add 'ident' value to ExprDef union This distinguishes between an identifier expression and a string expression in the union. Signed-off-by: Ran Benita <ran234@gmail.com>
9dc5b8cb 2013-11-27 13:49:13 Resolve keysyms early in parser Instead of having the parser passing strings to the AST, and symbols/compat etc. resolving them themselves. This simplifies the code a bit, and makes it possible to print where exactly in the file the bad keysym originates from. The previous lazy approach had an advantage of not needlessly resolving keysyms from unrelated maps. However, I think reporting these errors in *any* map is better, and the parser is also a bit smarter then old xkbcomp and doesn't parse many useless maps. So there's no discernible speed/memory difference with this change. Signed-off-by: Ran Benita <ran234@gmail.com>
ba7530fa 2013-11-27 13:43:57 scanner: restore lost DIVIDE token I don't know how this could have happened. Luckily this token is completely useless. Signed-off-by: Ran Benita <ran234@gmail.com>
1651e5af 2013-11-27 13:12:19 symbols: modernize LookupKeysym Signed-off-by: Ran Benita <ran234@gmail.com>
64b8da4b 2013-11-27 12:52:20 symbols: rename info.modMaps -> modmaps Signed-off-by: Ran Benita <ran234@gmail.com>
044d4b5f 2013-11-08 17:08:35 Make XkbFileCreate argument types match between header & implementation Fixes build failure with Solaris Studio compilers: "src/xkbcomp/ast-build.c", line 492: identifier redeclared: XkbFileCreate current : function(..., enum xkb_map_flags) previous: function(..., unsigned int) : "src/xkbcomp/ast-build.h", line 98 Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
73956752 2013-10-27 20:12:05 scanner-utils: remove outdated comment Signed-off-by: Ran Benita <ran234@gmail.com>
65f9980b 2013-10-14 19:05:24 rules: fix scanning of line-continuation without leading space We were failing to scan something like\ this correctly. Signed-off-by: Ran Benita <ran234@gmail.com>
dcdd4e10 2013-10-14 18:59:53 Replace ctype.h functions with ascii ones ctype.h is locale-dependent, so using it in our scanners is not optimal. Let's be deterministic with our own simple functions. Signed-off-by: Ran Benita <ran234@gmail.com>
a45f531a 2013-10-09 12:12:59 keymap: call strlen on keymap string instead of SIZE_MAX I wanted to avoid the strlen, but we'd better keep the scanner a bit less surprising and encourage people to use xkb_keymap_new_from_buffer() instead of they do in fact have access to the size. Signed-off-by: Ran Benita <ran234@gmail.com>
ca0d388f 2013-10-08 23:09:01 rules: simplify a bit of code Signed-off-by: Ran Benita <ran234@gmail.com>
fbed22e8 2013-10-08 22:58:28 rules: use strlen_safe Signed-off-by: Ran Benita <ran234@gmail.com>
efe5b036 2013-10-08 22:37:53 rules: improve error logging macros Improve safety with parenthesis, make the matcher macros use the scanner ones, and make the 1 variant use %s instead of embedding the msg; this way the compiler can reuse the string in the binary. Signed-off-by: Ran Benita <ran234@gmail.com>
5af688e6 2013-10-08 21:46:01 rules: reduce variable scopes There are some big functions there, and this might help reduce the cognitive load a bit. Signed-off-by: Ran Benita <ran234@gmail.com>
c35c388b 2013-10-08 18:35:05 scanner: remove unnecessary cast 'tok' is already an int now. Signed-off-by: Ran Benita <ran234@gmail.com>
1e52bf79 2013-10-03 10:02:49 symbols: fix use of uninitialized variable 'tmp' is stack allocated so tmp->merge is used uninitialized by AddModMapEntry(). The value doesn't matter much, but it used to make some modmap merging decision (which doesn't have many conflicts usually). Bug inherited from xkbcomp. Signed-off-by: Ran Benita <ran234@gmail.com>
8e14bff0 2013-09-29 01:41:52 parser: add some notes about byacc working We now also work with byacc (version tested: 20130925) which some people prefer, perhaps due to its license (public domain) or performance (haven't compared). When using byacc, currently the following warning comes up: src/xkbcomp/parser.c:954:14: warning: declaration shadows a variable in the global scope [-Wshadow] YYSTYPE yylval; ^ src/xkbcomp/parser.c:37:20: note: expanded from macro 'yylval' #define yylval _xkbcommon_lval ^ ./src/xkbcomp/parser.h:96:16: note: previous declaration is here extern YYSTYPE _xkbcommon_lval; This is due to a bug in byacc - it shouldn't output that extern line in %pure-parser mode. So the warning stays. Signed-off-by: Ran Benita <ran234@gmail.com>
8dcb30e5 2013-09-29 01:29:47 parser: add a workaround for byacc Unlike bison, byacc outputs its own parser code *after* our own parser.y code, which includes the #undef. So this fix is needed for the 'scanner' -> 'param->scanner' translation to work in the parser.c code generated by byacc. Signed-off-by: Ran Benita <ran234@gmail.com>
409f27d7 2013-09-29 00:41:17 parser: don't use %locations byacc doesn't support this feature. We print the line/col of the last scanned token instead. This is slightly less in case of *parser* errors (not syntax errors), but I couldn't make it point to another line, and this are pretty cryptic anyways. So it's good enough. Also might be a bit faster, but haven't checked. Signed-off-by: Ran Benita <ran234@gmail.com>
13da6da0 2013-09-29 00:24:50 parser: drop %name-prefix, use -p yacc argument instead Even though the %name-prefix is more sensible, byacc doesn't support it, but both bison and byacc support the -p argument. Signed-off-by: Ran Benita <ran234@gmail.com>
cfd7e7c1 2013-09-29 00:22:20 parser: use %pure-parser instead of %define api.pure Both bison and byacc support this syntax. Bison manpage says something about this giving more or less options, but we don't care. Signed-off-by: Ran Benita <ran234@gmail.com>
e4c00e90 2013-09-29 00:19:32 parser: don't use enum yytokentype byacc doesn't support this, it just puts out #define's for the tokens. Signed-off-by: Ran Benita <ran234@gmail.com>
7caa1af2 2013-08-13 14:45:33 scanner: don't fail over unknown escape sequence This is too strict, and causes symbols/cz to fail parsing. Instead, just emit a warning (not shown by default): xkbcommon: WARNING: cz:75:19: unknown escape sequence in string literal https://bugs.freedesktop.org/show_bug.cgi?id=68056 Reported-By: Gatis Paeglis <gatis.paeglis@digia.com> Signed-off-by: Ran Benita <ran234@gmail.com>
869c9b58 2013-08-13 09:57:07 xkbcomp: improve a few log messages Signed-off-by: Ran Benita <ran234@gmail.com>
aa9c9194 2013-08-02 14:41:19 scanner: fix compiler warning src/xkbcomp/scanner.c:158:17: warning: comparison of constant -1 with expression of type 'enum yytokentype' is always true [-Wtautological-constant-out-of-range-compare] if (tok != -1) return tok; ~~~ ^ ~~ Signed-off-by: Ran Benita <ran234@gmail.com>
e91d2653 2013-08-01 23:09:46 scanner: allow empty key name literals Some keymaps actually have this, like the quartz.xkb which is tested. We need to support these. https://bugs.freedesktop.org/show_bug.cgi?id=67654 Reported-By: Gatis Paeglis <gatis.paeglis@digia.com> Signed-off-by: Ran Benita <ran234@gmail.com>
e731b251 2013-08-01 20:24:27 xkbcomp: handle empty keymaps We should handle empty xkb_keycode and xkb_symbol sections, since xkbcomp handles them, and apparently XQuartz uses it. There are also files for it in xkeyboard-config (rules=base model=empty layout=empty, which translate to keycodes/empty and symbols/empty). https://bugs.freedesktop.org/show_bug.cgi?id=67654 Reported-By: Gatis Paeglis <gatis.paeglis@digia.com> Signed-off-by: Ran Benita <ran234@gmail.com>
d2383d38 2013-08-01 20:44:46 keymap-dump: use correct format specifiers For keycodes, groups, levels, etc, which are unsigned. The really proper inttypes.h ones seem a bit much though. Signed-off-by: Ran Benita <ran234@gmail.com>
990c09a3 2013-07-28 16:21:40 keymap: update builtin fields directly in src/keymap.c This fields are part of our API and every keymap should have them, not just xkbcomp/ ones. Signed-off-by: Ran Benita <ran234@gmail.com>
ec9a02a2 2013-07-24 10:05:02 Get rid of the usage of PATH_MAX PATH_MAX is optional in POSIX, so avoid its unconditional usage allocating and freeing buffers as needed. To avoid too many malloc/free in the for loop in FindFileInXkbPath, a buffer is grown according to the size needed at each iteration.
9e801ff7 2013-07-21 17:01:20 ctx: adapt to the len-aware atom functions xkb_atom_intern now takes a len parameter. Turns out though that almost all of our xkb_atom_intern calls are called on string literals, the length of which we know statically. So we add a macro to micro-optimize this case. Signed-off-by: Ran Benita <ran234@gmail.com>
9ffe9dae 2013-07-21 09:48:12 keymap: don't use darray for sym_interprets We want xkb_keymap to be easy to handle everywhere. Signed-off-by: Ran Benita <ran234@gmail.com>
4b560287 2013-07-18 14:50:21 xkbcomp: escape the section names before storing them in the keymap This ensures the names are escaped before having any interaction with the user. This was caught by noticing dump(compile(dump())) != dump. Since that's a nice test we add it to stringcomp. https://bugs.freedesktop.org/show_bug.cgi?id=67032 Reported-By: Auke Booij Signed-off-by: Ran Benita <ran234@gmail.com>
17a956d8 2013-05-09 14:47:09 Widen keycode range to 8/255 if possible (bug #63390) If the keycode range is smaller than 8 → 255, artifically widen it when dumping the keymap as not to displease X. Signed-off-by: Daniel Stone <daniel@fooishbar.org>
a392d268 2012-08-12 11:40:02 Replace flex scanner with a hand-written one The scanner is very similar in structure to the one in xkbcomp/rules.c. It avoids copying and has nicer error reporting. It uses gperf to generate a hashtable for the keywords, which gives a nice speed boost (compared to the naive strcasecmp method at least). But since there's hardly a reason to regenerate it every time and require people to install gperf, the output (keywords.c) is added here as well. Here are some stats from test/rulescomp: Before: compiled 1000 keymaps in 4.052939625s ==22063== total heap usage: 101,101 allocs, 101,101 frees, 11,840,834 bytes allocated After: compiled 1000 keymaps in 3.519665434s ==26505== total heap usage: 99,945 allocs, 99,945 frees, 7,033,608 bytes allocated Signed-off-by: Ran Benita <ran234@gmail.com>
e4bceec8 2013-03-14 14:33:40 utils: add {un,}map_file to read an entire file This wraps the current mmap call and adds a fallback implementation for systems which do not have mmap (e.g. mingw). Signed-off-by: Ran Benita <ran234@gmail.com>
99f6e6fc 2013-03-14 14:31:55 Add scanner-utils.h for common scanner functions We want to share the same functions for another scanner. Signed-off-by: Ran Benita <ran234@gmail.com>
36f55c49 2013-03-11 12:53:39 keymap: add xkb_keymap_new_from_buffer() The current API doesn't allow the caller to create keymaps from mmap()'ed files. The problem is, xkb_keymap_new_from_string() requires a terminating 0 byte. However, there is no way to guarantee that when using mmap() so a user currently has to copy the whole file just to get the terminating zero byte (assuming they cannot use xkb_keymap_new_from_file()). This adds a new entry xkb_keymap_new_from_buffer() which takes a memory location and the buffer size in bytes. Internally, we depend on yy_scan_{string,byte}() helpers. According to flex documentation these already copy the input string because they are wrappers around yy_scan_buffer(). yy_scan_buffer() on the other hand has some insane requirements. The buffer must be writeable and the last two bytes must be ASCII-NUL. But the buffer may contain other 0 bytes just fine. Because we don't want these constraints in our public API, xkb_keymap_new_from_buffer() needs to create a copy of the input memory. But it then calls yy_scan_buffer() directly. Hence, we have the same number of buffer-copies as with *_from_string() but without the terminating 0 requirement. The explicit yy_scan_buffer() call is preferred over yy_scan_byte() so the buffer-copy operation is not hidden somewhere in flex. Maybe some day we no longer depend on flex and can have a zero-copy API. A user could mmap() a file and it would get parsed right from this buffer. But until then, we shouldn't expose this limitation in the API but instead provide an API that some day can work with zero-copy. Signed-off-by: David Herrmann <dh.herrmann@gmail.com> [ran: rebased on top of my branch] Conflicts: Makefile.am src/xkbcomp/xkbcomp.c
094f1dc2 2013-03-30 19:19:01 xkbcomp/keymap: silence a gcc warning src/xkbcomp/keymap.c:127:12: error: 'found' may be used uninitialized in this function [-Werror=maybe-uninitialized] Not really, but why not. Signed-off-by: Ran Benita <ran234@gmail.com>
0513686b 2013-03-14 12:45:34 rules: be more paranoid in scanner This can't happen, but better safe than sorry. The optimizations were noticeable but negligible. Signed-off-by: Ran Benita <ran234@gmail.com>
0e200bd5 2013-03-13 13:55:11 rules: quiet a gcc warning src/xkbcomp/rules.c:620:36: error: 'idx' may be used uninitialized in this function [-Werror=maybe-uninitialized] Can't happen but no harm done. Signed-off-by: Ran Benita <ran234@gmail.com>