#include #include #include #include #include "interpreter.h" #include "parser.h" #include "util.h" char* readfile(const char *fname,size_t *length){ FILE *f=fopen(fname,"rb"); if(!f)return NULL; if(fseek(f,0,SEEK_END)==-1){fclose(f); return NULL;} long flen=ftell(f); if(flen==-1){fclose(f); return NULL;} rewind(f); char *buf=malloc(flen+1,char); fread(buf,1,flen,f); if(ferror(f)){fclose(f); free(buf); return NULL;} if(memchr(buf,'\0',flen)!=NULL){ fprintf(stderr,"Invalid null char in file '%s'\n",fname); exit(1); } buf[flen]='\0'; fclose(f); *length=flen; return buf; } char *readstdin(size_t *length){ int bufsz=1024,cursor=0; char *buf=malloc(bufsz,char); while(true){ if(cursor==bufsz-1){ bufsz*=2; buf=realloc(buf,bufsz,char); } int nread=fread(buf,1,bufsz-cursor-1,stdin); if(nread>0&&memchr(buf,'\0',nread)!=NULL){ fprintf(stderr,"Invalid null char on stdin file\n"); exit(1); } cursor+=nread; if(nread