diff options
author | Raul E Rangel <rrangel@chromium.org> | 2019-07-25 16:00:50 -0600 |
---|---|---|
committer | Patrick Georgi <pgeorgi@google.com> | 2019-08-30 10:41:38 +0000 |
commit | d2f90a0659ff1036fd313b37705b04e9e9633b01 (patch) | |
tree | 958c938b88520832b8eacda29a86238cae16587e | |
parent | d12d25227f54ab19a09d064421a9832fa4d9d851 (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>
-rw-r--r-- | util/kconfig/confdata.c | 19 |
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"); |