| /* |
| * Copyright (c) 2004 |
| * Herbert Xu <herbert@gondor.apana.org.au>. All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions |
| * are met: |
| * 1. Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * 2. Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in the |
| * documentation and/or other materials provided with the distribution. |
| * 3. The name of the author may not be used to endorse or promote products |
| * derived from this software without specific prior written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
| * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
| * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
| * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
| * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
| * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| * SUCH DAMAGE. |
| */ |
| |
| #ifndef HAVE_ISALPHA |
| #define isalnum _isalnum |
| #define iscntrl _iscntrl |
| #define islower _islower |
| #define isspace _isspace |
| #define isalpha _isalpha |
| #define isdigit _isdigit |
| #define isprint _isprint |
| #define isupper _isupper |
| #define isblank _isblank |
| #define isgraph _isgraph |
| #define ispunct _ispunct |
| #define isxdigit _isxdigit |
| #include <ctype.h> |
| #undef isalnum |
| #undef iscntrl |
| #undef islower |
| #undef isspace |
| #undef isalpha |
| #undef isdigit |
| #undef isprint |
| #undef isupper |
| #undef isblank |
| #undef isgraph |
| #undef ispunct |
| #undef isxdigit |
| #endif |
| |
| #include <signal.h> |
| #include <string.h> |
| |
| #include "error.h" |
| #include "output.h" |
| #include "system.h" |
| |
| #ifndef HAVE_MEMPCPY |
| void *mempcpy(void *dest, const void *src, size_t n) |
| { |
| return memcpy(dest, src, n) + n; |
| } |
| #endif |
| |
| #ifndef HAVE_STPCPY |
| char *stpcpy(char *dest, const char *src) |
| { |
| size_t len = strlen(src); |
| dest[len] = 0; |
| return mempcpy(dest, src, len); |
| } |
| #endif |
| |
| #ifndef HAVE_STRCHRNUL |
| char *strchrnul(const char *s, int c) |
| { |
| char *p = strchr(s, c); |
| if (!p) |
| p = (char *)s + strlen(s); |
| return p; |
| } |
| #endif |
| |
| #ifndef HAVE_STRSIGNAL |
| char *strsignal(int sig) |
| { |
| static char buf[19]; |
| |
| if ((unsigned)sig < NSIG && sys_siglist[sig]) |
| return (char *)sys_siglist[sig]; |
| fmtstr(buf, sizeof(buf), "Signal %d", sig); |
| return buf; |
| } |
| #endif |
| |
| #ifndef HAVE_BSEARCH |
| void *bsearch(const void *key, const void *base, size_t nmemb, |
| size_t size, int (*cmp)(const void *, const void *)) |
| { |
| while (nmemb) { |
| size_t mididx = nmemb / 2; |
| const void *midobj = base + mididx * size; |
| int diff = cmp(key, midobj); |
| |
| if (diff == 0) |
| return (void *)midobj; |
| |
| if (diff > 0) { |
| base = midobj + size; |
| nmemb -= mididx + 1; |
| } else |
| nmemb = mididx; |
| } |
| |
| return 0; |
| } |
| #endif |
| |
| #ifndef HAVE_SYSCONF |
| long sysconf(int name) |
| { |
| sh_error("no sysconf for: %d", name); |
| } |
| #endif |
| |
| #ifndef HAVE_ISALPHA |
| int isalnum(int c) { |
| return _isalnum(c); |
| } |
| |
| |
| int iscntrl(int c) { |
| return _iscntrl(c); |
| } |
| |
| |
| int islower(int c) { |
| return _islower(c); |
| } |
| |
| |
| int isspace(int c) { |
| return _isspace(c); |
| } |
| |
| |
| int isalpha(int c) { |
| return _isalpha(c); |
| } |
| |
| |
| int isdigit(int c) { |
| return _isdigit(c); |
| } |
| |
| |
| int isprint(int c) { |
| return _isprint(c); |
| } |
| |
| |
| int isupper(int c) { |
| return _isupper(c); |
| } |
| |
| |
| #if HAVE_DECL_ISBLANK |
| int isblank(int c) { |
| return _isblank(c); |
| } |
| #endif |
| |
| |
| int isgraph(int c) { |
| return _isgraph(c); |
| } |
| |
| |
| int ispunct(int c) { |
| return _ispunct(c); |
| } |
| |
| |
| int isxdigit(int c) { |
| return _isxdigit(c); |
| } |
| #endif |
| |
| #if !HAVE_DECL_ISBLANK |
| int isblank(int c) { |
| return c == ' ' || c == '\t'; |
| } |
| #endif |