summaryrefslogtreecommitdiff
path: root/util/kconfig/confdata.c
diff options
context:
space:
mode:
authorRaul E Rangel <rrangel@chromium.org>2019-07-25 16:00:50 -0600
committerPatrick Georgi <pgeorgi@google.com>2019-08-30 10:41:38 +0000
commitd2f90a0659ff1036fd313b37705b04e9e9633b01 (patch)
tree958c938b88520832b8eacda29a86238cae16587e /util/kconfig/confdata.c
parentd12d25227f54ab19a09d064421a9832fa4d9d851 (diff)
kconfig: Use config's full path when generating tmp file
If KCONFIG_CONFIG is set to a full path, we should generate the tmp file in the same directory instead of the current working directory. BUG=b:112267918 TEST=emerge-grunt coreboot and verified with print statements that the correct path was used. Change-Id: Ia21e930a9b0a693f851c34bcde26b34886cbe902 Signed-off-by: Raul E Rangel <rrangel@chromium.org> Reviewed-on: https://review.coreboot.org/c/coreboot/+/34243 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Martin Roth <martinroth@google.com>
Diffstat (limited to 'util/kconfig/confdata.c')
-rw-r--r--util/kconfig/confdata.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/util/kconfig/confdata.c b/util/kconfig/confdata.c
index fc4a07a933..3c0818aaae 100644
--- a/util/kconfig/confdata.c
+++ b/util/kconfig/confdata.c
@@ -769,7 +769,7 @@ int conf_write(const char *name)
FILE *out;
struct symbol *sym;
struct menu *menu;
- const char *basename;
+ const char *basename = NULL;
const char *str;
char dirname[PATH_MAX+1], tmpname[PATH_MAX+1], newname[PATH_MAX+1];
char *env;
@@ -777,13 +777,20 @@ int conf_write(const char *name)
dirname[0] = 0;
if (name && name[0]) {
struct stat st;
- char *slash;
if (!stat(name, &st) && S_ISDIR(st.st_mode)) {
strcpy(dirname, name);
strcat(dirname, "/");
basename = conf_get_configname();
- } else if ((slash = strrchr(name, '/'))) {
+ }
+ } else {
+ name = conf_get_configname();
+ }
+
+ if (!basename) {
+ char *slash = strrchr(name, '/');
+
+ if (slash) {
int size = slash - name + 1;
memcpy(dirname, name, size);
dirname[size] = 0;
@@ -791,10 +798,10 @@ int conf_write(const char *name)
basename = slash + 1;
else
basename = conf_get_configname();
- } else
+ } else {
basename = name;
- } else
- basename = conf_get_configname();
+ }
+ }
sprintf(newname, "%s%s", dirname, basename);
env = getenv("KCONFIG_OVERWRITECONFIG");