From 52fc6b12cb458a93ba1eeac4082f4e7f574cdafc Mon Sep 17 00:00:00 2001 From: Stefan Reinauer Date: Sat, 24 Oct 2009 13:06:04 +0000 Subject: re-order console output functions, add proper prototypes, drop claim that our files were blatantly copied, because they have been rewritten a very long time ago. Signed-off-by: Stefan Reinauer Acked-by: Carl-Daniel Hailfinger git-svn-id: svn://svn.coreboot.org/coreboot/trunk@4837 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1 --- src/console/vsprintf.c | 58 ++++++++++++++++++++++++++++++++------------------ 1 file changed, 37 insertions(+), 21 deletions(-) (limited to 'src/console/vsprintf.c') diff --git a/src/console/vsprintf.c b/src/console/vsprintf.c index bfa6ffebab..9507e8ea54 100644 --- a/src/console/vsprintf.c +++ b/src/console/vsprintf.c @@ -1,45 +1,61 @@ /* - * linux/lib/vsprintf.c + * This file is part of the coreboot project. + * + * Copyright (C) 2009 coresystems GmbH * - * Copyright (C) 1991, 1992 Linus Torvalds + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; version 2 of + * the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + * MA 02110-1301 USA */ -/* vsprintf.c -- Lars Wirzenius & Linus Torvalds. */ -/* - * Wirzenius wrote this portably, Torvalds fucked it up :-) - */ #include -#include +#include +#include -int vtxprintf(void (*tx_byte)(unsigned char byte), const char *fmt, va_list args); +static spinlock_t vsprintf_lock = SPIN_LOCK_UNLOCKED; -int vsprintf(char * buf, const char *fmt, va_list args) -{ - char *str_buf; +static char *str_buf; - /* this function is only used by vsprintf. - To keep str_buf local (for reentrancy - and to avoid .bss use, nest it */ - void str_tx_byte(unsigned char byte) - { - *str_buf = byte; - str_buf++; - } +static void str_tx_byte(unsigned char byte) +{ + *str_buf = byte; + str_buf++; +} +static int vsprintf(char *buf, const char *fmt, va_list args) +{ int i; + + spin_lock(&vsprintf_lock); + str_buf = buf; i = vtxprintf(str_tx_byte, fmt, args); *str_buf = '\0'; + + spin_unlock(&vsprintf_lock); + return i; } -int sprintf(char * buf, const char *fmt, ...) +int sprintf(char *buf, const char *fmt, ...) { va_list args; int i; va_start(args, fmt); - i=vsprintf(buf,fmt,args); + i = vsprintf(buf, fmt, args); va_end(args); + return i; } -- cgit v1.2.3