svn commit: r221993 - in head/sys: kern sys

mdf at FreeBSD.org mdf at FreeBSD.org
Mon May 16 17:35:21 UTC 2011


On Mon, May 16, 2011 at 9:18 AM, Poul-Henning Kamp <phk at freebsd.org> wrote:
> Author: phk
> Date: Mon May 16 16:18:40 2011
> New Revision: 221993
> URL: http://svn.freebsd.org/changeset/base/221993
>
> Log:
>  Change the length quantities of sbufs to be ssize_t rather than int.

Why?

I don't object at all to changing the API to return ssize_t (though I
see no need), but changing the struct breaks the KBI for no
perceivable gain.  Do we really expect someone to put more than 2GB
into something that is a string buffer?

Thanks,
matthew

>  Constify a couple of arguments.
>
> Modified:
>  head/sys/kern/subr_sbuf.c
>  head/sys/sys/sbuf.h
>
> Modified: head/sys/kern/subr_sbuf.c
> ==============================================================================
> --- head/sys/kern/subr_sbuf.c   Mon May 16 15:59:50 2011        (r221992)
> +++ head/sys/kern/subr_sbuf.c   Mon May 16 16:18:40 2011        (r221993)
> @@ -94,7 +94,8 @@ _assert_sbuf_integrity(const char *fun,
>        KASSERT(s->s_buf != NULL,
>            ("%s called with uninitialized or corrupt sbuf", fun));
>        KASSERT(s->s_len < s->s_size,
> -           ("wrote past end of sbuf (%d >= %d)", s->s_len, s->s_size));
> +           ("wrote past end of sbuf (%jd >= %jd)",
> +           (intmax_t)s->s_len, (intmax_t)s->s_size));
>  }
>
>  static void
> @@ -255,16 +256,17 @@ sbuf_clear(struct sbuf *s)
>  * Effectively truncates the sbuf at the new position.
>  */
>  int
> -sbuf_setpos(struct sbuf *s, int 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 (%d)", pos));
> +           ("attempt to seek to a negative position (%jd)", (intmax_t)pos));
>        KASSERT(pos < s->s_size,
> -           ("attempt to seek past end of sbuf (%d >= %d)", pos, s->s_size));
> +           ("attempt to seek past end of sbuf (%jd >= %jd)",
> +           (intmax_t)pos, (intmax_t)s->s_size));
>
>        if (pos < 0 || pos > s->s_len)
>                return (-1);
> @@ -640,7 +642,7 @@ sbuf_trim(struct sbuf *s)
>  * Check if an sbuf has an error.
>  */
>  int
> -sbuf_error(struct sbuf *s)
> +sbuf_error(const struct sbuf *s)
>  {
>
>        return (s->s_error);
> @@ -691,7 +693,7 @@ sbuf_data(struct sbuf *s)
>  /*
>  * Return the length of the sbuf data.
>  */
> -int
> +ssize_t
>  sbuf_len(struct sbuf *s)
>  {
>
> @@ -728,7 +730,7 @@ sbuf_delete(struct sbuf *s)
>  * Check if an sbuf has been finished.
>  */
>  int
> -sbuf_done(struct sbuf *s)
> +sbuf_done(const struct sbuf *s)
>  {
>
>        return (SBUF_ISFINISHED(s));
>
> Modified: head/sys/sys/sbuf.h
> ==============================================================================
> --- head/sys/sys/sbuf.h Mon May 16 15:59:50 2011        (r221992)
> +++ head/sys/sys/sbuf.h Mon May 16 16:18:40 2011        (r221993)
> @@ -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 */
> -       int              s_size;        /* size of storage buffer */
> -       int              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 */
> @@ -63,7 +63,7 @@ struct sbuf   *sbuf_new(struct sbuf *, cha
>  #define                 sbuf_new_auto()                                \
>        sbuf_new(NULL, NULL, 0, SBUF_AUTOEXTEND)
>  void            sbuf_clear(struct sbuf *);
> -int             sbuf_setpos(struct sbuf *, int);
> +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 *);
> @@ -75,11 +75,11 @@ int          sbuf_vprintf(struct sbuf *, const
>  int             sbuf_putc(struct sbuf *, int);
>  void            sbuf_set_drain(struct sbuf *, sbuf_drain_func *, void *);
>  int             sbuf_trim(struct sbuf *);
> -int             sbuf_error(struct sbuf *);
> +int             sbuf_error(const struct sbuf *);
>  int             sbuf_finish(struct sbuf *);
>  char           *sbuf_data(struct sbuf *);
> -int             sbuf_len(struct sbuf *);
> -int             sbuf_done(struct sbuf *);
> +ssize_t                 sbuf_len(struct sbuf *);
> +int             sbuf_done(const struct sbuf *);
>  void            sbuf_delete(struct sbuf *);
>
>  #ifdef _KERNEL
>


More information about the svn-src-head mailing list