summaryrefslogtreecommitdiffstats
path: root/grammar/utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'grammar/utils.c')
-rw-r--r--grammar/utils.c45
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');
+}