]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
relative path in include
authorAnthony Minessale <anthony.minessale@gmail.com>
Wed, 14 Nov 2007 21:01:15 +0000 (21:01 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Wed, 14 Nov 2007 21:01:15 +0000 (21:01 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@6262 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/switch_xml.cpp

index 3b74549f501d8e56f77740fbaa190bf5e22ff2c3..1fa5f5f9eee7b21cb2ae4b1aa55f5cfe9bbf036a 100644 (file)
@@ -69,7 +69,7 @@ extern int madvise(caddr_t, size_t, int);
 #define SWITCH_XML_ERRL 128            // maximum error string length
 #include "SimpleGlob.h"
 
-static int preprocess(const char *file, int write_fd, int rlevel);
+static int preprocess(const char *cwd, const char *file, int write_fd, int rlevel);
 
 typedef struct switch_xml_root *switch_xml_root_t;
 struct switch_xml_root {               // additional data for the root tag
@@ -938,14 +938,15 @@ static char *expand_vars(char *buf, char *ebuf, switch_size_t elen, switch_size_
 
 }
 
-static int preprocess_glob(const char *pattern, int write_fd, int rlevel)
+static int preprocess_glob(const char *cwd, const char *pattern, int write_fd, int rlevel)
 {
        char *argv[1] = {0};
        int argc = 1;
        char *full_path = NULL;
+       char *dir_path = NULL, *e = NULL;
 
        if (!switch_is_file_path(pattern)) {
-               full_path = switch_mprintf("%s%s%s", SWITCH_GLOBAL_dirs.conf_dir, SWITCH_PATH_SEPARATOR, pattern);
+               full_path = switch_mprintf("%s%s%s", cwd, SWITCH_PATH_SEPARATOR, pattern);
                pattern = full_path;
        }
        
@@ -961,14 +962,19 @@ static int preprocess_glob(const char *pattern, int write_fd, int rlevel)
        }
 
        for (int n = 0; n < glob.FileCount(); ++n) {
-               if (preprocess(glob.File(n), write_fd, rlevel) < 0) {
+               dir_path = strdup(glob.File(n));
+               assert(dir_path);
+               if ((e = strrchr(dir_path, *SWITCH_PATH_SEPARATOR))) {
+                       *e = '\0';
+               }
+               if (preprocess(dir_path, glob.File(n), write_fd, rlevel) < 0) {
                        const char *reason = strerror(errno);
                        if (rlevel > 100) {
                                reason = "Maximum recursion limit reached";
                        }
                        fprintf(stderr, "Error including %s (%s)\n", argv[0], reason);
                }
-
+               free(dir_path);
        }
 
  end:
@@ -978,7 +984,7 @@ static int preprocess_glob(const char *pattern, int write_fd, int rlevel)
        return write_fd;
 }
 
-static int preprocess(const char *file, int write_fd, int rlevel)
+static int preprocess(const char *cwd, const char *file, int write_fd, int rlevel)
 {
        int read_fd = -1;
        switch_size_t cur = 0, ml = 0;
@@ -1078,7 +1084,7 @@ static int preprocess(const char *file, int write_fd, int rlevel)
                                }
                                
                        } else if (!strcasecmp(tcmd, "include")) {
-                               preprocess_glob(targ, write_fd, rlevel + 1);
+                               preprocess_glob(cwd, targ, write_fd, rlevel + 1);
                        }
 
                        continue;
@@ -1134,7 +1140,7 @@ static int preprocess(const char *file, int write_fd, int rlevel)
                                        }
 
                                } else if (!strcasecmp(cmd, "include")) {
-                                       preprocess_glob(arg, write_fd, rlevel + 1);
+                                       preprocess_glob(cwd, arg, write_fd, rlevel + 1);
                                }
                        }
 
@@ -1192,7 +1198,7 @@ SWITCH_DECLARE(switch_xml_t) switch_xml_parse_file(const char *file)
                goto done;
        }
 
-       if (preprocess(file, write_fd, 0) > -1) {
+       if (preprocess(SWITCH_GLOBAL_dirs.conf_dir, file, write_fd, 0) > -1) {
                close(write_fd);
                write_fd = -1;
                if ((fd = open(new_file, O_RDONLY, 0)) > -1) {