Code

frontend parser: Added 'len' parameter to sdb_fe_parse().
[sysdb.git] / src / frontend / scanner.l
index f300e46d73160d906f841dd3c421f125d3a93fcc..a0c05d8ab495fdd7ed4da9e215f0caa280f1b36c 100644 (file)
@@ -97,10 +97,13 @@ identifier  ([A-Za-z_][A-Za-z_0-9$]*)
 %%
 
 sdb_fe_yyscan_t
-sdb_fe_scanner_init(const char *str, sdb_fe_yyextra_t *yyext)
+sdb_fe_scanner_init(const char *str, int len, sdb_fe_yyextra_t *yyext)
 {
        yyscan_t scanner;
 
+       if (! str)
+               return NULL;
+
        if (sdb_fe_yylex_init(&scanner)) {
                char errbuf[1024];
                sdb_log(SDB_LOG_ERR, "frontend: yylex_init failed: %s",
@@ -110,9 +113,12 @@ sdb_fe_scanner_init(const char *str, sdb_fe_yyextra_t *yyext)
 
        sdb_fe_yyset_extra(yyext, scanner);
 
+       if (len < 0)
+               len = strlen(str);
+
        /* the newly allocated buffer state (YY_BUFFER_STATE) is stored inside the
         * scanner and, thus, will be freed by yylex_destroy */
-       yy_scan_string(str, scanner);
+       sdb_fe_yy_scan_bytes(str, len, scanner);
        return scanner;
 } /* sdb_fe_scanner_init */