resolver: better relative path handling for includes.
authorKrisztian Litkey <krisztian.litkey@intel.com>
Wed, 5 Sep 2012 08:46:58 +0000 (11:46 +0300)
committerKrisztian Litkey <krisztian.litkey@intel.com>
Fri, 26 Oct 2012 16:00:10 +0000 (19:00 +0300)
src/resolver/scanner.l
src/resolver/test-input

index 19fadae..c19daa3 100644 (file)
@@ -3,6 +3,7 @@
 #define YY_DECL int yy_res_lex(yy_res_parser_t *parser)
 
 #include <stdio.h>
+#include <limits.h>
 
 #include <murphy/common/mm.h>
 #include <murphy/common/log.h>
  * circular inclusion loops...
  */
 
-int scanner_push_file(yy_res_parser_t *parser, const char *path)
+int scanner_push_file(yy_res_parser_t *parser, const char *file)
 {
     yy_res_input_t *in;
+    char            buf[PATH_MAX], *base;
+    const char     *path;
+    int             len;
     FILE           *fp;
 
+    if (*file != '/' && parser->in != NULL) {
+        base = strrchr(parser->in->name, '/');
+        if (base != NULL) {
+            len = base - parser->in->name;
+            snprintf(buf, sizeof(buf), "%*.*s/%s",
+                     len, len, parser->in->name, file);
+            path = buf;
+        }
+        else
+            path = file;
+    }
+    else
+        path = file;
+
     fp = fopen(path, "r");
 
     if (fp != NULL) {
@@ -63,6 +81,9 @@ int scanner_push_file(yy_res_parser_t *parser, const char *path)
         else
             fclose(fp);
     }
+    else
+        mrp_log_error("Failed to open input file '%s' ('%s', error: %s).",
+                      file, path, strerror(errno));
 
     return FALSE;
 }
index 302f650..e6a68c5 100644 (file)
@@ -10,5 +10,5 @@ target all
         echo('foo', 'bar', 'foobar...', 1, 2, 3.141, -9.81)
     end script
 
-include "/u/src/work/murphy/src/resolver/test-input-video"
-include "/u/src/work/murphy/src/resolver/test-input-audio"
+include "test-input-video"
+include "test-input-audio"