started the implementation
[visor] / libvisor / src / vilibc.c
diff --git a/libvisor/src/vilibc.c b/libvisor/src/vilibc.c
new file mode 100644 (file)
index 0000000..6c021b0
--- /dev/null
@@ -0,0 +1,77 @@
+#include "vilibc.h"
+#include "vimpl.h"
+
+#ifndef HAVE_LIBC
+
+void *memset(void *s, int c, unsigned long n)
+{
+       char *p = s;
+       while(n--) *p++ = c;
+       return s;
+}
+
+void *memcpy(void *dest, const void *src, unsigned long n)
+{
+       char *d = dest;
+       const char *s = src;
+       while(n--) *d++ = *s++;
+       return dest;
+}
+
+void *memmove(void *dest, const void *src, unsigned long n)
+{
+       unsigned long i;
+       char *dptr;
+       const char *sptr;
+
+       if(dest <= src) {
+               /* forward copy */
+               dptr = dest;
+               sptr = src;
+               for(i=0; i<n; i++) {
+                       *dptr++ = *sptr++;
+               }
+       } else {
+               /* backwards copy */
+               dptr = (char*)dest + n - 1;
+               sptr = (const char*)src + n - 1;
+               for(i=0; i<n; i++) {
+                       *dptr-- = *sptr--;
+               }
+       }
+
+       return dest;
+}
+
+unsigned long strlen(const char *s)
+{
+       unsigned long len = 0;
+       while(*s++) len++;
+       return len;
+}
+
+int strcmp(const char *s1, const char *s2)
+{
+       while(*s1 && *s1 == *s2) {
+               s1++;
+               s2++;
+       }
+       return *s1 - *s2;
+}
+
+#endif /* !def HAVE_LIBC */
+
+static char errstr_buf[256];
+
+void vi_error(struct visor *vi, const char *fmt, ...)
+{
+       va_list ap;
+
+       va_start(ap, fmt);
+       vsnprintf(errstr_buf, sizeof errstr_buf, fmt, ap);
+       va_end(ap);
+
+       if(vi->tty.status) {
+               vi->tty.status(errstr_buf, vi->tty_cls);
+       }
+}