mirror of
git://projects.qi-hardware.com/eda-tools.git
synced 2024-11-04 23:43:43 +02:00
eeshow/kicad/sexpr.c (sexpr_abort): silently shut down parser
This commit is contained in:
parent
2515c3b964
commit
83c452c522
@ -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;
|
||||
}
|
||||
|
@ -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 */
|
||||
|
Loading…
Reference in New Issue
Block a user