From 5b59df4ed393d9374b2e7c1d1959bbd1b2f30de5 Mon Sep 17 00:00:00 2001 From: gahr Date: Mon, 28 Jul 2014 07:20:22 +0000 Subject: Unbreak the ABI by reverting r268494 until the compat shims are provided --- lib/libsbuf/Makefile | 2 +- sys/kern/subr_sbuf.c | 23 +++++++---------------- sys/sys/sbuf.h | 9 +++------ 3 files changed, 11 insertions(+), 23 deletions(-) diff --git a/lib/libsbuf/Makefile b/lib/libsbuf/Makefile index 42d4a4e..79d3fe9 100644 --- a/lib/libsbuf/Makefile +++ b/lib/libsbuf/Makefile @@ -4,7 +4,7 @@ LIB= sbuf SHLIBDIR?= /lib SRCS= subr_sbuf.c -SHLIB_MAJOR = 7 +SHLIB_MAJOR = 6 SYMBOL_MAPS= ${.CURDIR}/Symbol.map VERSION_DEF= ${.CURDIR}/Version.def diff --git a/sys/kern/subr_sbuf.c b/sys/kern/subr_sbuf.c index a0f3b7e..1490bc6 100644 --- a/sys/kern/subr_sbuf.c +++ b/sys/kern/subr_sbuf.c @@ -152,16 +152,11 @@ static int sbuf_extend(struct sbuf *s, int addlen) { char *newbuf; - size_t newsize; + int newsize; if (!SBUF_CANEXTEND(s)) return (-1); newsize = sbuf_extendsize(s->s_size + addlen); - if (s->s_buf == s->s_static_buf && newsize <= sizeof(s->s_static_buf)) { - s->s_size = sizeof(s->s_static_buf); - return (0); - } - newbuf = SBMALLOC(newsize); if (newbuf == NULL) return (-1); @@ -181,7 +176,7 @@ sbuf_extend(struct sbuf *s, int addlen) * big enough to hold at least length characters. */ static struct sbuf * -sbuf_newbuf(struct sbuf *s, char *buf, size_t length, int flags) +sbuf_newbuf(struct sbuf *s, char *buf, int length, int flags) { memset(s, 0, sizeof(*s)); @@ -200,11 +195,6 @@ sbuf_newbuf(struct sbuf *s, char *buf, size_t length, int flags) if ((flags & SBUF_AUTOEXTEND) != 0) s->s_size = sbuf_extendsize(s->s_size); - if (s->s_size <= sizeof(s->s_static_buf)) { - s->s_buf = s->s_static_buf; - return (s); - } - s->s_buf = SBMALLOC(s->s_size); if (s->s_buf == NULL) return (NULL); @@ -293,19 +283,21 @@ sbuf_clear(struct sbuf *s) * Effectively truncates the sbuf at the new position. */ int -sbuf_setpos(struct sbuf *s, size_t pos) +sbuf_setpos(struct sbuf *s, ssize_t pos) { assert_sbuf_integrity(s); assert_sbuf_state(s, 0); + KASSERT(pos >= 0, + ("attempt to seek to a negative position (%jd)", (intmax_t)pos)); KASSERT(pos < s->s_size, ("attempt to seek past end of sbuf (%jd >= %jd)", (intmax_t)pos, (intmax_t)s->s_size)); KASSERT(!SBUF_ISSECTION(s), ("attempt to seek when in a section")); - if (pos > s->s_len) + if (pos < 0 || pos > s->s_len) return (-1); s->s_len = pos; return (0); @@ -569,8 +561,7 @@ int sbuf_vprintf(struct sbuf *s, const char *fmt, va_list ap) { va_list ap_copy; - size_t len; - int error; + int error, len; assert_sbuf_integrity(s); assert_sbuf_state(s, 0); diff --git a/sys/sys/sbuf.h b/sys/sys/sbuf.h index 9c794c8..9816a4c 100644 --- a/sys/sys/sbuf.h +++ b/sys/sys/sbuf.h @@ -44,8 +44,8 @@ struct sbuf { sbuf_drain_func *s_drain_func; /* drain function */ void *s_drain_arg; /* user-supplied drain argument */ int s_error; /* current error code */ - size_t s_size; /* size of storage buffer */ - size_t s_len; /* current length of string */ + ssize_t s_size; /* size of storage buffer */ + ssize_t s_len; /* current length of string */ #define SBUF_FIXEDLEN 0x00000000 /* fixed length buffer (default) */ #define SBUF_AUTOEXTEND 0x00000001 /* automatically extend buffer */ #define SBUF_USRFLAGMSK 0x0000ffff /* mask of flags the user may specify */ @@ -55,9 +55,6 @@ struct sbuf { #define SBUF_INSECTION 0x00100000 /* set by sbuf_start_section() */ int s_flags; /* flags */ ssize_t s_sect_len; /* current length of section */ -#define SBUF_STATIC_LEN 64 /* static storage buffer length */ - char s_static_buf[SBUF_STATIC_LEN]; - /* static storage buffer */ }; __BEGIN_DECLS @@ -68,7 +65,7 @@ struct sbuf *sbuf_new(struct sbuf *, char *, int, int); #define sbuf_new_auto() \ sbuf_new(NULL, NULL, 0, SBUF_AUTOEXTEND) void sbuf_clear(struct sbuf *); -int sbuf_setpos(struct sbuf *, size_t); +int sbuf_setpos(struct sbuf *, ssize_t); int sbuf_bcat(struct sbuf *, const void *, size_t); int sbuf_bcpy(struct sbuf *, const void *, size_t); int sbuf_cat(struct sbuf *, const char *); -- cgit v1.1