struct libscols_column *(*add_column_by_id)(struct libscols_table *, int, void*);
void *data;
struct parameter *parameters;
-#define ERRMSG_LEN 128
- char errmsg[ERRMSG_LEN];
+ char errmsg[128];
};
enum node_type {
struct node *node;
struct parameter *parameters;
int nparams;
- char errmsg[ERRMSG_LEN];
+ char errmsg[ sizeof_member(struct parser, errmsg) ];
};
/*
char c = parser_getc(parser);
if (c == '\0') {
- snprintf(parser->errmsg, ERRMSG_LEN,
+ snprintf(parser->errmsg, sizeof(parser->errmsg),
_("error: string literal is not terminated: %s"),
token->val.str? : "");
return;
t->type = TOKEN_CLOSE;
parser->paren_level--;
if (parser->paren_level < 0)
- snprintf(parser->errmsg, ERRMSG_LEN,
+ snprintf(parser->errmsg, sizeof(parser->errmsg),
_("error: unbalanced parenthesis: %s"), parser->cursor - 1);
break;
case '!':
t->val.op2 = OP2_RE_MATCH;
break;
}
- snprintf(parser->errmsg, ERRMSG_LEN,
+ snprintf(parser->errmsg, sizeof(parser->errmsg),
_("error: unexpected character %c after ="), c0);
break;
case '&':
t->val.op2 = OP2_AND;
break;
}
- snprintf(parser->errmsg, ERRMSG_LEN,
+ snprintf(parser->errmsg, sizeof(parser->errmsg),
_("error: unexpected character %c after ="), c0);
break;
case '|':
t->val.op2 = OP2_OR;
break;
}
- snprintf(parser->errmsg, ERRMSG_LEN,
+ snprintf(parser->errmsg, sizeof(parser->errmsg),
_("error: unexpected character %c after ="), c0);
break;
case '"':
t->type = TOKEN_DEC;
xstrputc(&t->val.str, c);
if (parser_read_dec(parser, t) != 0)
- snprintf(parser->errmsg, ERRMSG_LEN,
+ snprintf(parser->errmsg, sizeof(parser->errmsg),
_("error: failed to convert input to number"));
break;
}
- snprintf(parser->errmsg, ERRMSG_LEN,
+ snprintf(parser->errmsg, sizeof(parser->errmsg),
_("error: unexpected character %c"), c);
break;
}
case TOKEN_FALSE:
case TOKEN_OPEN:
case TOKEN_OP1:
- snprintf(parser->errmsg, ERRMSG_LEN,
+ snprintf(parser->errmsg, sizeof(parser->errmsg),
_("error: unexpected token: %s after %s"), t->val.str,
NODE_CLASS(last)->name);
token_free(t);
} else {
switch (t->type) {
case TOKEN_OP2:
- snprintf(parser->errmsg, ERRMSG_LEN,
+ snprintf(parser->errmsg, sizeof(parser->errmsg),
_("error: empty left side expression: %s"),
TOKEN_OP2_CLASS(t)->name);
token_free(t);
case TOKEN_NAME: {
int col_id = parser->column_name_to_id(t->val.str, parser->data);
if (col_id == LSFD_FILTER_UNKNOWN_COL_ID) {
- snprintf(parser->errmsg, ERRMSG_LEN,
+ snprintf(parser->errmsg, sizeof(parser->errmsg),
_("error: no such column: %s"), t->val.str);
token_free(t);
return NULL;
if (!cl) {
cl = parser->add_column_by_id(parser->tb, col_id, parser->data);
if (!cl) {
- snprintf(parser->errmsg, ERRMSG_LEN,
+ snprintf(parser->errmsg, sizeof(parser->errmsg),
_("error: cannot add a column to table: %s"), t->val.str);
token_free(t);
return NULL;
ntype = NODE_BOOL;
break;
default:
- snprintf(parser->errmsg, ERRMSG_LEN,
+ snprintf(parser->errmsg, sizeof(parser->errmsg),
_("error: unsupported column data type: %d, column: %s"),
jtype, t->val.str);
return NULL;
}
if (op1_right == NULL) {
- snprintf(parser->errmsg, ERRMSG_LEN,
+ snprintf(parser->errmsg, sizeof(parser->errmsg),
_("error: empty right side expression: %s"),
op1_class->name);
return NULL;
return NULL;
}
if (op2_right == NULL) {
- snprintf(parser->errmsg, ERRMSG_LEN,
+ snprintf(parser->errmsg, sizeof(parser->errmsg),
_("error: empty right side expression: %s"),
op2_class->name);
return NULL;
if (node == node0) {
if (node == NULL)
- strncpy(parser->errmsg,
+ xstrncpy(parser->errmsg,
_("error: empty filter expression"),
- ERRMSG_LEN - 1);
+ sizeof(parser->errmsg));
return node;
}
node = node0;
struct node *node)
{
if (! (node->type == NODE_OP1 || node->type == NODE_OP2 || node->type == NODE_BOOL)) {
- snprintf(parser->errmsg, ERRMSG_LEN,
+ snprintf(parser->errmsg, sizeof(parser->errmsg),
_("error: unexpected operand type %s for: %s"),
NODE_CLASS(node)->name,
op1_class->name);
enum node_type lt = left->type, rt = right->type;
if (!(lt == NODE_OP1 || lt == NODE_OP2 || lt == NODE_BOOL)) {
- snprintf(parser->errmsg, ERRMSG_LEN,
+ snprintf(parser->errmsg, sizeof(parser->errmsg),
_("error: unexpected left operand type %s for: %s"),
NODE_CLASS(left)->name,
op2_class->name);
}
if (! (rt == NODE_OP1 || rt == NODE_OP2 || rt == NODE_BOOL)) {
- snprintf(parser->errmsg, ERRMSG_LEN,
+ snprintf(parser->errmsg, sizeof(parser->errmsg),
_("error: unexpected right operand type %s for: %s"),
NODE_CLASS(right)->name,
op2_class->name);
struct node *left, struct node *right)
{
if (left->type != NODE_NUM) {
- snprintf(parser->errmsg, ERRMSG_LEN,
+ snprintf(parser->errmsg, sizeof(parser->errmsg),
_("error: unexpected left operand type %s for: %s"),
NODE_CLASS(left)->name,
op2_class->name);
}
if (right->type != NODE_NUM) {
- snprintf(parser->errmsg, ERRMSG_LEN,
+ snprintf(parser->errmsg, sizeof(parser->errmsg),
_("error: unexpected right operand type %s for: %s"),
NODE_CLASS(right)->name,
op2_class->name);
struct node *left, struct node *right)
{
if (left->type != NODE_STR) {
- snprintf(parser->errmsg, ERRMSG_LEN,
+ snprintf(parser->errmsg, sizeof(parser->errmsg),
_("error: unexpected left operand type %s for: %s"),
NODE_CLASS(left)->name,
op2_class->name);
}
if (right->type != NODE_STR) {
- snprintf(parser->errmsg, ERRMSG_LEN,
+ snprintf(parser->errmsg, sizeof(parser->errmsg),
_("error: unexpected right operand type %s for: %s"),
NODE_CLASS(right)->name,
op2_class->name);
return false;
}
if (PINDEX(right) >= 0) {
- snprintf(parser->errmsg, ERRMSG_LEN,
+ snprintf(parser->errmsg, sizeof(parser->errmsg),
_("error: string literal is expected as right operand for: %s"),
op2_class->name);
return false;
regerror(err, &VAL(right, re), buf, size);
- snprintf(parser->errmsg, ERRMSG_LEN,
+ snprintf(parser->errmsg, sizeof(parser->errmsg),
_("error: could not compile regular expression %s: %s"),
regex, buf);
free(buf);
data);
node = dparser_compile(&parser);
+ filter = xcalloc(1, sizeof(struct lsfd_filter));
- filter = xmalloc(sizeof(struct lsfd_filter));
- filter->errmsg[0] = '\0';
if (GOT_ERROR(&parser)) {
- strcpy(filter->errmsg, parser.errmsg);
+ xstrncpy(filter->errmsg, parser.errmsg, sizeof(filter->errmsg));
return filter;
}
assert(node);
if (parser.paren_level > 0) {
node_free(node);
- strncpy(filter->errmsg, _("error: unbalanced parenthesis: ("), ERRMSG_LEN - 1);
+ xstrncpy(filter->errmsg, _("error: unbalanced parenthesis: ("), sizeof(filter->errmsg));
return filter;
}
if (*parser.cursor != '\0') {
node_free(node);
- snprintf(filter->errmsg, ERRMSG_LEN,
+ snprintf(filter->errmsg, sizeof(filter->errmsg),
_("error: garbage at the end of expression: %s"), parser.cursor);
return filter;
}
if (node->type == NODE_STR || node->type == NODE_NUM) {
node_free(node);
- snprintf(filter->errmsg, ERRMSG_LEN,
+ snprintf(filter->errmsg, sizeof(filter->errmsg),
_("error: bool expression is expected: %s"), expr);
return filter;
}