]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
Make availability of glob(3) optional in settings_t.
authorTobias Brunner <tobias@strongswan.org>
Tue, 22 Mar 2011 18:17:51 +0000 (19:17 +0100)
committerTobias Brunner <tobias@strongswan.org>
Tue, 22 Mar 2011 18:21:26 +0000 (19:21 +0100)
If glob(3) is not available just try to open the pattern as regular
file. The reason for this change is that glob(3) is not available on Android.

configure.in
src/libstrongswan/settings.c

index 2bb79f3453040263a8f35a497d671f1358c03534..6dcf65c4c4fb17fff5fde396d64ad1f61f661c6b 100644 (file)
@@ -348,7 +348,7 @@ AC_CHECK_FUNCS(prctl)
 
 AC_CHECK_FUNCS(mallinfo)
 
-AC_CHECK_HEADERS(sys/sockio.h)
+AC_CHECK_HEADERS(sys/sockio.h glob.h)
 AC_CHECK_HEADERS(net/pfkeyv2.h netipsec/ipsec.h netinet6/ipsec.h linux/udp.h)
 
 AC_CHECK_MEMBERS([struct sockaddr.sa_len], [], [],
index ff2973e55ebef3e567950573344cb84b011ed565..82a24e9973c30bf068eac156529c6366aca42802 100644 (file)
 #include <stdio.h>
 #include <errno.h>
 #include <limits.h>
-#include <glob.h>
 #include <libgen.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <unistd.h>
 
+#ifdef HAVE_GLOB_H
+#include <glob.h>
+#endif /* HAVE_GLOB_H */
+
 #include "settings.h"
 
 #include "debug.h"
@@ -969,16 +972,15 @@ static bool parse_file(linked_list_t *contents, char *file, int level,
 }
 
 /**
- * Load the files matching "pattern", which is resolved with glob(3).
+ * Load the files matching "pattern", which is resolved with glob(3), if
+ * available.
  * If the pattern is relative, the directory of "file" is used as base.
  */
 static bool parse_files(linked_list_t *contents, char *file, int level,
                                                char *pattern, section_t *section)
 {
        bool success = TRUE;
-       int status;
-       glob_t buf;
-       char **expanded, pat[PATH_MAX];
+       char pat[PATH_MAX];
 
        if (level > MAX_INCLUSION_LEVEL)
        {
@@ -1013,28 +1015,39 @@ static bool parse_files(linked_list_t *contents, char *file, int level,
                }
                free(dir);
        }
-       status = glob(pat, GLOB_ERR, NULL, &buf);
-       if (status == GLOB_NOMATCH)
-       {
-               DBG2(DBG_LIB, "no files found matching '%s', ignored", pat);
-       }
-       else if (status != 0)
+#ifdef HAVE_GLOB_H
        {
-               DBG1(DBG_LIB, "expanding file pattern '%s' failed", pat);
-               success = FALSE;
-       }
-       else
-       {
-               for (expanded = buf.gl_pathv; *expanded != NULL; expanded++)
+               int status;
+               glob_t buf;
+
+               status = glob(pat, GLOB_ERR, NULL, &buf);
+               if (status == GLOB_NOMATCH)
                {
-                       success &= parse_file(contents, *expanded, level + 1, section);
-                       if (!success)
+                       DBG2(DBG_LIB, "no files found matching '%s', ignored", pat);
+               }
+               else if (status != 0)
+               {
+                       DBG1(DBG_LIB, "expanding file pattern '%s' failed", pat);
+                       success = FALSE;
+               }
+               else
+               {
+                       char **expanded;
+                       for (expanded = buf.gl_pathv; *expanded != NULL; expanded++)
                        {
-                               break;
+                               success &= parse_file(contents, *expanded, level + 1, section);
+                               if (!success)
+                               {
+                                       break;
+                               }
                        }
                }
+               globfree(&buf);
        }
-       globfree(&buf);
+#else /* HAVE_GLOB_H */
+       /* if glob(3) is not available, try to load pattern directly */
+       success = parse_file(contents, pat, level + 1, section);
+#endif /* HAVE_GLOB_H */
        return success;
 }