X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=qemu%2Froms%2Fopenhackware%2Fsrc%2Flibc%2Fsrc%2Fstr.c;fp=qemu%2Froms%2Fopenhackware%2Fsrc%2Flibc%2Fsrc%2Fstr.c;h=24548fa00d84b830c32fcd127a892be6bea5b45d;hb=e44e3482bdb4d0ebde2d8b41830ac2cdb07948fb;hp=0000000000000000000000000000000000000000;hpb=9ca8dbcc65cfc63d6f5ef3312a33184e1d726e00;p=kvmfornfv.git diff --git a/qemu/roms/openhackware/src/libc/src/str.c b/qemu/roms/openhackware/src/libc/src/str.c new file mode 100644 index 000000000..24548fa00 --- /dev/null +++ b/qemu/roms/openhackware/src/libc/src/str.c @@ -0,0 +1,430 @@ +/* + * + * + * Open Hack'Ware BIOS: str functions + * + * Copyright (c) 2004-2005 Jocelyn Mayer + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License V2 + * as published by the Free Software Foundation + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* functions prototypes are here */ +#include +/* NULL is defined here */ +/* malloc is defined here */ +#include +/* toupper is defined here */ +#include + +/* str___ functions */ +#if defined (__USE_strcpy__) +void *strcpy (char *dest, const char *src) +{ + char *q; + + q = dest; + for (; ; q++) { + *q = *src++; + if (*q == '\0') + break; + } + + return dest; +} +#endif + +#if defined (__USE_strncpy__) +void *strncpy (char *dest, const char *src, size_t n) +{ + char *q; + + q = dest; + for (; n != 0; n--, q++) { + *q = *src++; + if (*q == '\0') + break; + } + + return dest; +} +#endif + +#if defined (__USE_strdup__) +char *strdup (const char *s) +{ + char *dest; + size_t len; + + len = strlen(s) + 1; + dest = malloc(len); + if (dest != NULL) + memcpy(dest, s, len); + + return dest; +} +#endif + +#if defined (__USE_strndup__) +/* GNU extension */ +char *strndup (const char *s, size_t n) +{ + char *dest; + size_t len; + + len = strlen(s) + 1; + if (len > n) + len = n; + dest = malloc(len); + if (dest != NULL) { + memcpy(dest, s, len - 1); + dest[len - 1] = '\0'; + } + + return dest; +} +#endif + +#if defined (__USE_stpcpy__) +void *stpcpy (char *dest, const char *src) +{ + char *q; + + q = dest; + for (; ; q++) { + *q = *src++; + if (*q == '\0') + break; + } + + return q; +} +#endif + +#if defined (__USE_stpncpy__) +void *stpncpy (char *dest, const char *src, size_t n) +{ + char *q; + + q = dest; + for (; n != 0; n--, q++) { + *q = *src++; + if (*q == '\0') + break; + } + + return q; +} +#endif + +#if defined (__USE_strcat__) +char *strcat (char *dest, const char *src) +{ + char *q; + + for (q = dest + strlen(dest); ; q++) { + *q = *src++; + if (*q == '\0') + break; + } + + return dest; +} +#endif + +#if defined (__USE_strncat__) +char *strncat (char *dest, const char *src, size_t n) +{ + char *q; + + for (q = dest + strlen(dest); n != 0; n--, q++) { + *q = *src++; + if (*q == '\0') + break; + } + + return dest; +} +#endif + +#if defined (__USE_strcmp__) +int strcmp (const char *s1, const char *s2) +{ + int ret; + + for (ret = 0; ret == 0; s1++) { + ret = *s1 - *s2++; + if (*s1 == '\0') + break; + } + + return ret; +} +#endif + +#if defined (__USE_strcasecmp__) +int strcasecmp (const char *s1, const char *s2) +{ + int ret; + + for (ret = 0; ret == 0; s1++) { + ret = toupper(*s1) - toupper(*s2++); + if (*s1 == '\0') + break; + } + + return ret; +} +#endif + +#if defined (__USE_strncmp__) +int strncmp (const char *s1, const char *s2, size_t n) +{ + int ret; + + for (ret = 0; ret == 0 && n != 0; n--, s1++) { + ret = *s1 - *s2++; + if (*s1 == '\0') + break; + } + + return ret; +} +#endif + +#if defined (__USE_strncasecmp__) +int strncasecmp (const char *s1, const char *s2, size_t n) +{ + int ret; + + for (ret = 0; ret == 0 && n != 0; n--, s1++) { + ret = toupper(*s1) - toupper(*s2++); + if (*s1 == '\0') + break; + } + + return ret; +} +#endif + +#if defined (__USE_strchr__) +char *strchr (const char *s, int c) +{ + const char *r; + + for (r = NULL; *s != '\0'; s++) { + if (*s == c) { + r = s; + break; + } + } + + return (char *)r; +} +#endif + +#if defined (__USE_strchrnul__) +/* GNU extension */ +char *strchrnul (const char *s, int c) +{ + for (; *s != '\0' && *s != c; s++) + continue; + + return (char *)s; +} +#endif + +#if defined (__USE_strrchr__) +char *strrchr (const char *s, int c) +{ + const char *p, *r; + + r = NULL; + for (p = s + strlen(s); p != s; p--) { + if (*p == c) { + r = p; + break; + } + } + + return (char *)r; +} +#endif + +#if defined (__USE_strstr__) +char *strstr (const char *haystack, const char *needle) +{ + const char *r; + size_t hlen, nlen; + + if (*needle == '\0') + return (char *)haystack; + r = NULL; + hlen = strlen(haystack); + nlen = strlen(needle); + for (; hlen > nlen; hlen--, haystack++) { + if (memcmp(haystack, needle, nlen) == 0) { + r = haystack; + break; + } + } + + return (char *)r; +} +#endif + +#if defined (__USE_strcasestr__) +char *strcasestr (const char *haystack, const char *needle) +{ + const char *p, *q, *r; + size_t hlen, nlen, n; + + if (*needle == '\0') + return (char *)haystack; + r = NULL; + hlen = strlen(haystack); + nlen = strlen(needle); + for (; hlen > nlen; hlen--, haystack++) { + p = haystack; + q = needle; + for (n = nlen; n != 0; n--) { + if (toupper(*p++) != toupper(*q++)) + break; + } + if (n == 0) { + r = haystack; + break; + } + } + + return (char *)r; +} +#endif + +#if defined (__USE_strspn__) +#error "TODO" +size_t strspn (const char *s, const char *accept) +{ +} +#endif + +#if defined (__USE_strcspn__) +#error "TODO" +size_t strcspn (const char *s, const char *reject) +{ +} +#endif + +#if defined (__USE_strpbrk__) +#error "TODO" +char *strpbrk (const char *s, const char *accept) +{ +} +#endif + +#if defined (__USE_strtok__) +#error "TODO" +char *strtok (char *s, const char *delim) +{ +} +#endif + +#if defined (__USE_strtok_r__) +#error "TODO" +char *strtok_r (char *s, const char *delim, char **ptrptr) +{ +} +#endif + +#if defined (__USE_strsep__) +#error "TODO" +char *strsep (char **stringp, const char *delim) +{ +} +#endif + +#if defined (__USE_basename__) +char *basename (char *path) +{ + char *sl; + size_t len; + + if (path == NULL || (len = strlen(path)) == 0) + return strdup("."); + sl = path + len - 1; + if (*sl == '/') + sl--; + for (; sl != path; sl--) { + if (*sl == '/') + break; + } + + return strdup(sl + 1); +} +#endif + +#if defined (__USE_dirname__) +char *dirname (char *path) +{ + char *sl, *ret; + size_t len; + + if (path == NULL || (len = strlen(path)) == 0) { + ret = strdup("."); + } else { + sl = path + len - 1; + if (*sl == '/') + sl--; + for (; sl != path; sl--) { + if (*sl == '/') + break; + } + len = sl - path; + if (len == 0) { + ret = strdup("."); + } else { + ret = malloc(len + 1); + if (ret != NULL) { + memcpy(path, ret, len); + path[len] = '\0'; + } + } + } + + return ret; +} +#endif + +#if defined (__USE_strlen__) +size_t strlen (const char *s) +{ + size_t len; + + for (len = 0; *s != '\0'; len++) + s++; + + return len; +} +#endif + +#if defined (__USE_strnlen__) +size_t strnlen (const char *s, size_t maxlen) +{ + size_t len; + + for (len = 0; maxlen != 0 && *s != '\0'; maxlen--, len++) + s++; + + return len; +} +#endif