Skip to content

Commit

Permalink
Fix build warnings (part 3)
Browse files Browse the repository at this point in the history
Signed-off-by: Alexey Gladkov <gladkov.alexey@gmail.com>
  • Loading branch information
legionus committed Jul 6, 2018
1 parent b7432b2 commit a3751c1
Show file tree
Hide file tree
Showing 17 changed files with 256 additions and 173 deletions.
41 changes: 38 additions & 3 deletions src/libkeymap/analyze.l
Expand Up @@ -266,6 +266,34 @@ open_include(struct lk_ctx *ctx, char *s, yyscan_t scanner)
return stack_push(ctx, fp, scanner);
}

static int
parse_int(struct lk_ctx *ctx, char *text, char *value, int base, int *res)
{
long v;

errno = 0;
v = strtol(value, NULL, base);

if (errno) {
ERR(ctx, _("unable to parse number: %s"), text);
return -1;
}

if (v < 0) {
ERR(ctx, _("value must be a positive number: %s"), text);
return -1;
}

if (v > INT_MAX) {
ERR(ctx, _("value must be less than %d: %s"), text, INT_MAX);
return -1;
}

*res = (int) v;

return 0;
}

%}
%s RVALUE
%x STR
Expand Down Expand Up @@ -360,16 +388,21 @@ To to|To|TO
return(TO);
}
{Unicode} {
yylval->num = strtol(yytext + 1, NULL, 16);
if (parse_int(yyextra, yytext, yytext + 1, 16, &(yylval->num)) < 0)
return(ERROR);

if (yylval->num >= 0xf000) {
ERR(yyextra, _("unicode keysym out of range: %s"),
yytext);
return(ERROR);
}

return(UNUMBER);
}
{Decimal}|{Octal}|{Hex} {
yylval->num = strtol(yytext, NULL, 0);
if (parse_int(yyextra, yytext, yytext, 0, &(yylval->num)) < 0)
return(ERROR);

return(NUMBER);
}
<RVALUE>{Literal} { return((yylval->num = ksymtocode(yyextra, yytext, TO_AUTO)) == -1 ? ERROR : LITERAL); }
Expand Down Expand Up @@ -397,7 +430,9 @@ To to|To|TO
{On} { return(ON); }
{For} { return(FOR); }
'\\{Octa}' {
yylval->num = strtol(yytext + 2, NULL, 8);
if (parse_int(yyextra, yytext, yytext + 2, 8, &(yylval->num)) < 0)
return(ERROR);

return(CCHAR);
}
'\\.' {
Expand Down
80 changes: 52 additions & 28 deletions src/libkeymap/array.c
Expand Up @@ -8,49 +8,62 @@

#include <keymap/array.h>

int lk_array_init(struct lk_array *a, size_t memb, size_t size)
int
lk_array_init(struct lk_array *a, ssize_t memb, ssize_t size)
{
if (!a)
if (!a || memb < 0 || size < 0) {
errno = EINVAL;
return -EINVAL;
}

memset(a, 0, sizeof(struct lk_array));

a->array = calloc(size, memb);
a->array = calloc((size_t) size, (size_t) memb);
a->memb = memb;
a->total = size;

if (size && !a->array)
if (size && !a->array) {
errno = ENOMEM;
return -ENOMEM;
}

return 0;
}

int lk_array_free(struct lk_array *a)
int
lk_array_free(struct lk_array *a)
{
if (!a)
if (!a) {
errno = EINVAL;
return -EINVAL;
}
free(a->array);
memset(a, 0, sizeof(struct lk_array));
return 0;
}

int lk_array_empty(struct lk_array *a)
int
lk_array_empty(struct lk_array *a)
{
if (!a)
if (!a) {
errno = EINVAL;
return -EINVAL;
}

memset(a->array, 0, (a->memb * a->total));
memset(a->array, 0, (size_t) (a->memb * a->total));
a->count = 0;

return 0;
}

int lk_array_exists(struct lk_array *a, size_t i)
int
lk_array_exists(struct lk_array *a, ssize_t i)
{
char *s;
size_t k;
ssize_t k;

if (!a || i >= a->total) {
if (!a || i < 0 || i >= a->total) {
errno = EINVAL;
return 0;
}

Expand All @@ -65,78 +78,89 @@ int lk_array_exists(struct lk_array *a, size_t i)
}

void *
lk_array_get(struct lk_array *a, size_t i)
lk_array_get(struct lk_array *a, ssize_t i)
{
if (!a || i >= a->total) {
if (!a || i < 0 || i >= a->total) {
errno = EINVAL;
return NULL;
}
return a->array + (a->memb * i);
}

void *
lk_array_get_ptr(struct lk_array *a, size_t i)
lk_array_get_ptr(struct lk_array *a, ssize_t i)
{
void **ptr;
if (!a || i >= a->total) {
if (!a || i < 0 || i >= a->total) {
errno = EINVAL;
return NULL;
}
ptr = a->array;
return *(ptr + i);
}

static int
array_resize(struct lk_array *a, size_t i)
array_resize(struct lk_array *a, ssize_t i)
{
if (!a)
if (!a || i < 0) {
errno = EINVAL;
return -EINVAL;
}

if (i >= a->total) {
void *tmp = realloc(a->array, a->memb * (i + 1));
if (!tmp)
void *tmp = realloc(a->array, (size_t) (a->memb * (i + 1)));
if (!tmp) {
errno = ENOMEM;
return -ENOMEM;
}

memset(tmp + (a->memb * a->total), 0, a->memb * (i + 1 - a->total));
memset(tmp + (a->memb * a->total), 0, (size_t) (a->memb * (i + 1 - a->total)));

a->array = tmp;
a->total = i + 1;
}
return 0;
}

int lk_array_set(struct lk_array *a, size_t i, const void *e)
int
lk_array_set(struct lk_array *a, ssize_t i, const void *e)
{
int ret = array_resize(a, i);

if (ret < 0)
return ret;

memcpy(a->array + (a->memb * i), e, a->memb);
memcpy(a->array + (a->memb * i), e, (size_t) a->memb);
a->count++;

return 0;
}

int lk_array_unset(struct lk_array *a, size_t i)
int
lk_array_unset(struct lk_array *a, ssize_t i)
{
if (!a || i >= a->total)
if (!a || i >= a->total) {
errno = EINVAL;
return -EINVAL;
}

if (lk_array_exists(a, i)) {
memset(a->array + (a->memb * i), 0, a->memb);
memset(a->array + (a->memb * i), 0, (size_t) a->memb);
a->count--;
}

return 0;
}

int lk_array_append(struct lk_array *a, const void *e)
int
lk_array_append(struct lk_array *a, const void *e)
{
int ret = array_resize(a, a->count);

if (ret < 0)
return ret;

memcpy(a->array + (a->memb * a->count), e, a->memb);
memcpy(a->array + (a->memb * a->count), e, (size_t) a->memb);
a->count++;

return 0;
Expand Down
2 changes: 1 addition & 1 deletion src/libkeymap/common.c
Expand Up @@ -125,7 +125,7 @@ int lk_set_parser_flags(struct lk_ctx *ctx, lk_flags flags)
}

static int
init_array(struct lk_ctx *ctx, struct lk_array **arr, size_t size)
init_array(struct lk_ctx *ctx, struct lk_array **arr, ssize_t size)
{
int rc;
void *ptr;
Expand Down
2 changes: 1 addition & 1 deletion src/libkeymap/contextP.h
Expand Up @@ -69,7 +69,7 @@ struct lk_ctx {

struct lk_array *key_constant;
struct lk_array *key_line;
unsigned int mod;
int mod;
struct kbdfile *stack[MAX_INCLUDE_DEPTH];
};

Expand Down
14 changes: 7 additions & 7 deletions src/libkeymap/diacr.c
Expand Up @@ -17,12 +17,12 @@
#include "contextP.h"
#include "ksyms.h"

int lk_diacr_exists(struct lk_ctx *ctx, unsigned int index)
int lk_diacr_exists(struct lk_ctx *ctx, int index)
{
return (lk_array_get_ptr(ctx->accent_table, index) != NULL);
}

int lk_get_diacr(struct lk_ctx *ctx, unsigned int index, struct lk_kbdiacr *dcr)
int lk_get_diacr(struct lk_ctx *ctx, int index, struct lk_kbdiacr *dcr)
{
struct lk_kbdiacr *ptr;

Expand Down Expand Up @@ -58,7 +58,7 @@ int lk_append_diacr(struct lk_ctx *ctx, struct lk_kbdiacr *dcr)
return 0;
}

int lk_add_diacr(struct lk_ctx *ctx, unsigned int index, struct lk_kbdiacr *dcr)
int lk_add_diacr(struct lk_ctx *ctx, int index, struct lk_kbdiacr *dcr)
{
struct lk_kbdiacr *ptr;

Expand All @@ -77,7 +77,7 @@ int lk_add_diacr(struct lk_ctx *ctx, unsigned int index, struct lk_kbdiacr *dcr)
return 0;
}

int lk_del_diacr(struct lk_ctx *ctx, unsigned int index)
int lk_del_diacr(struct lk_ctx *ctx, int index)
{
int rc;
rc = lk_array_unset(ctx->accent_table, index);
Expand All @@ -98,9 +98,9 @@ int lk_append_compose(struct lk_ctx *ctx, struct lk_kbdiacr *dcr)
direction = TO_UNICODE;
#endif

dcr0.diacr = convert_code(ctx, dcr->diacr, direction);
dcr0.base = convert_code(ctx, dcr->base, direction);
dcr0.result = convert_code(ctx, dcr->result, direction);
dcr0.diacr = (unsigned int) convert_code(ctx, (int) dcr->diacr, direction);
dcr0.base = (unsigned int) convert_code(ctx, (int) dcr->base, direction);
dcr0.result = (unsigned int) convert_code(ctx, (int) dcr->result, direction);

return lk_append_diacr(ctx, &dcr0);
}

0 comments on commit a3751c1

Please sign in to comment.