From be366e5afac1d9f5b3958bd3899a389308d5d9d3 Mon Sep 17 00:00:00 2001 From: Ron Yorston Date: Thu, 27 Jul 2017 13:53:39 +0100 Subject: ash: support platforms that don't have '%m' printf specifier The '%m' conversion specifier prints an error message based on the current value of 'errno'. It is available in the GNU C library, Cygwin (since 2012), uClibc and musl. It is not available in various BSDs, BSD-derived systems (MacOS, Android) or Microsoft Windows. Use a symbol defined in platform.h to control how error messages can be formatted to display the 'errno' message. On platforms that support it use '%m'; on other platforms use '%s' and strerror(). On platforms that have '%m' there is essentially no change in the size of the binary. Otherwise: function old new delta redirect 1287 1310 +23 xtcsetpgrp 27 44 +17 dup2_or_raise 34 51 +17 setinputfile 267 275 +8 .rodata 163379 163371 -8 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 4/1 up/down: 65/-8) Total: 57 bytes Signed-off-by: Ron Yorston Signed-off-by: Denys Vlasenko --- include/platform.h | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'include') diff --git a/include/platform.h b/include/platform.h index ea49c7e92..b81c59d4e 100644 --- a/include/platform.h +++ b/include/platform.h @@ -406,6 +406,7 @@ typedef unsigned smalluint; #define HAVE_MNTENT_H 1 #define HAVE_NET_ETHERNET_H 1 #define HAVE_SYS_STATFS_H 1 +#define HAVE_PRINTF_PERCENTM 1 #if defined(__UCLIBC__) # if UCLIBC_VERSION < KERNEL_VERSION(0, 9, 32) @@ -461,6 +462,7 @@ typedef unsigned smalluint; # undef HAVE_DPRINTF # undef HAVE_UNLOCKED_STDIO # undef HAVE_UNLOCKED_LINE_OPS +# undef HAVE_PRINTF_PERCENTM #endif #if defined(__dietlibc__) @@ -483,6 +485,7 @@ typedef unsigned smalluint; # undef HAVE_STRVERSCMP # undef HAVE_XTABS # undef HAVE_UNLOCKED_LINE_OPS +# undef HAVE_PRINTF_PERCENTM # include # if __FreeBSD_version < 1000029 # undef HAVE_STRCHRNUL /* FreeBSD added strchrnul() between 1000028 and 1000029 */ @@ -517,6 +520,7 @@ typedef unsigned smalluint; # undef HAVE_STRVERSCMP # undef HAVE_UNLOCKED_LINE_OPS # undef HAVE_NET_ETHERNET_H +# undef HAVE_PRINTF_PERCENTM #endif /* -- cgit v1.2.3