From b56296212c27071f06d98cdad6b32b7db583adb0 Mon Sep 17 00:00:00 2001 From: Baruch Siach Date: Sun, 13 Apr 2014 15:26:46 +0300 Subject: [PATCH 1/1] Fix rpmatch() call under uClibc and musl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The current uClibc 0.9.33 and the musl C library do not implement rpmatch(). Combine two upstream uClibc patches (commit 50c9e11f7e and 5923077649) and a musl patch sent to the mailing list (http://patchwork.ozlabs.org/patch/464074/). include/common.h: fix build against current uClibc Commit dbe0fd17f2 (mtd-utils: new prompt() helper for talking to the user) introduced a rpmatch() call. However, uClibc versions older than (not yet released) 0.9.34 don't have rpmatch() implementation. Add one. Signed-off-by: Baruch Siach Signed-off-by: Artem Bityutskiy Acked-by: Mike Frysinger include/common.h: fix build against recent 0.9.33 uClibc An implementation of rpmatch() was backported to the 0.9.33 branch of uClibc. So the uClibc version check introduced in commit 50c9e11f7e (include/common.h: fix build against current uClibc) is not enough. Rename the local rpmatch() implementation to avoid collision. Signed-off-by: Baruch Siach Acked-by: Mike Frysinger Signed-off-by: Brian Norris include/common.h: fix build against musl Like uClibc version older than (not yet released) 0.9.34 musl does not have a rpmatch() implementation. uClibc defines both __UCLIBC__ and __GLIBC__. So first check for uCibc and its version and then for a non glibc implementation (like musl). Note, musl does not define __MUSL__. Signed-off-by: Jörg Krause --- include/common.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/include/common.h b/include/common.h index 4ffccea..944c712 100644 --- a/include/common.h +++ b/include/common.h @@ -102,6 +102,21 @@ extern "C" { fprintf(stderr, "%s: warning!: " fmt "\n", PROGRAM_NAME, ##__VA_ARGS__); \ } while(0) +/* uClibc versions before 0.9.34 and musl don't have rpmatch() */ +#if defined(__UCLIBC__) && \ + (__UCLIBC_MAJOR__ == 0 && \ + (__UCLIBC_MINOR__ < 9 || \ + (__UCLIBC_MINOR__ == 9 && __UCLIBC_SUBLEVEL__ < 34))) || \ + !defined(__GLIBC__) +#undef rpmatch +#define rpmatch __rpmatch +static inline int __rpmatch(const char *resp) +{ + return (resp[0] == 'y' || resp[0] == 'Y') ? 1 : + (resp[0] == 'n' || resp[0] == 'N') ? 0 : -1; +} +#endif + /** * prompt the user for confirmation */ -- 2.3.6