#include #include #include #include static void * my_alloc(size_t min, size_t max, size_t *actual) { (void)max; *actual = min; return malloc(min); } static void my_dealloc(void *p) { free(p); } int main(int argc, char *argv[]) { struct aplwc_fns fns; char *input; struct aplwc *aplwc; AplwcLine line; enum aplwc_rc ret; FILE *f; long input_size; memset(&fns, 0, sizeof(fns)); fns.alloc = my_alloc; fns.dealloc = my_dealloc; if(argc != 2) return 1; f = fopen(argv[1], "r"); if(f == NULL) return 1; if(fseek(f, 0, SEEK_END)) return 1; input_size = ftell(f); if(input_size < 0) return 1; rewind(f); input = malloc(input_size+1); if(input == NULL) return 1; if(fread(input, 1, input_size, f) < (size_t)input_size) return 1; input[input_size] = 0; aplwc = aplwc_new(fns, &ret); if(ret) return 1; line = aplwc_read(aplwc, input); if((!aplwc_valid_line(line)) && (aplwc_last_error(aplwc) != APLWC_OUT_OF_MEMORY)) return 1; aplwc_free_line(line); aplwc_destroy(aplwc); free(input); return 0; }