Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 17 May 2011 06:36:32 +0000 (UTC)
From:      Poul-Henning Kamp <phk@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r222004 - head/sys/kern
Message-ID:  <201105170636.p4H6aWtF016431@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: phk
Date: Tue May 17 06:36:32 2011
New Revision: 222004
URL: http://svn.freebsd.org/changeset/base/222004

Log:
  Don't expect PAGE_SIZE to exist on all platforms (It is a pretty arbitrary
  choice of default size in the first place)
  
  Reverse the order of arguments to the internal static sbuf_put_byte()
  function to match everything else in this file.
  
  Move sbuf_putc_func() inside the kernel version of sbuf_vprintf
  where it belongs.
  
  sbuf_putc() incorrectly used sbuf_putc_func() which supress NUL
  characters, it should use sbuf_put_byte().
  
  Make sbuf_finish() return -1 on error.
  
  Minor stylistic nits fixed.

Modified:
  head/sys/kern/subr_sbuf.c

Modified: head/sys/kern/subr_sbuf.c
==============================================================================
--- head/sys/kern/subr_sbuf.c	Tue May 17 00:40:11 2011	(r222003)
+++ head/sys/kern/subr_sbuf.c	Tue May 17 06:36:32 2011	(r222004)
@@ -67,7 +67,7 @@ static MALLOC_DEFINE(M_SBUF, "sbuf", "st
 #define	SBUF_ISDYNSTRUCT(s)	((s)->s_flags & SBUF_DYNSTRUCT)
 #define	SBUF_ISFINISHED(s)	((s)->s_flags & SBUF_FINISHED)
 #define	SBUF_HASROOM(s)		((s)->s_len < (s)->s_size - 1)
-#define	SBUF_FREESPACE(s)	((s)->s_size - (s)->s_len - 1)
+#define	SBUF_FREESPACE(s)	((s)->s_size - ((s)->s_len + 1))
 #define	SBUF_CANEXTEND(s)	((s)->s_flags & SBUF_AUTOEXTEND)
 
 /*
@@ -77,8 +77,14 @@ static MALLOC_DEFINE(M_SBUF, "sbuf", "st
 #define	SBUF_CLEARFLAG(s, f)	do { (s)->s_flags &= ~(f); } while (0)
 
 #define	SBUF_MINEXTENDSIZE	16		/* Should be power of 2. */
+
+#ifdef PAGE_SIZE
 #define	SBUF_MAXEXTENDSIZE	PAGE_SIZE
 #define	SBUF_MAXEXTENDINCR	PAGE_SIZE
+#else
+#define	SBUF_MAXEXTENDSIZE	4096
+#define	SBUF_MAXEXTENDINCR	4096
+#endif
 
 /*
  * Debugging support
@@ -328,7 +334,7 @@ sbuf_drain(struct sbuf *s)
  * buffer and marking overflow.
  */
 static void
-sbuf_put_byte(int c, struct sbuf *s)
+sbuf_put_byte(struct sbuf *s, int c)
 {
 
 	assert_sbuf_integrity(s);
@@ -337,7 +343,7 @@ sbuf_put_byte(int c, struct sbuf *s)
 	if (s->s_error != 0)
 		return;
 	if (SBUF_FREESPACE(s) <= 0) {
-		/* 
+		/*
 		 * If there is a drain, use it, otherwise extend the
 		 * buffer.
 		 */
@@ -352,18 +358,6 @@ sbuf_put_byte(int c, struct sbuf *s)
 }
 
 /*
- * Append a non-NUL character to an sbuf.  This prototype signature is
- * suitable for use with kvprintf(9).
- */
-static void
-sbuf_putc_func(int c, void *arg)
-{
-
-	if (c != '\0')
-		sbuf_put_byte(c, arg);
-}
-
-/*
  * Append a byte string to an sbuf.
  */
 int
@@ -378,10 +372,10 @@ sbuf_bcat(struct sbuf *s, const void *bu
 	if (s->s_error != 0)
 		return (-1);
 	for (; str < end; str++) {
-		sbuf_put_byte(*str, s);
+		sbuf_put_byte(s, *str);
 		if (s->s_error != 0)
 			return (-1);
- 	}
+	}
 	return (0);
 }
 
@@ -443,7 +437,7 @@ sbuf_cat(struct sbuf *s, const char *str
 		return (-1);
 
 	while (*str != '\0') {
-		sbuf_put_byte(*str++, s);
+		sbuf_put_byte(s, *str++);
 		if (s->s_error != 0)
 			return (-1);
 	}
@@ -507,6 +501,19 @@ sbuf_cpy(struct sbuf *s, const char *str
  * Format the given argument list and append the resulting string to an sbuf.
  */
 #ifdef _KERNEL
+
+/*
+ * Append a non-NUL character to an sbuf.  This prototype signature is
+ * suitable for use with kvprintf(9).
+ */
+static void
+sbuf_putc_func(int c, void *arg)
+{
+
+	if (c != '\0')
+		sbuf_put_byte(arg, c);
+}
+
 int
 sbuf_vprintf(struct sbuf *s, const char *fmt, va_list ap)
 {
@@ -611,7 +618,7 @@ int
 sbuf_putc(struct sbuf *s, int c)
 {
 
-	sbuf_putc_func(c, s);
+	sbuf_put_byte(s, c);
 	if (s->s_error != 0)
 		return (-1);
 	return (0);
@@ -654,24 +661,23 @@ sbuf_error(const struct sbuf *s)
 int
 sbuf_finish(struct sbuf *s)
 {
-	int error;
 
 	assert_sbuf_integrity(s);
 	assert_sbuf_state(s, 0);
 
-	error = s->s_error;
 	if (s->s_drain_func != NULL) {
-		while (s->s_len > 0 && error == 0)
-			error = sbuf_drain(s);
+		while (s->s_len > 0 && s->s_error == 0)
+			s->s_error = sbuf_drain(s);
 	}
 	s->s_buf[s->s_len] = '\0';
-	s->s_error = 0;
 	SBUF_SETFLAG(s, SBUF_FINISHED);
 #ifdef _KERNEL
-	return (error);
+	return (s->s_error);
 #else
-	errno = error;
-	return (-1);
+	errno = s->s_error;
+	if (s->s_error)
+		return (-1);
+	return (0);
 #endif
 }
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201105170636.p4H6aWtF016431>