]> git.buserror.net Git - polintos/scott/priv.git/blobdiff - kernel/lib/libc.cc
GCC 4.2.1 fixes, plus a couple library functions.
[polintos/scott/priv.git] / kernel / lib / libc.cc
index e571384048458bf9d9ee49e0e593900affd30fe4..9c458572db35724d5b833e48a4e1b45b9d4dc33f 100644 (file)
@@ -15,6 +15,7 @@
 
 #include <kern/types.h>
 #include <kern/libc.h>
+#include <kern/console.h>
 
 #include <stdarg.h>
 #include <limits.h>
@@ -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<char *>(b);