1
0
mirror of git://projects.qi-hardware.com/eda-tools.git synced 2024-06-28 23:44:33 +03:00

eeshow/kicad/sexpr.c (sexpr_abort): silently shut down parser

This commit is contained in:
Werner Almesberger 2016-08-22 04:02:14 -03:00
parent 2515c3b964
commit 83c452c522
2 changed files with 17 additions and 10 deletions

View File

@ -312,24 +312,30 @@ struct sexpr_ctx *sexpr_new(void)
/* ----- Termination ------------------------------------------------------- */
void sexpr_abort(struct sexpr_ctx *ctx)
{
free_stack(ctx);
free_expr(ctx->e);
free(ctx);
}
bool sexpr_finish(struct sexpr_ctx *ctx, struct expr **res)
{
if (ctx->sp != &ctx->stack) {
error("not enough )\n");
ctx->state = failed;
free_stack(ctx);
}
if (ctx->state != idle && ctx->state != failed)
error("invalid end state %d\n", ctx->state);
if (ctx->state == idle) {
if (res)
*res = ctx->e;
else
free_expr(ctx->e);
free(ctx);
return 1;
if (ctx->state != idle) {
sexpr_abort(ctx);
return 0;
}
free_expr(ctx->e);
if (res)
*res = ctx->e;
else
free_expr(ctx->e);
free(ctx);
return 0;
return 1;
}

View File

@ -42,6 +42,7 @@ void free_expr(struct expr *e);
struct sexpr_ctx *sexpr_new(void);
bool sexpr_parse(struct sexpr_ctx *ctx, const char *s);
void sexpr_abort(struct sexpr_ctx *ctx);
bool sexpr_finish(struct sexpr_ctx *ctx, struct expr **res);
#endif /* !KICAD_SEXPR_H */