kconfig: make file::name a flexible array member
authorMasahiro Yamada <masahiroy@kernel.org>
Fri, 2 Feb 2024 15:58:15 +0000 (00:58 +0900)
committerMasahiro Yamada <masahiroy@kernel.org>
Mon, 19 Feb 2024 09:20:41 +0000 (18:20 +0900)
Call malloc() just once to allocate needed memory.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
scripts/kconfig/expr.h
scripts/kconfig/util.c

index 85e0d1ab3c8ad055f8e6f63e2aafbd99f8b1679a..760b1e681b4339ef6a63dd7e136c7cbac74675b3 100644 (file)
@@ -19,7 +19,7 @@ extern "C" {
 
 struct file {
        struct file *next;
-       const char *name;
+       char name[];
 };
 
 typedef enum tristate {
index 958543bb0a37a936349be2e8c509d8fc3ab40557..2636dccea0c9a84670bf6dfcc48b14c4dcf16d80 100644 (file)
@@ -13,6 +13,7 @@
 struct file *file_lookup(const char *name)
 {
        struct file *file;
+       size_t len;
 
        for (file = file_list; file; file = file->next) {
                if (!strcmp(name, file->name)) {
@@ -20,9 +21,11 @@ struct file *file_lookup(const char *name)
                }
        }
 
-       file = xmalloc(sizeof(*file));
+       len = strlen(name);
+       file = xmalloc(sizeof(*file) + len + 1);
        memset(file, 0, sizeof(*file));
-       file->name = xstrdup(name);
+       memcpy(file->name, name, len);
+       file->name[len] = '\0';
        file->next = file_list;
        file_list = file;