int main(int argc, char *argv[]) { int c; int dump_flags = 0; char *filename = DEFAULT_FILE; while ((c=getopt(argc, argv, "hvf:elo")) != EOF) { switch (c) { case 'h': case 'v': usage(argv[0]); exit(0); case 'f': filename = optarg; break; case 'e': dump_flags |= VMAD_DUMP_EXEC; break; case 'l': dump_flags |= VMAD_DUMP_LIBS; break; case 'o': dump_flags |= VMAD_DUMP_OTHER; break; default: exit(1); } } while (1) { int r; printf("Doing vmadump(\"%s\", 0x%x)=", filename, dump_flags); fflush(stdout); r = do_dump(filename, dump_flags); if (r > 0) { printf("%d\n", r); printf("Doing vmaundump(\"%s\")\n", filename); fflush(stdout); do_undump(filename); /* not reached */ } close(3); /* hack to deal with the lack of close_on_exec */ } }
static void doit(int undump, char* filename) { FILE* f= (filename==NULL) ? stdin : efopen(filename, undump ? "rb" : "r"); ZIO z; char source[255+2]; /* +2 for '@' and '\0' */ luaL_filesource(source,filename,sizeof(source)); zFopen(&z,f,source); if (verbose) fprintf(stderr,"%s\n",source+1); if (undump) do_undump(&z); else do_compile(&z); if (f!=stdin) fclose(f); }
static void doit(int undump, char* filename) { FILE* f= (filename==NULL) ? stdin : efopen(filename, undump ? "rb" : "r"); ZIO z; if (filename==NULL) filename="(stdin)"; zFopen(&z,f,filename); if (verbose) fprintf(stderr,"%s\n",filename); if (undump) do_undump(&z); else do_compile(&z); if (f!=stdin) fclose(f); }