X-Git-Url: http://git.buserror.net/cgi-bin/gitweb.cgi?p=polintos%2Fscott%2Fpriv.git;a=blobdiff_plain;f=kernel%2Flib%2Flibc.cc;fp=kernel%2Flib%2Flibc.cc;h=9c458572db35724d5b833e48a4e1b45b9d4dc33f;hp=e571384048458bf9d9ee49e0e593900affd30fe4;hb=c6ddc76fd9c1c143ce72f52545e210de858c363d;hpb=9b36e0babf885409bdfc643184f14a5300294859 diff --git a/kernel/lib/libc.cc b/kernel/lib/libc.cc index e571384..9c45857 100644 --- a/kernel/lib/libc.cc +++ b/kernel/lib/libc.cc @@ -15,6 +15,7 @@ #include #include +#include #include #include @@ -39,7 +40,7 @@ static const int num_signed = 0x4000; static const int has_precision = 0x8000; static void printf_string(char *buf, size_t &opos, size_t limit, - char *src, size_t len) + const char *src, size_t len) { if (opos < limit) { size_t olen = opos + len <= limit ? len : limit - opos; @@ -356,7 +357,7 @@ size_t vsnprintf(char *buf, size_t size, const char *str, va_list args) break; case 's': { - char *arg = va_arg(args, char *); + const char *arg = va_arg(args, const char *); if (!arg) arg = "(null)"; @@ -368,7 +369,7 @@ size_t vsnprintf(char *buf, size_t size, const char *str, va_list args) } case 'p': { - void *arg = va_arg(args, void *); + const void *arg = va_arg(args, const void *); printf_num(buf, opos, size, (ulong)arg, 16, fieldwidth, precision, flags); @@ -515,6 +516,37 @@ char *strncpy(char *dest, const char *src, size_t len) return orig; } +char *strcat(char *dest, const char *src) +{ + char *orig = dest; + dest += strlen(dest); + + do { + *dest = *src++; + } while (*dest++); + + return orig; +} + +char *strncat(char *dest, const char *src, size_t len) +{ + char *orig = dest; + int orig_len = strlen(dest); + + len -= orig_len; + dest += orig_len; + + while (len--) { + *dest = *src++; + + if (!*dest++) + break; + } + + bzero(dest, len); + return orig; +} + void bzero(void *b, size_t len) { char *c = static_cast(b);