diff options
author | alois31 <36605164+alois31@users.noreply.github.com> | 2023-05-15 14:23:16 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-15 15:23:16 +0300 |
commit | f3210cbf27c79ed4294f85271476c6433446102f (patch) | |
tree | 7b9ee914d49059cd94187940b16b86821cf15b53 /src | |
parent | 64aaa7cda29196a9142dc8785c29201468429fe8 (diff) | |
download | xorg-lib-libxkbcommon-f3210cbf27c79ed4294f85271476c6433446102f.tar.gz |
In commit 1638409b22aef33d487863876ab214b949db4984, the number of
compose nodes was limited to 65535 to enable "future optimizations",
which apparently means slightly reduced memory usage due to fitting in
a uint16_t. At this time, it was mentioned that the author was not
aware of "any compose files which come close".
However, I'm one of the users that actually do require a larger number
of nodes for their compose file. Thus, use a uint32_t again and raise
the limit significantly.
Diffstat (limited to 'src')
-rw-r--r-- | src/compose/parser.c | 4 | ||||
-rw-r--r-- | src/compose/state.c | 6 | ||||
-rw-r--r-- | src/compose/table.h | 11 |
3 files changed, 11 insertions, 10 deletions
diff --git a/src/compose/parser.c b/src/compose/parser.c index f84b314..124456d 100644 --- a/src/compose/parser.c +++ b/src/compose/parser.c @@ -332,8 +332,8 @@ add_production(struct xkb_compose_table *table, struct scanner *s, const struct production *production) { unsigned lhs_pos = 0; - uint16_t curr = darray_size(table->nodes) == 1 ? 0 : 1; - uint16_t *pptr = NULL; + uint32_t curr = darray_size(table->nodes) == 1 ? 0 : 1; + uint32_t *pptr = NULL; struct compose_node *node = NULL; /* Warn before potentially going over the limit, discard silently after. */ diff --git a/src/compose/state.c b/src/compose/state.c index 6ba0344..7a78891 100644 --- a/src/compose/state.c +++ b/src/compose/state.c @@ -41,8 +41,8 @@ struct xkb_compose_state { * This is also sufficient for inferring the current status; see * xkb_compose_state_get_status(). */ - uint16_t prev_context; - uint16_t context; + uint32_t prev_context; + uint32_t context; }; XKB_EXPORT struct xkb_compose_state * @@ -91,7 +91,7 @@ xkb_compose_state_get_compose_table(struct xkb_compose_state *state) XKB_EXPORT enum xkb_compose_feed_result xkb_compose_state_feed(struct xkb_compose_state *state, xkb_keysym_t keysym) { - uint16_t context; + uint32_t context; const struct compose_node *node; /* diff --git a/src/compose/table.h b/src/compose/table.h index 6be4348..825a8e2 100644 --- a/src/compose/table.h +++ b/src/compose/table.h @@ -75,16 +75,17 @@ * \0 is so offset 0 points to an empty string). */ -/* Fits in uint16_t, also a good idea to have some limit. */ -#define MAX_COMPOSE_NODES 65535 +/* 7 nodes for every potential Unicode character and then some should be + * enough for all purposes. */ +#define MAX_COMPOSE_NODES (1 << 23) struct compose_node { xkb_keysym_t keysym; /* Offset into xkb_compose_table::nodes or 0. */ - uint16_t lokid; + uint32_t lokid; /* Offset into xkb_compose_table::nodes or 0. */ - uint16_t hikid; + uint32_t hikid; union { struct { @@ -95,7 +96,7 @@ struct compose_node { uint32_t _pad:31; bool is_leaf:1; /* Offset into xkb_compose_table::nodes or 0. */ - uint16_t eqkid; + uint32_t eqkid; } internal; struct { /* Offset into xkb_compose_table::utf8. */ |