linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] kconfig: redo fake deps at include/config/*.h
@ 2021-04-14 22:01 Alexey Dobriyan
  2021-04-15  4:58 ` Masahiro Yamada
  0 siblings, 1 reply; 4+ messages in thread
From: Alexey Dobriyan @ 2021-04-14 22:01 UTC (permalink / raw)
  To: masahiroy; +Cc: linux-kbuild, linux-kernel, akpm

Make include/config/foo/bar.h fake deps files generation simpler.

* delete .h suffix
	those aren't header files, shorten filenames,

* delete tolower()
	Linux filesystems can deal with both upper and lowercase
	filenames very well,

* put everything in 1 directory
	Presumably 'mkdir -p' split is from dark times when filesystems
	handled huge directories badly, disks were round adding to
	seek times.

	x86_64 allmodconfig lists 12364 files in include/config.

	../obj/include/config/
	├── 104_QUAD_8
	├── 60XX_WDT
	├── 64BIT
	├── 6LOWPAN
	├── 6LOWPAN_DEBUGFS
	├── 6LOWPAN_GHC_EXT_HDR_DEST
	├── 6LOWPAN_GHC_EXT_HDR_FRAG
	├── 6LOWPAN_GHC_EXT_HDR_HOP
	├── 6LOWPAN_GHC_EXT_HDR_ROUTE

		...
	├── ZSTD_COMPRESS
	├── ZSTD_DECOMPRESS
	├── ZSWAP
	├── ZSWAP_COMPRESSOR_DEFAULT
	├── ZSWAP_COMPRESSOR_DEFAULT_LZO
	├── ZSWAP_DEFAULT_ON
	├── ZSWAP_ZPOOL_DEFAULT
	└── ZSWAP_ZPOOL_DEFAULT_ZBUD

	0 directories, 12364 files

Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
---

 include/linux/compiler-version.h |    2 +-
 init/Kconfig                     |    2 +-
 scripts/Makefile.build           |    4 ++--
 scripts/basic/fixdep.c           |   30 +++---------------------------
 scripts/kconfig/confdata.c       |   11 +++--------
 5 files changed, 10 insertions(+), 39 deletions(-)

--- a/include/linux/compiler-version.h
+++ b/include/linux/compiler-version.h
@@ -9,6 +9,6 @@
  * This header exists to force full rebuild when the compiler is upgraded.
  *
  * When fixdep scans this, it will find this string "CONFIG_CC_VERSION_TEXT"
- * and add dependency on include/config/cc/version/text.h, which is touched
+ * and add dependency on include/config/CC_VERSION_TEXT, which is touched
  * by Kconfig when the version string from the compiler changes.
  */
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -21,7 +21,7 @@ config CC_VERSION_TEXT
 
 	  - Ensure full rebuild when the compiler is updated
 	    include/linux/compiler-version.h contains this option in the comment
-	    line so fixdep adds include/config/cc/version/text.h into the
+	    line so fixdep adds include/config/CC_VERSION_TEXT into the
 	    auto-generated dependency. When the compiler is updated, syncconfig
 	    will touch it and then every file will be rebuilt.
 
--- a/scripts/Makefile.build
+++ b/scripts/Makefile.build
@@ -238,8 +238,8 @@ endif # CONFIG_STACK_VALIDATION
 
 # Rebuild all objects when objtool changes, or is enabled/disabled.
 objtool_dep = $(objtool_obj)					\
-	      $(wildcard include/config/orc/unwinder.h		\
-			 include/config/stack/validation.h)
+	      $(wildcard include/config/ORC_UNWINDER		\
+			 include/config/STACK_VALIDATION)
 
 ifdef CONFIG_TRIM_UNUSED_KSYMS
 cmd_gen_ksymdeps = \
--- a/scripts/basic/fixdep.c
+++ b/scripts/basic/fixdep.c
@@ -34,7 +34,7 @@
  * the config symbols are rebuilt.
  *
  * So if the user changes his CONFIG_HIS_DRIVER option, only the objects
- * which depend on "include/config/his/driver.h" will be rebuilt,
+ * which depend on "include/config/HIS_DRIVER" will be rebuilt,
  * so most likely only his driver ;-)
  *
  * The idea above dates, by the way, back to Michael E Chastain, AFAIK.
@@ -74,7 +74,7 @@
  *
  * and then basically copies the .<target>.d file to stdout, in the
  * process filtering out the dependency on autoconf.h and adding
- * dependencies on include/config/my/option.h for every
+ * dependencies on include/config/MY_OPTION for every
  * CONFIG_MY_OPTION encountered in any of the prerequisites.
  *
  * We don't even try to really parse the header files, but
@@ -124,36 +124,12 @@ static void xprintf(const char *format, ...)
 	va_end(ap);
 }
 
-static void xputchar(int c)
-{
-	int ret;
-
-	ret = putchar(c);
-	if (ret == EOF) {
-		perror("fixdep");
-		exit(1);
-	}
-}
-
 /*
  * Print out a dependency path from a symbol name
  */
 static void print_dep(const char *m, int slen, const char *dir)
 {
-	int c, prev_c = '/', i;
-
-	xprintf("    $(wildcard %s/", dir);
-	for (i = 0; i < slen; i++) {
-		c = m[i];
-		if (c == '_')
-			c = '/';
-		else
-			c = tolower(c);
-		if (c != '/' || prev_c != '/')
-			xputchar(c);
-		prev_c = c;
-	}
-	xprintf(".h) \\\n");
+	xprintf("    $(wildcard %s/%.*s) \\\n", dir, slen, m);
 }
 
 struct item {
--- a/scripts/kconfig/confdata.c
+++ b/scripts/kconfig/confdata.c
@@ -130,19 +130,14 @@ static size_t depfile_prefix_len;
 static int conf_touch_dep(const char *name)
 {
 	int fd, ret;
-	const char *s;
-	char *d, c;
+	char *d;
 
 	/* check overflow: prefix + name + ".h" + '\0' must fit in buffer. */
 	if (depfile_prefix_len + strlen(name) + 3 > sizeof(depfile_path))
 		return -1;
 
 	d = depfile_path + depfile_prefix_len;
-	s = name;
-
-	while ((c = *s++))
-		*d++ = (c == '_') ? '/' : tolower(c);
-	strcpy(d, ".h");
+	strcpy(d, name);
 
 	/* Assume directory path already exists. */
 	fd = open(depfile_path, O_WRONLY | O_CREAT | O_TRUNC, 0644);
@@ -465,7 +460,7 @@ int conf_read_simple(const char *name, int def)
 					 * Reading from include/config/auto.conf
 					 * If CONFIG_FOO previously existed in
 					 * auto.conf but it is missing now,
-					 * include/config/foo.h must be touched.
+					 * include/config/FOO must be touched.
 					 */
 					conf_touch_dep(line + strlen(CONFIG_));
 				else

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] kconfig: redo fake deps at include/config/*.h
  2021-04-14 22:01 [PATCH] kconfig: redo fake deps at include/config/*.h Alexey Dobriyan
@ 2021-04-15  4:58 ` Masahiro Yamada
  2021-04-15 17:36   ` [PATCH v2] " Alexey Dobriyan
  0 siblings, 1 reply; 4+ messages in thread
From: Masahiro Yamada @ 2021-04-15  4:58 UTC (permalink / raw)
  To: Alexey Dobriyan
  Cc: Linux Kbuild mailing list, Linux Kernel Mailing List, Andrew Morton

On Thu, Apr 15, 2021 at 7:01 AM Alexey Dobriyan <adobriyan@gmail.com> wrote:
>
> Make include/config/foo/bar.h fake deps files generation simpler.
>
> * delete .h suffix
>         those aren't header files, shorten filenames,
>
> * delete tolower()
>         Linux filesystems can deal with both upper and lowercase
>         filenames very well,
>
> * put everything in 1 directory
>         Presumably 'mkdir -p' split is from dark times when filesystems
>         handled huge directories badly, disks were round adding to
>         seek times.


I am not sure about the impact of this change
given various file systems in the wild,
but this simplification is attractive.

With a quick search, I found a comment
'performance issues past 10,000' on ext2  [1]
but that may not be what we care about much...

[1]: https://webmasters.stackexchange.com/questions/99539/what-is-a-recommended-maximum-number-of-files-in-a-directory-on-your-webserver





> @@ -124,36 +124,12 @@ static void xprintf(const char *format, ...)
>         va_end(ap);
>  }
>
> -static void xputchar(int c)
> -{
> -       int ret;
> -
> -       ret = putchar(c);
> -       if (ret == EOF) {
> -               perror("fixdep");
> -               exit(1);
> -       }
> -}
> -
>  /*
>   * Print out a dependency path from a symbol name
>   */
>  static void print_dep(const char *m, int slen, const char *dir)
>  {
> -       int c, prev_c = '/', i;
> -
> -       xprintf("    $(wildcard %s/", dir);
> -       for (i = 0; i < slen; i++) {
> -               c = m[i];
> -               if (c == '_')
> -                       c = '/';
> -               else
> -                       c = tolower(c);
> -               if (c != '/' || prev_c != '/')
> -                       xputchar(c);
> -               prev_c = c;
> -       }
> -       xprintf(".h) \\\n");
> +       xprintf("    $(wildcard %s/%.*s) \\\n", dir, slen, m);



Since this function now contains just one line,
can you hard-code

    xprintf("    $(wildcard include/config/%.*s) \\\n", slen, m);

in use_config() ?



>  }
>
>  struct item {
> --- a/scripts/kconfig/confdata.c
> +++ b/scripts/kconfig/confdata.c
> @@ -130,19 +130,14 @@ static size_t depfile_prefix_len;
>  static int conf_touch_dep(const char *name)
>  {
>         int fd, ret;
> -       const char *s;
> -       char *d, c;
> +       char *d;
>
>         /* check overflow: prefix + name + ".h" + '\0' must fit in buffer. */
>         if (depfile_prefix_len + strlen(name) + 3 > sizeof(depfile_path))

Since you dropped the ".h" suffix,
please fix up this line.





Also, you can fix

  # changed, Kconfig touches the corresponding timestamp file
include/config/*.h.

in kernel/gen_kheaders.sh





>                 return -1;
>
>         d = depfile_path + depfile_prefix_len;
> -       s = name;
> -
> -       while ((c = *s++))
> -               *d++ = (c == '_') ? '/' : tolower(c);
> -       strcpy(d, ".h");
> +       strcpy(d, name);
>
>         /* Assume directory path already exists. */
>         fd = open(depfile_path, O_WRONLY | O_CREAT | O_TRUNC, 0644);
> @@ -465,7 +460,7 @@ int conf_read_simple(const char *name, int def)
>                                          * Reading from include/config/auto.conf
>                                          * If CONFIG_FOO previously existed in
>                                          * auto.conf but it is missing now,
> -                                        * include/config/foo.h must be touched.
> +                                        * include/config/FOO must be touched.
>                                          */
>                                         conf_touch_dep(line + strlen(CONFIG_));
>                                 else



--
Best Regards
Masahiro Yamada

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH v2] kconfig: redo fake deps at include/config/*.h
  2021-04-15  4:58 ` Masahiro Yamada
@ 2021-04-15 17:36   ` Alexey Dobriyan
  2021-04-16  5:57     ` Masahiro Yamada
  0 siblings, 1 reply; 4+ messages in thread
From: Alexey Dobriyan @ 2021-04-15 17:36 UTC (permalink / raw)
  To: Masahiro Yamada; +Cc: linux-kbuild, linux-kernel, Andrew Morton

Make include/config/foo/bar.h fake deps files generation simpler.

* delete .h suffix
	those aren't header files, shorten filenames,

* delete tolower()
	Linux filesystems can deal with both upper and lowercase
	filenames very well,

* put everything in 1 directory
	Presumably 'mkdir -p' split is from dark times when filesystems
	handled huge directories badly, disks were round adding to
	seek times.

	x86_64 allmodconfig lists 12364 files in include/config.

	../obj/include/config/
	├── 104_QUAD_8
	├── 60XX_WDT
	├── 64BIT
		...
	├── ZSWAP_DEFAULT_ON
	├── ZSWAP_ZPOOL_DEFAULT
	└── ZSWAP_ZPOOL_DEFAULT_ZBUD

	0 directories, 12364 files

Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
---

 include/linux/compiler-version.h |    2 +-
 init/Kconfig                     |    2 +-
 kernel/gen_kheaders.sh           |    2 +-
 scripts/Makefile.build           |    4 ++--
 scripts/basic/fixdep.c           |   39 ++++-----------------------------------
 scripts/kconfig/confdata.c       |   15 +++++----------
 6 files changed, 14 insertions(+), 50 deletions(-)

--- a/include/linux/compiler-version.h
+++ b/include/linux/compiler-version.h
@@ -9,6 +9,6 @@
  * This header exists to force full rebuild when the compiler is upgraded.
  *
  * When fixdep scans this, it will find this string "CONFIG_CC_VERSION_TEXT"
- * and add dependency on include/config/cc/version/text.h, which is touched
+ * and add dependency on include/config/CC_VERSION_TEXT, which is touched
  * by Kconfig when the version string from the compiler changes.
  */
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -21,7 +21,7 @@ config CC_VERSION_TEXT
 
 	  - Ensure full rebuild when the compiler is updated
 	    include/linux/compiler-version.h contains this option in the comment
-	    line so fixdep adds include/config/cc/version/text.h into the
+	    line so fixdep adds include/config/CC_VERSION_TEXT into the
 	    auto-generated dependency. When the compiler is updated, syncconfig
 	    will touch it and then every file will be rebuilt.
 
--- a/kernel/gen_kheaders.sh
+++ b/kernel/gen_kheaders.sh
@@ -36,7 +36,7 @@ all_dirs="$all_dirs $dir_list"
 #
 # When Kconfig regenerates include/generated/autoconf.h, its timestamp is
 # updated, but the contents might be still the same. When any CONFIG option is
-# changed, Kconfig touches the corresponding timestamp file include/config/*.h.
+# changed, Kconfig touches the corresponding timestamp file include/config/*.
 # Hence, the md5sum detects the configuration change anyway. We do not need to
 # check include/generated/autoconf.h explicitly.
 #
--- a/scripts/Makefile.build
+++ b/scripts/Makefile.build
@@ -238,8 +238,8 @@ endif # CONFIG_STACK_VALIDATION
 
 # Rebuild all objects when objtool changes, or is enabled/disabled.
 objtool_dep = $(objtool_obj)					\
-	      $(wildcard include/config/orc/unwinder.h		\
-			 include/config/stack/validation.h)
+	      $(wildcard include/config/ORC_UNWINDER		\
+			 include/config/STACK_VALIDATION)
 
 ifdef CONFIG_TRIM_UNUSED_KSYMS
 cmd_gen_ksymdeps = \
--- a/scripts/basic/fixdep.c
+++ b/scripts/basic/fixdep.c
@@ -34,7 +34,7 @@
  * the config symbols are rebuilt.
  *
  * So if the user changes his CONFIG_HIS_DRIVER option, only the objects
- * which depend on "include/config/his/driver.h" will be rebuilt,
+ * which depend on "include/config/HIS_DRIVER" will be rebuilt,
  * so most likely only his driver ;-)
  *
  * The idea above dates, by the way, back to Michael E Chastain, AFAIK.
@@ -74,7 +74,7 @@
  *
  * and then basically copies the .<target>.d file to stdout, in the
  * process filtering out the dependency on autoconf.h and adding
- * dependencies on include/config/my/option.h for every
+ * dependencies on include/config/MY_OPTION for every
  * CONFIG_MY_OPTION encountered in any of the prerequisites.
  *
  * We don't even try to really parse the header files, but
@@ -124,38 +124,6 @@ static void xprintf(const char *format, ...)
 	va_end(ap);
 }
 
-static void xputchar(int c)
-{
-	int ret;
-
-	ret = putchar(c);
-	if (ret == EOF) {
-		perror("fixdep");
-		exit(1);
-	}
-}
-
-/*
- * Print out a dependency path from a symbol name
- */
-static void print_dep(const char *m, int slen, const char *dir)
-{
-	int c, prev_c = '/', i;
-
-	xprintf("    $(wildcard %s/", dir);
-	for (i = 0; i < slen; i++) {
-		c = m[i];
-		if (c == '_')
-			c = '/';
-		else
-			c = tolower(c);
-		if (c != '/' || prev_c != '/')
-			xputchar(c);
-		prev_c = c;
-	}
-	xprintf(".h) \\\n");
-}
-
 struct item {
 	struct item	*next;
 	unsigned int	len;
@@ -220,7 +188,8 @@ static void use_config(const char *m, int slen)
 	    return;
 
 	define_config(m, slen, hash);
-	print_dep(m, slen, "include/config");
+	/* Print out a dependency path from a symbol name. */
+	xprintf("    $(wildcard include/config/%.*s) \\\n", slen, m);
 }
 
 /* test if s ends in sub */
--- a/scripts/kconfig/confdata.c
+++ b/scripts/kconfig/confdata.c
@@ -130,19 +130,14 @@ static size_t depfile_prefix_len;
 static int conf_touch_dep(const char *name)
 {
 	int fd, ret;
-	const char *s;
-	char *d, c;
+	char *d;
 
-	/* check overflow: prefix + name + ".h" + '\0' must fit in buffer. */
-	if (depfile_prefix_len + strlen(name) + 3 > sizeof(depfile_path))
+	/* check overflow: prefix + name + '\0' must fit in buffer. */
+	if (depfile_prefix_len + strlen(name) + 1 > sizeof(depfile_path))
 		return -1;
 
 	d = depfile_path + depfile_prefix_len;
-	s = name;
-
-	while ((c = *s++))
-		*d++ = (c == '_') ? '/' : tolower(c);
-	strcpy(d, ".h");
+	strcpy(d, name);
 
 	/* Assume directory path already exists. */
 	fd = open(depfile_path, O_WRONLY | O_CREAT | O_TRUNC, 0644);
@@ -465,7 +460,7 @@ int conf_read_simple(const char *name, int def)
 					 * Reading from include/config/auto.conf
 					 * If CONFIG_FOO previously existed in
 					 * auto.conf but it is missing now,
-					 * include/config/foo.h must be touched.
+					 * include/config/FOO must be touched.
 					 */
 					conf_touch_dep(line + strlen(CONFIG_));
 				else

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v2] kconfig: redo fake deps at include/config/*.h
  2021-04-15 17:36   ` [PATCH v2] " Alexey Dobriyan
@ 2021-04-16  5:57     ` Masahiro Yamada
  0 siblings, 0 replies; 4+ messages in thread
From: Masahiro Yamada @ 2021-04-16  5:57 UTC (permalink / raw)
  To: Alexey Dobriyan
  Cc: Linux Kbuild mailing list, Linux Kernel Mailing List, Andrew Morton

On Fri, Apr 16, 2021 at 2:36 AM Alexey Dobriyan <adobriyan@gmail.com> wrote:
>
> Make include/config/foo/bar.h fake deps files generation simpler.
>
> * delete .h suffix
>         those aren't header files, shorten filenames,
>
> * delete tolower()
>         Linux filesystems can deal with both upper and lowercase
>         filenames very well,
>
> * put everything in 1 directory
>         Presumably 'mkdir -p' split is from dark times when filesystems
>         handled huge directories badly, disks were round adding to
>         seek times.
>
>         x86_64 allmodconfig lists 12364 files in include/config.
>
>         ../obj/include/config/
>         ├── 104_QUAD_8
>         ├── 60XX_WDT
>         ├── 64BIT
>                 ...
>         ├── ZSWAP_DEFAULT_ON
>         ├── ZSWAP_ZPOOL_DEFAULT
>         └── ZSWAP_ZPOOL_DEFAULT_ZBUD
>
>         0 directories, 12364 files
>
> Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
> ---
>
>  include/linux/compiler-version.h |    2 +-
>  init/Kconfig                     |    2 +-
>  kernel/gen_kheaders.sh           |    2 +-
>  scripts/Makefile.build           |    4 ++--
>  scripts/basic/fixdep.c           |   39 ++++-----------------------------------
>  scripts/kconfig/confdata.c       |   15 +++++----------
>  6 files changed, 14 insertions(+), 50 deletions(-)
>
> --- a/include/linux/compiler-version.h
> +++ b/include/linux/compiler-version.h
> @@ -9,6 +9,6 @@
>   * This header exists to force full rebuild when the compiler is upgraded.
>   *
>   * When fixdep scans this, it will find this string "CONFIG_CC_VERSION_TEXT"
> - * and add dependency on include/config/cc/version/text.h, which is touched
> + * and add dependency on include/config/CC_VERSION_TEXT, which is touched
>   * by Kconfig when the version string from the compiler changes.
>   */
> --- a/init/Kconfig
> +++ b/init/Kconfig
> @@ -21,7 +21,7 @@ config CC_VERSION_TEXT
>
>           - Ensure full rebuild when the compiler is updated
>             include/linux/compiler-version.h contains this option in the comment
> -           line so fixdep adds include/config/cc/version/text.h into the
> +           line so fixdep adds include/config/CC_VERSION_TEXT into the
>             auto-generated dependency. When the compiler is updated, syncconfig
>             will touch it and then every file will be rebuilt.
>
> --- a/kernel/gen_kheaders.sh
> +++ b/kernel/gen_kheaders.sh
> @@ -36,7 +36,7 @@ all_dirs="$all_dirs $dir_list"
>  #
>  # When Kconfig regenerates include/generated/autoconf.h, its timestamp is
>  # updated, but the contents might be still the same. When any CONFIG option is
> -# changed, Kconfig touches the corresponding timestamp file include/config/*.h.
> +# changed, Kconfig touches the corresponding timestamp file include/config/*.
>  # Hence, the md5sum detects the configuration change anyway. We do not need to
>  # check include/generated/autoconf.h explicitly.
>  #
> --- a/scripts/Makefile.build
> +++ b/scripts/Makefile.build
> @@ -238,8 +238,8 @@ endif # CONFIG_STACK_VALIDATION
>
>  # Rebuild all objects when objtool changes, or is enabled/disabled.
>  objtool_dep = $(objtool_obj)                                   \
> -             $(wildcard include/config/orc/unwinder.h          \
> -                        include/config/stack/validation.h)
> +             $(wildcard include/config/ORC_UNWINDER            \
> +                        include/config/STACK_VALIDATION)
>
>  ifdef CONFIG_TRIM_UNUSED_KSYMS
>  cmd_gen_ksymdeps = \
> --- a/scripts/basic/fixdep.c
> +++ b/scripts/basic/fixdep.c
> @@ -34,7 +34,7 @@
>   * the config symbols are rebuilt.
>   *
>   * So if the user changes his CONFIG_HIS_DRIVER option, only the objects
> - * which depend on "include/config/his/driver.h" will be rebuilt,
> + * which depend on "include/config/HIS_DRIVER" will be rebuilt,
>   * so most likely only his driver ;-)
>   *
>   * The idea above dates, by the way, back to Michael E Chastain, AFAIK.
> @@ -74,7 +74,7 @@
>   *
>   * and then basically copies the .<target>.d file to stdout, in the
>   * process filtering out the dependency on autoconf.h and adding
> - * dependencies on include/config/my/option.h for every
> + * dependencies on include/config/MY_OPTION for every
>   * CONFIG_MY_OPTION encountered in any of the prerequisites.
>   *
>   * We don't even try to really parse the header files, but
> @@ -124,38 +124,6 @@ static void xprintf(const char *format, ...)
>         va_end(ap);
>  }
>
> -static void xputchar(int c)
> -{
> -       int ret;
> -
> -       ret = putchar(c);
> -       if (ret == EOF) {
> -               perror("fixdep");
> -               exit(1);
> -       }
> -}
> -



Applied to linux-kbuild.

I just found one more minor thing to fix up.

fixdep no longer calls putchar(), so I squashed the following:




diff --git a/scripts/basic/fixdep.c b/scripts/basic/fixdep.c
index 5bee6a80992f..44e887cff49b 100644
--- a/scripts/basic/fixdep.c
+++ b/scripts/basic/fixdep.c
@@ -107,8 +107,8 @@ static void usage(void)

 /*
  * In the intended usage of this program, the stdout is redirected to .*.cmd
- * files. The return value of printf() and putchar() must be checked to catch
- * any error, e.g. "No space left on device".
+ * files. The return value of printf() must be checked to catch any error,
+ * e.g. "No space left on device".
  */
 static void xprintf(const char *format, ...)
 {




-- 
Best Regards
Masahiro Yamada

^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2021-04-16  5:58 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-14 22:01 [PATCH] kconfig: redo fake deps at include/config/*.h Alexey Dobriyan
2021-04-15  4:58 ` Masahiro Yamada
2021-04-15 17:36   ` [PATCH v2] " Alexey Dobriyan
2021-04-16  5:57     ` Masahiro Yamada

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).