From dunstan@freebsd.czest.pl  Sun Dec 18 13:46:54 2005
Return-Path: <dunstan@freebsd.czest.pl>
Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125])
	by hub.freebsd.org (Postfix) with ESMTP id 8CBCB16A41F
	for <FreeBSD-gnats-submit@freebsd.org>; Sun, 18 Dec 2005 13:46:54 +0000 (GMT)
	(envelope-from dunstan@freebsd.czest.pl)
Received: from freebsd.czest.pl (freebsd.czest.pl [80.48.250.4])
	by mx1.FreeBSD.org (Postfix) with ESMTP id B2ECD43D5C
	for <FreeBSD-gnats-submit@freebsd.org>; Sun, 18 Dec 2005 13:46:53 +0000 (GMT)
	(envelope-from dunstan@freebsd.czest.pl)
Received: from freebsd.czest.pl (freebsd.czest.pl [80.48.250.4])
	by freebsd.czest.pl (8.12.10/8.12.9) with ESMTP id jBIDnOPx080320
	for <FreeBSD-gnats-submit@freebsd.org>; Sun, 18 Dec 2005 13:49:25 GMT
	(envelope-from dunstan@freebsd.czest.pl)
Received: (from dunstan@localhost)
	by freebsd.czest.pl (8.13.4/8.12.9/Submit) id jBIDnMq2080319;
	Sun, 18 Dec 2005 13:49:22 GMT
	(envelope-from dunstan)
Message-Id: <200512181349.jBIDnMq2080319@freebsd.czest.pl>
Date: Sun, 18 Dec 2005 13:49:22 GMT
From: "Wojciech A. Koszek" <dunstan@freebsd.czest.pl>
Reply-To: "Wojciech A. Koszek" <dunstan@freebsd.czest.pl>
To: FreeBSD-gnats-submit@freebsd.org
Cc:
Subject: [PATCH] New function: sbuf_size(), which returns size of sbuf
X-Send-Pr-Version: 3.113
X-GNATS-Notify:

>Number:         90602
>Category:       kern
>Synopsis:       [PATCH] New function: sbuf_size(), which returns size of sbuf
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    wkoszek
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Sun Dec 18 13:50:02 GMT 2005
>Closed-Date:    Wed Mar 01 17:11:41 GMT 2006
>Last-Modified:  Wed Mar 01 17:11:41 GMT 2006
>Originator:     Wojciech A. Koszek
>Release:        FreeBSD 7.0-CURRENT i386
>Organization:
>Environment:
System: FreeBSD laptop.freebsd.czest.pl 7.0-CURRENT FreeBSD 7.0-CURRENT #2: Sun Dec 18 01:31:49 CET 2005 dunstan@laptop.freebsd.czest.pl:/usr/obj/usr/src/sys/LAPTOP i386


>Description:
It's hard to determine buffer size allocated for sbuf. I'd find it
really useful and will be happy to see it commited.
>How-To-Repeat:

>Fix:
I have implemented sbuf_size() to fill this gap and updated manual page
(with minor style(9) tweak):

	http://freebsd.czest.pl/dunstan/FreeBSD/sbuf_size.0.patch

Comments are welcome!

--- sbuf_size.0.patch begins here ---
(c) 2005 <Wojciech A. Koszek dunstan^freebsd.czest.pl>

Patch against FreeBSD 7.0-CURRENT, kern.osreldate: 700008.

diff -upr /usr/src/share/man/man9/sbuf.9 src/share/man/man9/sbuf.9
--- /usr/src/share/man/man9/sbuf.9	Fri Jul  9 13:44:49 2004
+++ src/share/man/man9/sbuf.9	Sun Dec 18 14:12:41 2005
@@ -46,6 +46,7 @@
 .Nm sbuf_finish ,
 .Nm sbuf_data ,
 .Nm sbuf_len ,
+.Nm sbuf_size ,
 .Nm sbuf_done ,
 .Nm sbuf_delete
 .Nd safe string formatting
@@ -87,6 +88,8 @@
 .Ft int
 .Fn sbuf_len "struct sbuf *s"
 .Ft int
+.Fn sbuf_size "struct sbuf *s"
+.Ft int
 .Fn sbuf_done "struct sbuf *s"
 .Ft void
 .Fn sbuf_delete "struct sbuf *s"
@@ -291,6 +294,9 @@ functions return the actual string and i
 .Fn sbuf_data
 only works on a finished
 .Fa sbuf .
+.Fn sbuf_size
+returns size of data buffer allocated for
+.Fa sbuf .
 .Fn sbuf_done
 returns non-zero if the sbuf is finished.
 .Sh NOTES
@@ -337,6 +343,9 @@ and
 return
 .Dv NULL
 and \-1, respectively, if the buffer overflowed.
+.Pp
+.Fn sbuf_size
+returns size of allocated buffer.
 .Sh SEE ALSO
 .Xr printf 3 ,
 .Xr strcat 3 ,
diff -upr /usr/src/sys/kern/subr_sbuf.c src/sys/kern/subr_sbuf.c
--- /usr/src/sys/kern/subr_sbuf.c	Thu Feb 10 13:02:37 2005
+++ src/sys/kern/subr_sbuf.c	Sun Dec 18 14:14:57 2005
@@ -547,6 +547,18 @@ sbuf_len(struct sbuf *s)
 }
 
 /*
+ * Return the size of data buffer.
+ */
+int
+sbuf_size(struct sbuf *s)
+{
+	assert_sbuf_integrity(s);
+
+	return s->s_size;
+}
+
+
+/*
  * Clear an sbuf, free its buffer if necessary.
  */
 void
@@ -572,5 +584,5 @@ int
 sbuf_done(struct sbuf *s)
 {
 
-	return(SBUF_ISFINISHED(s));
+	return (SBUF_ISFINISHED(s));
 }
diff -upr /usr/src/sys/sys/sbuf.h src/sys/sys/sbuf.h
--- /usr/src/sys/sys/sbuf.h	Fri Jul  9 13:35:30 2004
+++ src/sys/sys/sbuf.h	Sat Dec 17 00:50:40 2005
@@ -70,6 +70,7 @@ int		 sbuf_overflowed(struct sbuf *);
 void		 sbuf_finish(struct sbuf *);
 char		*sbuf_data(struct sbuf *);
 int		 sbuf_len(struct sbuf *);
+int		 sbuf_size(struct sbuf *);
 int		 sbuf_done(struct sbuf *);
 void		 sbuf_delete(struct sbuf *);
 
--- sbuf_size.0.patch ends here ---


>Release-Note:
>Audit-Trail:
Class-Changed-From-To: sw-bug->change-request 
Class-Changed-By: linimon 
Class-Changed-When: Sun Dec 18 19:56:52 UTC 2005 
Class-Changed-Why:  
Better class for this. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=90602 
Responsible-Changed-From-To: freebsd-bugs->wkoszek 
Responsible-Changed-By: wkoszek 
Responsible-Changed-When: Wed Mar 1 17:05:40 UTC 2006 
Responsible-Changed-Why:  
Take this one. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=90602 
State-Changed-From-To: open->closed 
State-Changed-By: wkoszek 
State-Changed-When: Wed Mar 1 17:07:21 UTC 2006 
State-Changed-Why:  
This raport was written while I've been writing abort2(). I wanted to have 
that function, but it would make ABI of abort2() dependant on sbuf ABI. 
Poul-Henning didn't like it. 

Discussed with:	phk 

http://www.freebsd.org/cgi/query-pr.cgi?pr=90602 
>Unformatted:
