void error(t_uint flag, char *msg) { const char *error[] = { ": Too many args.", ": Ouch... can't read this.", ": What the heck is that file? Nah, just try with something else. - " }; fail(g_exec_name); if (msg) { fail(error[get_index(flag & (t_uint)~E_NOEXIT)]); failn(msg); } else failn(error[get_index(flag & (t_uint)~E_NOEXIT)]); if (!(flag & E_NOEXIT)) exit(EXIT_FAILURE); }
value bap_llvm_load_stub(value arg) { CAMLparam1(arg); CAMLlocal1(result); const struct caml_ba_array* array = Caml_ba_array_val(arg); if ((!array->dim[0]) || (array->num_dims != 1)) failn(1); const struct bap_llvm_loader *loader = bap_llvm_loader_create((const char*)(array->data), array->dim[0]); if (bap_llvm_file_not_supported(loader)) loader_fail(loader, 2); if (bap_llvm_loader_failed(loader)) loader_fail(loader, 1); const char *d = bap_llvm_loader_data(loader); result = caml_copy_string(d); bap_llvm_loader_destroy(loader); CAMLreturn(result); }
static void loader_fail(const struct bap_llvm_loader *loader, int n) { bap_llvm_loader_destroy(loader); failn(n); }