diff options
Diffstat (limited to 'package/config')
-rw-r--r-- | package/config/confdata.c | 25 | ||||
-rw-r--r-- | package/config/kconfig-to-buildroot2.patch | 57 |
2 files changed, 77 insertions, 5 deletions
diff --git a/package/config/confdata.c b/package/config/confdata.c index c19b6ffed..0098a08ee 100644 --- a/package/config/confdata.c +++ b/package/config/confdata.c @@ -11,6 +11,7 @@ #include <string.h> #include <time.h> #include <unistd.h> +#include <libgen.h> #define LKC_DIRECT_LINK #include "lkc.h" @@ -529,7 +530,7 @@ int conf_write(const char *name) int conf_split_config(void) { - char *name, path[128]; + char *name, path[128], *opwd, *dir, *_name; char *s, *d, c; struct symbol *sym; struct stat sb; @@ -540,8 +541,20 @@ int conf_split_config(void) name = "include/config/auto.conf"; conf_read_simple(name, S_DEF_AUTO); - if (chdir("include/config")) + opwd = malloc(256); + _name = strdup(name); + if (opwd == NULL || _name == NULL) return 1; + opwd = getcwd(opwd, 256); + dir = dirname(_name); + if (dir == NULL) { + res = 1; + goto err; + } + if (chdir(dir)) { + res = 1; + goto err; + } res = 0; for_all_symbols(i, sym) { @@ -634,9 +647,11 @@ int conf_split_config(void) close(fd); } out: - if (chdir("../..")) - return 1; - + if (chdir(opwd)) + res = 1; +err: + free(opwd); + free(_name); return res; } diff --git a/package/config/kconfig-to-buildroot2.patch b/package/config/kconfig-to-buildroot2.patch index 94eae856b..361174a57 100644 --- a/package/config/kconfig-to-buildroot2.patch +++ b/package/config/kconfig-to-buildroot2.patch @@ -667,3 +667,60 @@ Index: confdata.c if (conf_split_config()) return 1; +diff -rdup x/config/confdata.c package/config/confdata.c +--- x/config/confdata.c 2007-07-07 11:13:12.000000000 +0200 ++++ package/config/confdata.c 2007-07-08 01:30:44.000000000 +0200 +@@ -11,6 +11,7 @@ + #include <string.h> + #include <time.h> + #include <unistd.h> ++#include <libgen.h> + + #define LKC_DIRECT_LINK + #include "lkc.h" +@@ -529,7 +530,7 @@ int conf_write(const char *name) + + int conf_split_config(void) + { +- char *name, path[128]; ++ char *name, path[128], *opwd, *dir, *_name; + char *s, *d, c; + struct symbol *sym; + struct stat sb; +@@ -540,8 +541,20 @@ int conf_split_config(void) + name = "include/config/auto.conf"; + conf_read_simple(name, S_DEF_AUTO); + +- if (chdir("include/config")) ++ opwd = malloc(256); ++ _name = strdup(name); ++ if (opwd == NULL || _name == NULL) + return 1; ++ opwd = getcwd(opwd, 256); ++ dir = dirname(_name); ++ if (dir == NULL) { ++ res = 1; ++ goto err; ++ } ++ if (chdir(dir)) { ++ res = 1; ++ goto err; ++ } + + res = 0; + for_all_symbols(i, sym) { +@@ -634,9 +647,11 @@ int conf_split_config(void) + close(fd); + } + out: +- if (chdir("../..")) +- return 1; +- ++ if (chdir(opwd)) ++ res = 1; ++err: ++ free(opwd); ++ free(_name); + return res; + } + |