diff options
Diffstat (limited to 'grammar/utils.c')
-rw-r--r-- | grammar/utils.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/grammar/utils.c b/grammar/utils.c new file mode 100644 index 00000000..f9c50bc9 --- /dev/null +++ b/grammar/utils.c @@ -0,0 +1,45 @@ +#include <stdio.h> +#include <string.h> +#include <ctype.h> +#include "libestr.h" + +void +readConfFile(FILE *fp, es_str_t **str) +{ + int c; + char ln[10240]; + int len, i; + int start; /* start index of to be submitted text */ + char *fgetsRet; + int bContLine = 0; + + *str = es_newStr(4096); + + while(fgets(ln, sizeof(ln), fp) != NULL) { + len = strlen(ln); + /* if we are continuation line, we need to drop leading WS */ + if(bContLine) { + for(start = 0 ; start < len && isspace(ln[start]) ; ++start) + /* JUST SCAN */; + } else { + start = 0; + } + for(i = len - 1 ; i >= start && isspace(ln[i]) ; --i) + /* JUST SCAN */; + if(i >= 0) { + if(ln[i] == '\\') { + --i; + bContLine = 1; + } else { + bContLine = 0; + } + /* add relevant data to buffer */ + es_addBuf(str, ln+start, i+1 - start); + if(!bContLine) + es_addChar(str, '\n'); + } + } + /* indicate end of buffer to flex */ + es_addChar(str, '\0'); + es_addChar(str, '\0'); +} |