svn commit: r321969 - in head/sys/boot: arm/at91/libat91 arm/ixp425/boot2 i386/boot2

Ngie Cooper ngie at FreeBSD.org
Thu Aug 3 05:27:07 UTC 2017


Author: ngie
Date: Thu Aug  3 05:27:05 2017
New Revision: 321969
URL: https://svnweb.freebsd.org/changeset/base/321969

Log:
  Fix the return types for printf and putchar to match their libc and
  POSIX equivalents
  
  Both printf and putchar return int, not void.
  
  This will allow code that leverages the libcalls and checks/rely on the
  return type to interchangeably between loader code and non-loader
  code.
  
  MFC after:	1 month

Modified:
  head/sys/boot/arm/at91/libat91/lib.h
  head/sys/boot/arm/at91/libat91/printf.c
  head/sys/boot/arm/at91/libat91/putchar.c
  head/sys/boot/arm/ixp425/boot2/ixp425_board.c
  head/sys/boot/arm/ixp425/boot2/lib.h
  head/sys/boot/i386/boot2/boot2.c

Modified: head/sys/boot/arm/at91/libat91/lib.h
==============================================================================
--- head/sys/boot/arm/at91/libat91/lib.h	Thu Aug  3 03:45:48 2017	(r321968)
+++ head/sys/boot/arm/at91/libat91/lib.h	Thu Aug  3 05:27:05 2017	(r321969)
@@ -28,9 +28,9 @@
 #define ARM_BOOT_LIB_H
 
 int getc(int);
-void putchar(int);
-void xputchar(int);
-void printf(const char *fmt,...);
+int putchar(int);
+int xputchar(int);
+int printf(const char *fmt,...);
 
 /* The following function write eeprom at ee_addr using data 	*/
 /*  from data_add for size bytes.				*/

Modified: head/sys/boot/arm/at91/libat91/printf.c
==============================================================================
--- head/sys/boot/arm/at91/libat91/printf.c	Thu Aug  3 03:45:48 2017	(r321968)
+++ head/sys/boot/arm/at91/libat91/printf.c	Thu Aug  3 05:27:05 2017	(r321969)
@@ -20,12 +20,13 @@
 #include <stdarg.h>
 #include "lib.h"
 
-void
+int
 printf(const char *fmt,...)
 {
 	va_list ap;
 	const char *hex = "0123456789abcdef";
 	char buf[10];
+	const char *fmt_orig = fmt;
 	char *s;
 	unsigned u;
 	int c;
@@ -66,5 +67,5 @@ printf(const char *fmt,...)
 	}
 	va_end(ap);
 
-	return;
+	return (int)(fmt - fmt_orig);
 }

Modified: head/sys/boot/arm/at91/libat91/putchar.c
==============================================================================
--- head/sys/boot/arm/at91/libat91/putchar.c	Thu Aug  3 03:45:48 2017	(r321968)
+++ head/sys/boot/arm/at91/libat91/putchar.c	Thu Aug  3 05:27:05 2017	(r321969)
@@ -39,11 +39,11 @@
 #include "lib.h"
 
 /*
- * void putchar(int ch)
+ * int putchar(int ch)
  * Writes a character to the DBGU port.  It assumes that DBGU has
  * already been initialized.
  */
-void
+int
 putchar(int ch)
 {
 	AT91PS_USART pUSART = (AT91PS_USART)AT91C_BASE_DBGU;
@@ -51,12 +51,14 @@ putchar(int ch)
 	while (!(pUSART->US_CSR & AT91C_US_TXRDY))
 		continue;
 	pUSART->US_THR = (ch & 0xFF);
+	return (1);
 }
 
-void
+int
 xputchar(int ch)
 {
-    if (ch == '\n')
-	putchar('\r');
-    putchar(ch);
+	if (ch == '\n')
+		putchar('\r');
+	putchar(ch);
+	return (ch == '\n' ? 2 : 1);
 }

Modified: head/sys/boot/arm/ixp425/boot2/ixp425_board.c
==============================================================================
--- head/sys/boot/arm/ixp425/boot2/ixp425_board.c	Thu Aug  3 03:45:48 2017	(r321968)
+++ head/sys/boot/arm/ixp425/boot2/ixp425_board.c	Thu Aug  3 05:27:05 2017	(r321969)
@@ -165,7 +165,7 @@ getc(int seconds)
 	return c;
 }
 
-void
+int
 putchar(int ch)
 {
 	int delay, limit;
@@ -179,14 +179,16 @@ putchar(int ch)
 	limit = 40;
 	while ((uart_getreg(ubase, REG_LSR) & LSR_TEMT) == 0 && --limit)
 		DELAY(delay);
+	return (1);
 }
 
-void
+int
 xputchar(int ch)
 {
 	if (ch == '\n')
 		putchar('\r');
 	putchar(ch);
+	return (ch == '\n' ? 2 : 1);
 }
 
 void

Modified: head/sys/boot/arm/ixp425/boot2/lib.h
==============================================================================
--- head/sys/boot/arm/ixp425/boot2/lib.h	Thu Aug  3 03:45:48 2017	(r321968)
+++ head/sys/boot/arm/ixp425/boot2/lib.h	Thu Aug  3 05:27:05 2017	(r321969)
@@ -35,12 +35,12 @@ int main(void);
 void DELAY(int);
 
 int getc(int);
-void putchar(int);
-void xputchar(int);
+int putchar(int);
+int xputchar(int);
 void putstr(const char *);
 void puthex8(u_int8_t);
 void puthexlist(const u_int8_t *, int);
-void printf(const char *fmt,...);
+int printf(const char *fmt,...);
 
 void bzero(void *, size_t);
 char *strcpy(char *to, const char *from);

Modified: head/sys/boot/i386/boot2/boot2.c
==============================================================================
--- head/sys/boot/i386/boot2/boot2.c	Thu Aug  3 03:45:48 2017	(r321968)
+++ head/sys/boot/i386/boot2/boot2.c	Thu Aug  3 05:27:05 2017	(r321969)
@@ -114,8 +114,8 @@ void exit(int);
 static void load(void);
 static int parse(void);
 static int dskread(void *, unsigned, unsigned);
-static void printf(const char *,...);
-static void putchar(int);
+static int printf(const char *,...);
+static int putchar(int);
 static int drvread(void *, unsigned, unsigned);
 static int keyhit(unsigned);
 static int xputc(int);
@@ -521,11 +521,12 @@ error:
     return -1;
 }
 
-static void
+static int
 printf(const char *fmt,...)
 {
     va_list ap;
     static char buf[10];
+    const char *fmt_orig = fmt;
     char *s;
     unsigned u;
     int c;
@@ -556,15 +557,16 @@ printf(const char *fmt,...)
 	putchar(c);
     }
     va_end(ap);
-    return;
+    return (int)(fmt - fmt_orig);
 }
 
-static void
+static int
 putchar(int c)
 {
     if (c == '\n')
 	xputc('\r');
     xputc(c);
+    return (c == '\n' ? 2 : 1);
 }
 
 static int


More information about the svn-src-head mailing list