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); }
int lua_dofile (char *filename) { ZIO z; int status; int c; int bin; char source[MAXFILENAME]; FILE *f = (filename == NULL) ? stdin : fopen(filename, "r"); if (f == NULL) return 2; luaL_filesource(source, filename, sizeof(source)); c = fgetc(f); ungetc(c, f); bin = (c == ID_CHUNK); if (bin && f != stdin) { f = freopen(filename, "rb", f); /* set binary mode */ if (f == NULL) return 2; } luaZ_Fopen(&z, f, source); status = do_main(&z, bin); if (f != stdin) fclose(f); return status; }