From 7cfecc4b36c5bd6e1e85fe8851ebd90fe1edb8f4 Mon Sep 17 00:00:00 2001 From: Denis Vlasenko Date: Mon, 18 Dec 2006 22:32:45 +0000 Subject: [PATCH] xfuncs.c: dietlibc actually HAS fdprintf! platform.h: define strchrnul for dietlibc ash: stop using few non-standard functions --- include/platform.h | 13 +++++++++++-- libbb/xfuncs.c | 4 ++-- shell/ash.c | 20 +++++++++++--------- 3 files changed, 24 insertions(+), 13 deletions(-) diff --git a/include/platform.h b/include/platform.h index 860143f7f..1cc978288 100644 --- a/include/platform.h +++ b/include/platform.h @@ -193,9 +193,18 @@ typedef unsigned long long int uintmax_t; /* Platforms that haven't got dprintf need to implement fdprintf() in * libbb. This would require a platform.c. It's not going to be cleaned * out of the tree, so stop saying it should be. */ +#if !defined(__dietlibc__) +/* Needed for: glibc */ +/* Not needed for: dietlibc */ +/* Others: ?? (add as needed) */ #define fdprintf dprintf -#ifdef __dietlibc__ -int dprintf(int fd, const char *format, ...); +#endif + +#if defined(__dietlibc__) +static ATTRIBUTE_ALWAYS_INLINE char* strchrnul(const char *s, char c) { + while (*s && *s != c) ++s; + return (char*)s; +} #endif /* Don't use lchown with glibc older than 2.1.x ... uC-libc lacks it */ diff --git a/libbb/xfuncs.c b/libbb/xfuncs.c index 4790aa140..9efccc542 100644 --- a/libbb/xfuncs.c +++ b/libbb/xfuncs.c @@ -411,8 +411,8 @@ char *xasprintf(const char *format, ...) return string_ptr; } -#ifdef __dietlibc__ -int dprintf(int fd, const char *format, ...) +#if 0 /* If we will ever meet a libc which hasn't [f]dprintf... */ +int fdprintf(int fd, const char *format, ...) { va_list p; int r; diff --git a/shell/ash.c b/shell/ash.c index 2f7cc868a..ae5182ad1 100644 --- a/shell/ash.c +++ b/shell/ash.c @@ -5851,7 +5851,7 @@ _rmescapes(char *str, int flag) } q = r; if (len > 0) { - q = mempcpy(q, str, len); + q = memcpy(q, str, len) + len; } } inquotes = (flag & RMESCAPE_QUOTED) ^ RMESCAPE_QUOTED; @@ -8433,7 +8433,7 @@ char * stnputs(const char *s, size_t n, char *p) { p = makestrspace(n, p); - p = mempcpy(p, s, n); + p = memcpy(p, s, n) + n; return p; } @@ -8517,7 +8517,7 @@ single_quote(const char *s) { q = p = makestrspace(len + 3, p); *q++ = '\''; - q = mempcpy(q, s, len); + q = memcpy(q, s, len) + len; *q++ = '\''; s += len; @@ -8530,7 +8530,7 @@ single_quote(const char *s) { q = p = makestrspace(len + 3, p); *q++ = '"'; - q = mempcpy(q, s, len); + q = memcpy(q, s, len) + len; *q++ = '"'; s += len; @@ -8754,11 +8754,12 @@ copynodelist(struct nodelist *lp) static char * -nodesavestr(char *s) +nodesavestr(char *s) { - char *rtn = funcstring; + char *rtn = funcstring; - funcstring = stpcpy(funcstring, s) + 1; + strcpy(funcstring, s); + funcstring += strlen(s) + 1; return rtn; } @@ -12013,10 +12014,11 @@ setvar(const char *name, const char *val, int flags) vallen = strlen(val); } INTOFF; - p = mempcpy(nameeq = ckmalloc(namelen + vallen + 2), name, namelen); + nameeq = ckmalloc(namelen + vallen + 2) + p = memcpy(nameeq, name, namelen) + namelen; if (val) { *p++ = '='; - p = mempcpy(p, val, vallen); + p = memcpy(p, val, vallen) + vallen; } *p = '\0'; setvareq(nameeq, flags | VNOSAVE); -- 2.25.1