>>>>> "maciej" == Maciej W Rozycki <macro@ds2.pg.gda.pl> writes:
maciej> On 18 Dec 2002, Juan Quintela wrote:
>> Index: arch/mips/lib/promlib.c
>> ===================================================================
>> RCS file: /home/cvs/linux/arch/mips/lib/promlib.c,v
>> retrieving revision 1.1.2.1
>> diff -u -r1.1.2.1 promlib.c
>> --- arch/mips/lib/promlib.c 28 Sep 2002 22:28:38 -0000 1.1.2.1
>> +++ arch/mips/lib/promlib.c 18 Dec 2002 00:49:18 -0000
>> @@ -1,3 +1,7 @@
>> +
>> +#include <asm/sgialib.h>
>> +#include <linux/kernel.h>
>> +
>> #include <stdarg.h>
>>
>> void prom_printf(char *fmt, ...)
maciej> A few comments:
maciej> 1. <linux> includes first, <asm> ones following (hmm, shouldn't that be
maciej> obvious...).
maciej> 2. <linux/kernel.h> is obviously OK for vsprintf().
maciej> 3. I would hesitate using <asm/sgialib.h> here being too much platform
maciej> specific. Either a separate generic <asm/prom.h> should be created for
maciej> primitives like prom_putchar(), prom_getchar(), etc. or a private
maciej> conservative declaration should be used here. The reason is the
functions
maciej> are much platform-specific, e.g. they may be pointers or even macros --
maciej> see <asm/dec/prom.h> for a not-so-trivial example (luckily, DECstations
maciej> support prom_printf() directly, so they don't have to use promlib.c).
Something like that?
Once there, s/vsprintf/vsnprintf/.
If anybody calls prom_printf with more than 1024 chars, we were b0rked
:((
I didn't did the changes for the other users of prom_* that was using
asm/sgialib.h, but change is trivial.
Later, Juan.
diff -uNp build/include/asm-mips/prom.h.orig build/include/asm-mips/prom.h
--- build/include/asm-mips/prom.h.orig 1970-01-01 01:00:00.000000000 +0100
+++ build/include/asm-mips/prom.h 2002-12-18 19:00:47.000000000 +0100
@@ -0,0 +1,21 @@
+/*
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License. See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ * Interface with the low level prom consoles.
+ *
+ * Copyright (C) 1996 David S. Miller (dm@engr.sgi.com)
+ * Copyright (C) 2001, 2002 Ralf Baechle (ralf@gnu.org)
+ */
+#ifndef _ASM_PROM_H
+#define _ASM_PROM_H
+
+/* Simple char-by-char console I/O. */
+extern void prom_putchar(char c);
+extern char prom_getchar(void);
+
+/* Generic printf() console I/O. */
+extern void prom_printf(char *fmt, ...);
+
+#endif /* _ASM_PROM_H */
Index: arch/mips/arc/init.c
===================================================================
RCS file: /home/cvs/linux/arch/mips/arc/init.c,v
retrieving revision 1.10.2.3
diff -u -r1.10.2.3 init.c
--- arch/mips/arc/init.c 1 Aug 2002 22:26:40 -0000 1.10.2.3
+++ arch/mips/arc/init.c 19 Dec 2002 09:21:07 -0000
@@ -11,6 +11,7 @@
#include <linux/kernel.h>
#include <asm/sgialib.h>
+#include <asm/prom.h>
#undef DEBUG_PROM_INIT
Index: arch/mips/lib/promlib.c
===================================================================
RCS file: /home/cvs/linux/arch/mips/lib/promlib.c,v
retrieving revision 1.1.2.1
diff -u -r1.1.2.1 promlib.c
--- arch/mips/lib/promlib.c 28 Sep 2002 22:28:38 -0000 1.1.2.1
+++ arch/mips/lib/promlib.c 19 Dec 2002 09:21:08 -0000
@@ -1,13 +1,20 @@
+
+
+#include <linux/kernel.h>
+#include <asm/prom.h>
+
#include <stdarg.h>
+#define BUFSIZE 1024
+
void prom_printf(char *fmt, ...)
{
va_list args;
- char ppbuf[1024];
+ char ppbuf[BUFSIZE];
char *bptr;
va_start(args, fmt);
- vsprintf(ppbuf, fmt, args);
+ vsnprintf(ppbuf, BUFSIZE, fmt, args);
bptr = ppbuf;
Index: arch/mips/sgi-ip22/ip22-system.c
===================================================================
RCS file: /home/cvs/linux/arch/mips/sgi-ip22/ip22-system.c,v
retrieving revision 1.1.2.8
diff -u -r1.1.2.8 ip22-system.c
--- arch/mips/sgi-ip22/ip22-system.c 18 Dec 2002 19:11:09 -0000 1.1.2.8
+++ arch/mips/sgi-ip22/ip22-system.c 19 Dec 2002 09:21:09 -0000
@@ -11,6 +11,7 @@
#include <asm/cpu.h>
#include <asm/sgi/sgi.h>
#include <asm/sgialib.h>
+#include <asm/prom.h>
enum sgi_mach sgimach;
Index: include/asm-mips/sgialib.h
===================================================================
RCS file: /home/cvs/linux/include/asm-mips/sgialib.h,v
retrieving revision 1.10.2.3
diff -u -r1.10.2.3 sgialib.h
--- include/asm-mips/sgialib.h 1 Aug 2002 22:26:40 -0000 1.10.2.3
+++ include/asm-mips/sgialib.h 19 Dec 2002 09:21:15 -0000
@@ -30,13 +30,6 @@
/* Init the PROM library and it's internal data structures. */
extern void prom_init(int argc, char **argv, char **envp, int *prom_vec);
-/* Simple char-by-char console I/O. */
-extern void prom_putchar(char c);
-extern char prom_getchar(void);
-
-/* Generic printf() using ARCS console I/O. */
-extern void prom_printf(char *fmt, ...);
-
/* Memory descriptor management. */
#define PROM_MAX_PMEMBLOCKS 32
struct prom_pmemblock {
--
In theory, practice and theory are the same, but in practice they
are different -- Larry McVoy
|