Current Path : /sys/boot/arm/at91/libat91/ |
FreeBSD hs32.drive.ne.jp 9.1-RELEASE FreeBSD 9.1-RELEASE #1: Wed Jan 14 12:18:08 JST 2015 root@hs32.drive.ne.jp:/sys/amd64/compile/hs32 amd64 |
Current File : //sys/boot/arm/at91/libat91/printf.c |
/*- * Copyright (c) 1998 Robert Nordier * All rights reserved. * Copyright (c) 2006 M. Warner Losh * All rights reserved. * * Redistribution and use in source and binary forms are freely * permitted provided that the above copyright notice and this * paragraph and the following disclaimer are duplicated in all * such forms. * * This software is provided "AS IS" and without any express or * implied warranties, including, without limitation, the implied * warranties of merchantability and fitness for a particular * purpose. * * $FreeBSD: release/9.1.0/sys/boot/arm/at91/libat91/printf.c 163533 2006-10-20 09:12:05Z imp $ */ #include <stdarg.h> #include "lib.h" void printf(const char *fmt,...) { va_list ap; const char *hex = "0123456789abcdef"; char buf[10]; char *s; unsigned u; int c; va_start(ap, fmt); while ((c = *fmt++)) { if (c == '%') { c = *fmt++; switch (c) { case 'c': xputchar(va_arg(ap, int)); continue; case 's': for (s = va_arg(ap, char *); *s; s++) xputchar(*s); continue; case 'd': /* A lie, always prints unsigned */ case 'u': u = va_arg(ap, unsigned); s = buf; do *s++ = '0' + u % 10U; while (u /= 10U); dumpbuf:; while (--s >= buf) xputchar(*s); continue; case 'x': u = va_arg(ap, unsigned); s = buf; do *s++ = hex[u & 0xfu]; while (u >>= 4); goto dumpbuf; } } xputchar(c); } va_end(ap); return; }