summaryrefslogtreecommitdiffstats
path: root/qemu/tests/multiboot/libc.c
diff options
context:
space:
mode:
Diffstat (limited to 'qemu/tests/multiboot/libc.c')
-rw-r--r--qemu/tests/multiboot/libc.c151
1 files changed, 0 insertions, 151 deletions
diff --git a/qemu/tests/multiboot/libc.c b/qemu/tests/multiboot/libc.c
deleted file mode 100644
index 6df9bda96..000000000
--- a/qemu/tests/multiboot/libc.c
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Copyright (c) 2013 Kevin Wolf <kwolf@redhat.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-#include "libc.h"
-
-void* memcpy(void *dest, const void *src, int n)
-{
- char *d = dest;
- const char *s = src;
-
- while (n--) {
- *d++ = *s++;
- }
-
- return dest;
-}
-
-static void print_char(char c)
-{
- outb(0xe9, c);
-}
-
-static void print_str(char *s)
-{
- while (*s) {
- print_char(*s++);
- }
-}
-
-static void print_num(uint64_t value, int base)
-{
- char digits[] = "0123456789abcdef";
- char buf[32] = { 0 };
- int i = sizeof(buf) - 2;
-
- do {
- buf[i--] = digits[value % base];
- value /= base;
- } while (value);
-
- print_str(&buf[i + 1]);
-}
-
-void printf(const char *fmt, ...)
-{
- va_list ap;
- uint64_t val;
- char *str;
- int base;
- int has_long;
- int alt_form;
-
- va_start(ap, fmt);
-
- for (; *fmt; fmt++) {
- if (*fmt != '%') {
- print_char(*fmt);
- continue;
- }
- fmt++;
-
- if (*fmt == '#') {
- fmt++;
- alt_form = 1;
- } else {
- alt_form = 0;
- }
-
- if (*fmt == 'l') {
- fmt++;
- if (*fmt == 'l') {
- fmt++;
- has_long = 2;
- } else {
- has_long = 1;
- }
- } else {
- has_long = 0;
- }
-
- switch (*fmt) {
- case 'x':
- case 'p':
- base = 16;
- goto convert_number;
- case 'd':
- case 'i':
- case 'u':
- base = 10;
- goto convert_number;
- case 'o':
- base = 8;
- goto convert_number;
-
- convert_number:
- switch (has_long) {
- case 0:
- val = va_arg(ap, unsigned int);
- break;
- case 1:
- val = va_arg(ap, unsigned long);
- break;
- case 2:
- val = va_arg(ap, unsigned long long);
- break;
- }
-
- if (alt_form && base == 16) {
- print_str("0x");
- }
-
- print_num(val, base);
- break;
-
- case 's':
- str = va_arg(ap, char*);
- print_str(str);
- break;
- case '%':
- print_char(*fmt);
- break;
- default:
- print_char('%');
- print_char(*fmt);
- break;
- }
- }
-
- va_end(ap);
-}
-
-