OSDN Git Service

xfuncs.c: dietlibc actually HAS fdprintf!
authorDenis Vlasenko <vda.linux@googlemail.com>
Mon, 18 Dec 2006 22:32:45 +0000 (22:32 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Mon, 18 Dec 2006 22:32:45 +0000 (22:32 -0000)
platform.h: define strchrnul for dietlibc
ash: stop using few non-standard functions

include/platform.h
libbb/xfuncs.c
shell/ash.c

index 860143f..1cc9782 100644 (file)
@@ -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 */
index 4790aa1..9efccc5 100644 (file)
@@ -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;
index 2f7cc86..ae5182a 100644 (file)
@@ -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);