kconfig: refactor conf_write_dep()
authorMasahiro Yamada <masahiroy@kernel.org>
Fri, 1 Oct 2021 05:32:51 +0000 (14:32 +0900)
committerMasahiro Yamada <masahiroy@kernel.org>
Mon, 11 Oct 2021 14:13:23 +0000 (23:13 +0900)
The if ... else inside the for-loop is unneeded because one empty
line is placed after printing the last element of deps_config.

Currently, all errors in conf_write_dep() are ignored. Add proper
error checks.

Rename it to conf_write_autoconf_cmd(), which is more intuitive.

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

index 7301f4b2f4d58415c836721c2ef2e4c8a09b2565..6ac53bf7aa64927777f338361975f221bc55e6de 100644 (file)
@@ -957,32 +957,50 @@ next:
 }
 
 /* write a dependency file as used by kbuild to track dependencies */
-static int conf_write_dep(const char *name)
+static int conf_write_autoconf_cmd(const char *autoconf_name)
 {
+       char name[PATH_MAX], tmp[PATH_MAX];
        struct file *file;
        FILE *out;
+       int ret;
 
-       out = fopen("..config.tmp", "w");
-       if (!out)
-               return 1;
-       fprintf(out, "deps_config := \\\n");
-       for (file = file_list; file; file = file->next) {
-               if (file->next)
-                       fprintf(out, "\t%s \\\n", file->name);
-               else
-                       fprintf(out, "\t%s\n", file->name);
+       ret = snprintf(name, sizeof(name), "%s.cmd", autoconf_name);
+       if (ret >= sizeof(name)) /* check truncation */
+               return -1;
+
+       if (make_parent_dir(name))
+               return -1;
+
+       ret = snprintf(tmp, sizeof(tmp), "%s.cmd.tmp", autoconf_name);
+       if (ret >= sizeof(tmp)) /* check truncation */
+               return -1;
+
+       out = fopen(tmp, "w");
+       if (!out) {
+               perror("fopen");
+               return -1;
        }
-       fprintf(out, "\n%s: \\\n"
-                    "\t$(deps_config)\n\n", conf_get_autoconfig_name());
 
-       env_write_dep(out, conf_get_autoconfig_name());
+       fprintf(out, "deps_config := \\\n");
+       for (file = file_list; file; file = file->next)
+               fprintf(out, "\t%s \\\n", file->name);
+
+       fprintf(out, "\n%s: $(deps_config)\n\n", autoconf_name);
+
+       env_write_dep(out, autoconf_name);
 
        fprintf(out, "\n$(deps_config): ;\n");
+
+       if (ferror(out)) /* error check for all fprintf() calls */
+               return -1;
+
        fclose(out);
 
-       if (make_parent_dir(name))
-               return 1;
-       rename("..config.tmp", name);
+       if (rename(tmp, name)) {
+               perror("rename");
+               return -1;
+       }
+
        return 0;
 }
 
@@ -1109,7 +1127,9 @@ int conf_write_autoconf(int overwrite)
        if (!overwrite && is_present(autoconf_name))
                return 0;
 
-       conf_write_dep("include/config/auto.conf.cmd");
+       ret = conf_write_autoconf_cmd(autoconf_name);
+       if (ret)
+               return -1;
 
        if (conf_touch_deps())
                return 1;