Commit Graph

2248 Commits (e325e65eb80c600e789c8d644d9f6ebf59b04dad)

Author SHA1 Message Date
Ran Benita ab4df099ca x11, doc: add overview
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-09-18 11:59:27 +03:00
Ran Benita 24846080db test/keyseq: add test
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-09-11 14:08:12 +03:00
Ran Benita 64fec8f31a configure.ac: add -Wdocumentation
It's supported by clang and warns about bad doxygen comments.

Signed-off-by: Ran Benita <ran234@gmail.com>
2014-09-11 12:15:31 +03:00
Ran Benita 5f8ccd18f6 doc: fix @param display for xkb_x11_setup_xkb_extension()
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-09-11 12:09:57 +03:00
Ran Benita 1054962d4c symbols: use darray_foreach_from for nicer loop
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-09-11 02:57:37 +03:00
Ran Benita f03dcf9fb6 Remove compatibility symbols
Remove the deprecated symbols that were used for ABI compatibility
during the transition period to the first stable version, 0.2.0.

The old *names* can still be used, programs which use the old names will
continue to work, as long as they were compiled against a stable
version (as they have been #defined to the new names from the start; see
xkbcommon/xkbcommon-compat.h). Namely, this will break binaries which:

1. Were compiled against a pre-stable version of libxkbcommon, and
2. Are linked against the next version of libxkbcommon, and
3. Expect to work.

This scenario is very unlikely, and will break in many other ways
anyway. Also, retaining support for these means including them in the
new symbol version file, which I would like to avoid.

Signed-off-by: Ran Benita <ran234@gmail.com>
2014-09-10 19:11:41 +03:00
Jan Engelhardt 5444f6a8ca build: use symbol versioning
Symbol versions provide a means by which ELF utilities can determine
whether a program is incompatible with a too-old library version so
that package management tools can autodetect version-based
dependencies and suggest upgrade paths.

[ran: swap xkbcommon.map and xkbcommon-x11.map]

Signed-off-by: Jan Engelhardt <jengelh@inai.de>
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-09-10 18:52:13 +03:00
Ran Benita a931740cc7 keycodes: fix keymap compilation with no aliases and malloc(0)==NULL
If the keymap doesn't have any key-aliases (which is certainly
possible), the calloc(num_key_aliases, ...) is allowed to return NULL
according to the C standard, but this is not an error.

Signed-off-by: Ran Benita <ran234@gmail.com>
2014-09-10 13:44:33 +03:00
Ran Benita 7a87c202b7 ast-build: fix leak in error path
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-09-10 13:10:33 +03:00
Ran Benita ba98562909 test: make most tests portable by copying linux/input.h locally
There is really no reason to deny these tests from different platforms
only for a few #defines.

The only linux-only test (or test program, it is not run by make check)
is interactive-evdev, which actually uses evdev.

Signed-off-by: Ran Benita <ran234@gmail.com>
2014-09-06 11:29:15 +03:00
Pino Toscano e95fb475eb Remove <linux/input.h> include from test/x11comp.c
libxkbcommon 0.4.3 introduces a new test, x11comp, which does not build
on non-Linux OSes because of the unconditional <linux/input.h> include.

This seems not needed even on Linux, so attached there is a simple patch
to remove it.

https://bugs.freedesktop.org/show_bug.cgi?id=83551

Signed-off-by: Ran Benita <ran234@gmail.com>
2014-09-06 11:11:13 +03:00
Ran Benita 00733da377 Merge pull request #11 from michaelforney/master
Fix typo in default-variant configure option
2014-09-02 01:12:18 +03:00
Michael Forney 76ae9fb948 Fix typo in default-variant configure option 2014-09-01 13:09:29 -07:00
Ran Benita fc95057c5f test/x11comp: don't hang if Xvfb is not available
If Xvfb is not present, posix_spawn still forks, but the child fails.
In that case, since we left the write fd of the pipe open in the parent,
we just kept waiting on the read() without noticing that the other side
is dead.

Signed-off-by: Ran Benita <ran234@gmail.com>
2014-09-01 17:20:40 +03:00
Ran Benita 527bf96f9b keymap: fix typo
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-08-24 10:16:41 +03:00
David Herrmann c62cde57f5 keymap: fix description of xkb_keymap_key_get_syms_by_level()
The @level argument is restricted by xkb_keymap_num_levels_for_key(). Fix
the description to no longer mention xkb_keymap_num_layouts_for_key().

Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
2014-08-24 10:14:07 +03:00
Ran Benita 76016d5121 Bump version to 0.4.3
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-08-19 20:17:16 +03:00
Ran Benita 537c1700d6 Update NEWS
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-08-19 20:17:16 +03:00
Ran Benita f3597f1b62 test/state: add test_update_mask() test
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-08-18 21:51:57 +03:00
Ran Benita a1f0595a68 state: make sure the mods are fully resolved after xkb_state_update_mask()
Virtual modifiers can have "mappings" to real modifiers, e.g. NumLock
may also set Mod2. In a normal turn of events, the various components
(depressed, latched, locked, and consequently effective) include the
mapped mods, because the masks are pre-resolved everywhere. However,
xkb_state_update_mask() accepts arbitrary mod masks, which may not be
resolved (if it comes from somewhere other than
xkb_state_serialize_mods()). So let's always resolve them ourselves.

Signed-off-by: Ran Benita <ran234@gmail.com>
2014-08-18 21:46:39 +03:00
Ran Benita 99184f1614 Make the effective mod mask calculation available to other files
We will want to use that function in state.c as well.

Signed-off-by: Ran Benita <ran234@gmail.com>
2014-08-18 20:26:19 +03:00
Ran Benita 80ae8e61ff state: no need for loop in xkb_state_update_mask()
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-08-18 20:08:53 +03:00
Ran Benita a95c4e83e4 test/x11comp: server writes \n to displayfd
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-08-18 19:47:10 +03:00
Ran Benita 4df720b464 test/x11-keyseq: new test
It is like test/stringcomp, only instead of using
xkb_keymap_new_from_string(), it uses xkbcomp to upload the keymap to a
dummy Xvfb X server and then xkb_x11_keymap_new_from_device().

If any of these components are not present or fails, the test is shown
as skipped.

The test is messy, fragile, limited and depends on external tools, but I
will improve on that later -- it's better to have a test.

Signed-off-by: Ran Benita <ran234@gmail.com>
2014-08-09 22:57:24 +03:00
Ran Benita 56de0115e6 x11/keymap: handle private actions
Previously we treated them as NoAction().

Signed-off-by: Ran Benita <ran234@gmail.com>
2014-08-09 22:42:45 +03:00
Ran Benita ead816e515 utils: add a STATIC_ASSERT macro
It'd be nicer to use C11's static_assert(), but it's easier to roll our
own C99 version using a trick I saw in xv6.

Signed-off-by: Ran Benita <ran234@gmail.com>
2014-08-09 22:42:45 +03:00
Ran Benita d38ff018b1 keymap: remove "flags" field of xkb_private_action
Private actions have no flags - only serialized data.

Signed-off-by: Ran Benita <ran234@gmail.com>
2014-08-09 22:42:45 +03:00
Ran Benita f00e779ab5 x11/keymap: be more defensive about the number of modifiers
There can be at most 16 vmods, and we rely on the facts that #vmods +
NUM_REAL_MODS (8) <= XKB_MAX_MODS (32) when accessing keymap->mods.mods.
But msb_pos() can potentially return up to #vmods = 32 if the server is
malicious, so we need to truncate it.

Signed-off-by: Ran Benita <ran234@gmail.com>
2014-08-08 17:29:42 +03:00
Ran Benita 01753c0475 x11/keymap: don't forget to add the vmod offset in get_vmods
The first 8 modifiers in keymap->mods are the real modifiers; the virtual
 modifiers are then at slots 8-24. But XkbGetMap's virtualMods mask
starts the virtual modifiers at zero, so we need to add an offset (like
we do correctly in get_vmod_names()).

https://github.com/xkbcommon/libxkbcommon/issues/9

Reported-by: @rtcm
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-08-08 16:50:11 +03:00
Ran Benita 9db1432326 docs: move keysym-transformations page to a better position
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-07-28 18:04:34 +03:00
Ran Benita b629576266 docs: fix self-reference
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-07-28 10:03:48 +03:00
Ran Benita 5058620c88 interactive-evdev: don't use sysexits.h
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-07-27 16:36:11 +03:00
Ran Benita 40f109af56 ast-build: make sure InterpDef is freeable
With the following two rules:

    InterpretDecl   :       INTERPRET InterpretMatch OBRACE
                                VarDeclList
                            CBRACE SEMI
                            { $2->def = $4; $$ = $2; }
                    ;

    InterpretMatch  :       KeySym PLUS Expr
                            { $$ = InterpCreate($1, $3); }
                    |       KeySym
                            { $$ = InterpCreate($1, NULL); }
                    ;

And the fact that InterpCreate doesn't initialize ->def, if the
VarDeclList fails, the %destructor tries to recursively free the
uninitialized ->def VarDef. So always initialize it.

That was the only problematic code in the parser for %destructor (I'm
pretty sure).

Signed-off-by: Ran Benita <ran234@gmail.com>
2014-07-27 14:32:18 +03:00
Ran Benita 37cf20c906 parser: silence bison "unused value" warnings
Previous commit triggered these for some reason:

/home/ran/src/libxkbcommon/src/xkbcomp/parser.y:555.25-33: warning: unused value: $1 [-Wother]
 CoordList       :       CoordList COMMA Coord
                         ^^^^^^^^^

Signed-off-by: Ran Benita <ran234@gmail.com>
2014-07-26 22:49:30 +03:00
Ran Benita 7ec00933c1 parser: don't leak AST nodes for discarded symbols
If the parser has symbols on the stack, and then enters an error, it
discards the symbols and fails. But their actions which allocate AST
nodes had already ran. So we must free these to avoid leaks.

We use %destructor declarations, see
http://www.gnu.org/software/bison/manual/html_node/Destructor-Decl.html

Note: byacc only supports %destructor when compiled with
--enable-btyacc. Also, it doesn't support using the parse-param in the
destructor. So we might revert this commit before the next release, or
forget about byacc.

https://github.com/xkbcommon/libxkbcommon/issues/8

Signed-off-by: Ran Benita <ran234@gmail.com>
2014-07-26 22:46:01 +03:00
Ran Benita f5182bbd74 test: add file with a syntax error
We didn't really have any. It also a exposes a memory leak, since the
parser doesn't clean up the AST nodes of the discarded symbols.

Signed-off-by: Ran Benita <ran234@gmail.com>
2014-07-26 22:29:22 +03:00
Ran Benita 61fed8dab9 Replace darray_mem with a new darray_steal
That's a more declarative interface.

Signed-off-by: Ran Benita <ran234@gmail.com>
2014-07-26 00:19:34 +03:00
Ran Benita fbd9286036 ast-build: use cast instead of ->common
Missed in 1b2bb204e0.

Signed-off-by: Ran Benita <ran234@gmail.com>
2014-07-26 00:13:54 +03:00
Ran Benita 5f5b960c71 types: refactor CopyKeyTypesToKeymap
So it's OOM-safe and doesn't clobber keymap on failure.

Signed-off-by: Ran Benita <ran234@gmail.com>
2014-07-25 23:45:04 +03:00
Ran Benita 320e5ffaf1 keycodes: split CopyKeyInfoToKeymap to several functions
It's a bit easier to read and self-documenting. Also handles OOM better.

Signed-off-by: Ran Benita <ran234@gmail.com>
2014-07-25 23:45:04 +03:00
Ran Benita cb4bae714e parser: don't shadow "str"
It's a name of a function in scanner-utils.h and also of some
parameters.

https://bugs.freedesktop.org/show_bug.cgi?id=79898

Reported-by: Bryce Harrington <b.harrington@samsung.com>
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-06-30 14:52:30 +03:00
Ran Benita 9c30d6da4e x11: don't iterate on empty batches
If count % SIZE == 0 we did a useless iteration where start==stop. It's
harmless but strange, so don't do that.

Signed-off-by: Ran Benita <ran234@gmail.com>
2014-06-15 15:30:51 +03:00
Ran Benita 67d884ec14 Remove unnecessary !!(expressions)
_Bool already does that.

Signed-off-by: Ran Benita <ran234@gmail.com>
2014-06-01 15:24:10 +03:00
Ran Benita d6f2d8ecd0 rules: fix leak on failure
matcher_match() builds up the kccgst's, and we steal the memory on
success. But on error we didn't free it.

Signed-off-by: Ran Benita <ran234@gmail.com>
2014-05-28 20:36:58 +03:00
Ran Benita 76e1fca20a Bump version to 0.4.2
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-05-15 12:07:00 +03:00
Ran Benita 1aea81c273 Update NEWS
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-05-15 12:06:46 +03:00
Ran Benita e3f751be66 x11: fix out-of-bounds access in adopt_atoms() error handling
Two problems:

- `j` can be >= `SIZE`, and needs to be wrapped like in the rest of the
   code.

- `cookies[j % SIZE]` is not initialized if there's no atom in `from[j]`.

The is manifested when:

- We've already gone through one batch (>= 128 atoms) (in fact this
  cannot happen in call to `adopt_atoms` in the current code).

- An XCB request failed in the middle of a batch.

Signed-off-by: Ran Benita <ran234@gmail.com>
2014-05-14 12:02:13 +03:00
Ran Benita 86cfef63ca ast-build: don't leak on OOM in BoolVarCreate
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-05-11 09:47:56 +03:00
Ran Benita 2e561c3f25 parser: show the keysym in "unrecognized keysym" messages
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-04-30 08:57:16 +03:00
Ran Benita 770f3e4bda doc: fix new doxygen version warnings
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-04-25 01:21:09 +03:00