int main(int argv, const char **argc) { const char *fname = argc[1]; struct stat sbuf; int fd = open(fname, O_RDONLY); struct vparse_state parser; char *data; int r; memset(&parser, 0, sizeof(struct vparse_state)); fstat(fd, &sbuf); data = malloc(sbuf.st_size+1); read(fd, data, sbuf.st_size); data[sbuf.st_size] = '\0'; parser.base = data; r = vparse_parse(&parser); if (r) { struct vparse_errorpos pos; vparse_fillpos(&parser, &pos); printf("error %s at line %d char %d: %.*s ... %.*s <--- (started at line %d char %d)\n", vparse_errstr(r), pos.errorline, pos.errorchar, 20, parser.base + pos.startpos, 20, parser.base + pos.errorpos - 20, pos.startline, pos.startchar); return 1; } _dump(parser.card); vparse_free(&parser); return 0; }
static void free_vparser(void *vparser) { vparse_free((struct vparse_state *) vparser); free(vparser); }