Deleted Added
full compact
subr_sbuf.c (279992) subr_sbuf.c (280149)
1/*-
2 * Copyright (c) 2000-2008 Poul-Henning Kamp
3 * Copyright (c) 2000-2008 Dag-Erling Co��dan Sm��rgrav
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:

--- 13 unchanged lines hidden (view full) ---

22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 * SUCH DAMAGE.
27 */
28
29#include <sys/cdefs.h>
1/*-
2 * Copyright (c) 2000-2008 Poul-Henning Kamp
3 * Copyright (c) 2000-2008 Dag-Erling Co��dan Sm��rgrav
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:

--- 13 unchanged lines hidden (view full) ---

22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 * SUCH DAMAGE.
27 */
28
29#include <sys/cdefs.h>
30__FBSDID("$FreeBSD: head/sys/kern/subr_sbuf.c 279992 2015-03-14 16:02:11Z ian $");
30__FBSDID("$FreeBSD: head/sys/kern/subr_sbuf.c 280149 2015-03-16 17:45:41Z ian $");
31
32#include <sys/param.h>
33
34#ifdef _KERNEL
35#include <sys/ctype.h>
36#include <sys/errno.h>
37#include <sys/kernel.h>
38#include <sys/malloc.h>

--- 26 unchanged lines hidden (view full) ---

65 */
66#define SBUF_ISDYNAMIC(s) ((s)->s_flags & SBUF_DYNAMIC)
67#define SBUF_ISDYNSTRUCT(s) ((s)->s_flags & SBUF_DYNSTRUCT)
68#define SBUF_ISFINISHED(s) ((s)->s_flags & SBUF_FINISHED)
69#define SBUF_HASROOM(s) ((s)->s_len < (s)->s_size - 1)
70#define SBUF_FREESPACE(s) ((s)->s_size - ((s)->s_len + 1))
71#define SBUF_CANEXTEND(s) ((s)->s_flags & SBUF_AUTOEXTEND)
72#define SBUF_ISSECTION(s) ((s)->s_flags & SBUF_INSECTION)
31
32#include <sys/param.h>
33
34#ifdef _KERNEL
35#include <sys/ctype.h>
36#include <sys/errno.h>
37#include <sys/kernel.h>
38#include <sys/malloc.h>

--- 26 unchanged lines hidden (view full) ---

65 */
66#define SBUF_ISDYNAMIC(s) ((s)->s_flags & SBUF_DYNAMIC)
67#define SBUF_ISDYNSTRUCT(s) ((s)->s_flags & SBUF_DYNSTRUCT)
68#define SBUF_ISFINISHED(s) ((s)->s_flags & SBUF_FINISHED)
69#define SBUF_HASROOM(s) ((s)->s_len < (s)->s_size - 1)
70#define SBUF_FREESPACE(s) ((s)->s_size - ((s)->s_len + 1))
71#define SBUF_CANEXTEND(s) ((s)->s_flags & SBUF_AUTOEXTEND)
72#define SBUF_ISSECTION(s) ((s)->s_flags & SBUF_INSECTION)
73#define SBUF_NULINCLUDED(s) ((s)->s_flags & SBUF_INCLUDENUL)
73
74/*
75 * Set / clear flags
76 */
77#define SBUF_SETFLAG(s, f) do { (s)->s_flags |= (f); } while (0)
78#define SBUF_CLEARFLAG(s, f) do { (s)->s_flags &= ~(f); } while (0)
79
80#define SBUF_MINEXTENDSIZE 16 /* Should be power of 2. */

--- 14 unchanged lines hidden (view full) ---

95static void
96_assert_sbuf_integrity(const char *fun, struct sbuf *s)
97{
98
99 KASSERT(s != NULL,
100 ("%s called with a NULL sbuf pointer", fun));
101 KASSERT(s->s_buf != NULL,
102 ("%s called with uninitialized or corrupt sbuf", fun));
74
75/*
76 * Set / clear flags
77 */
78#define SBUF_SETFLAG(s, f) do { (s)->s_flags |= (f); } while (0)
79#define SBUF_CLEARFLAG(s, f) do { (s)->s_flags &= ~(f); } while (0)
80
81#define SBUF_MINEXTENDSIZE 16 /* Should be power of 2. */

--- 14 unchanged lines hidden (view full) ---

96static void
97_assert_sbuf_integrity(const char *fun, struct sbuf *s)
98{
99
100 KASSERT(s != NULL,
101 ("%s called with a NULL sbuf pointer", fun));
102 KASSERT(s->s_buf != NULL,
103 ("%s called with uninitialized or corrupt sbuf", fun));
103 KASSERT(s->s_len < s->s_size,
104 ("wrote past end of sbuf (%jd >= %jd)",
105 (intmax_t)s->s_len, (intmax_t)s->s_size));
104 if (SBUF_ISFINISHED(s) && SBUF_NULINCLUDED(s)) {
105 KASSERT(s->s_len <= s->s_size,
106 ("wrote past end of sbuf (%jd >= %jd)",
107 (intmax_t)s->s_len, (intmax_t)s->s_size));
108 } else {
109 KASSERT(s->s_len < s->s_size,
110 ("wrote past end of sbuf (%jd >= %jd)",
111 (intmax_t)s->s_len, (intmax_t)s->s_size));
112 }
106}
107
108static void
109_assert_sbuf_state(const char *fun, struct sbuf *s, int state)
110{
111
112 KASSERT((s->s_flags & SBUF_FINISHED) == state,
113 ("%s called with %sfinished or corrupt sbuf", fun,

--- 601 unchanged lines hidden (view full) ---

715int
716sbuf_finish(struct sbuf *s)
717{
718
719 assert_sbuf_integrity(s);
720 assert_sbuf_state(s, 0);
721
722 s->s_buf[s->s_len] = '\0';
113}
114
115static void
116_assert_sbuf_state(const char *fun, struct sbuf *s, int state)
117{
118
119 KASSERT((s->s_flags & SBUF_FINISHED) == state,
120 ("%s called with %sfinished or corrupt sbuf", fun,

--- 601 unchanged lines hidden (view full) ---

722int
723sbuf_finish(struct sbuf *s)
724{
725
726 assert_sbuf_integrity(s);
727 assert_sbuf_state(s, 0);
728
729 s->s_buf[s->s_len] = '\0';
723 if (s->s_flags & SBUF_INCLUDENUL)
730 if (SBUF_NULINCLUDED(s))
724 s->s_len++;
725 if (s->s_drain_func != NULL) {
726 while (s->s_len > 0 && s->s_error == 0)
727 s->s_error = sbuf_drain(s);
728 }
729 SBUF_SETFLAG(s, SBUF_FINISHED);
730#ifdef _KERNEL
731 return (s->s_error);

--- 32 unchanged lines hidden (view full) ---

764 /* don't care if it's finished or not */
765 KASSERT(s->s_drain_func == NULL,
766 ("%s makes no sense on sbuf %p with drain", __func__, s));
767
768 if (s->s_error != 0)
769 return (-1);
770
771 /* If finished, nulterm is already in len, else add one. */
731 s->s_len++;
732 if (s->s_drain_func != NULL) {
733 while (s->s_len > 0 && s->s_error == 0)
734 s->s_error = sbuf_drain(s);
735 }
736 SBUF_SETFLAG(s, SBUF_FINISHED);
737#ifdef _KERNEL
738 return (s->s_error);

--- 32 unchanged lines hidden (view full) ---

771 /* don't care if it's finished or not */
772 KASSERT(s->s_drain_func == NULL,
773 ("%s makes no sense on sbuf %p with drain", __func__, s));
774
775 if (s->s_error != 0)
776 return (-1);
777
778 /* If finished, nulterm is already in len, else add one. */
772 if ((s->s_flags & (SBUF_INCLUDENUL | SBUF_FINISHED)) == SBUF_INCLUDENUL)
779 if (SBUF_NULINCLUDED(s) && !SBUF_ISFINISHED(s))
773 return (s->s_len + 1);
774 return (s->s_len);
775}
776
777/*
778 * Clear an sbuf, free its buffer if necessary.
779 */
780void

--- 79 unchanged lines hidden ---
780 return (s->s_len + 1);
781 return (s->s_len);
782}
783
784/*
785 * Clear an sbuf, free its buffer if necessary.
786 */
787void

--- 79 unchanged lines hidden ---