From c9127b2bd399ce5d3e9483a82434948202592309 Mon Sep 17 00:00:00 2001 From: tomsmeding Date: Fri, 19 Aug 2016 20:44:53 +0200 Subject: Parsing and stringification works --- main.c | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 main.c (limited to 'main.c') diff --git a/main.c b/main.c new file mode 100644 index 0000000..c3a5618 --- /dev/null +++ b/main.c @@ -0,0 +1,87 @@ +#include +#include +#include +#include + +#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