xfuncs.c: dietlibc actually HAS fdprintf!

platform.h: define strchrnul for dietlibc
ash: stop using few non-standard functions
This commit is contained in:
Denis Vlasenko
2006-12-18 22:32:45 +00:00
parent c8e6e35ba4
commit 7cfecc4b36
3 changed files with 24 additions and 13 deletions

View File

@ -193,9 +193,18 @@ typedef unsigned long long int uintmax_t;
/* Platforms that haven't got dprintf need to implement fdprintf() in /* 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 * libbb. This would require a platform.c. It's not going to be cleaned
* out of the tree, so stop saying it should be. */ * 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 #define fdprintf dprintf
#ifdef __dietlibc__ #endif
int dprintf(int fd, const char *format, ...);
#if defined(__dietlibc__)
static ATTRIBUTE_ALWAYS_INLINE char* strchrnul(const char *s, char c) {
while (*s && *s != c) ++s;
return (char*)s;
}
#endif #endif
/* Don't use lchown with glibc older than 2.1.x ... uC-libc lacks it */ /* Don't use lchown with glibc older than 2.1.x ... uC-libc lacks it */

View File

@ -411,8 +411,8 @@ char *xasprintf(const char *format, ...)
return string_ptr; return string_ptr;
} }
#ifdef __dietlibc__ #if 0 /* If we will ever meet a libc which hasn't [f]dprintf... */
int dprintf(int fd, const char *format, ...) int fdprintf(int fd, const char *format, ...)
{ {
va_list p; va_list p;
int r; int r;

View File

@ -5851,7 +5851,7 @@ _rmescapes(char *str, int flag)
} }
q = r; q = r;
if (len > 0) { if (len > 0) {
q = mempcpy(q, str, len); q = memcpy(q, str, len) + len;
} }
} }
inquotes = (flag & RMESCAPE_QUOTED) ^ RMESCAPE_QUOTED; inquotes = (flag & RMESCAPE_QUOTED) ^ RMESCAPE_QUOTED;
@ -8433,7 +8433,7 @@ char *
stnputs(const char *s, size_t n, char *p) stnputs(const char *s, size_t n, char *p)
{ {
p = makestrspace(n, p); p = makestrspace(n, p);
p = mempcpy(p, s, n); p = memcpy(p, s, n) + n;
return p; return p;
} }
@ -8517,7 +8517,7 @@ single_quote(const char *s) {
q = p = makestrspace(len + 3, p); q = p = makestrspace(len + 3, p);
*q++ = '\''; *q++ = '\'';
q = mempcpy(q, s, len); q = memcpy(q, s, len) + len;
*q++ = '\''; *q++ = '\'';
s += len; s += len;
@ -8530,7 +8530,7 @@ single_quote(const char *s) {
q = p = makestrspace(len + 3, p); q = p = makestrspace(len + 3, p);
*q++ = '"'; *q++ = '"';
q = mempcpy(q, s, len); q = memcpy(q, s, len) + len;
*q++ = '"'; *q++ = '"';
s += len; s += len;
@ -8754,11 +8754,12 @@ copynodelist(struct nodelist *lp)
static char * 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; return rtn;
} }
@ -12013,10 +12014,11 @@ setvar(const char *name, const char *val, int flags)
vallen = strlen(val); vallen = strlen(val);
} }
INTOFF; INTOFF;
p = mempcpy(nameeq = ckmalloc(namelen + vallen + 2), name, namelen); nameeq = ckmalloc(namelen + vallen + 2)
p = memcpy(nameeq, name, namelen) + namelen;
if (val) { if (val) {
*p++ = '='; *p++ = '=';
p = mempcpy(p, val, vallen); p = memcpy(p, val, vallen) + vallen;
} }
*p = '\0'; *p = '\0';
setvareq(nameeq, flags | VNOSAVE); setvareq(nameeq, flags | VNOSAVE);