From 43fb9e2b6040727bf1a4c1838abf6e8c4954aa1c Mon Sep 17 00:00:00 2001 From: phk Date: Sun, 21 Dec 2008 18:41:43 +0000 Subject: [PATCH] Make vsb_new() a tad easier for FlexeLint to figure out. Give it proper semantics git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@3496 d4fa192b-c00b-0410-8231-f00ffab90ce4 --- varnish-cache/bin/varnishd/flint.lnt | 3 +-- varnish-cache/lib/libvarnish/vsb.c | 21 ++++++++++----------- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/varnish-cache/bin/varnishd/flint.lnt b/varnish-cache/bin/varnishd/flint.lnt index f27ed57d..492c71b1 100644 --- a/varnish-cache/bin/varnishd/flint.lnt +++ b/varnish-cache/bin/varnishd/flint.lnt @@ -56,13 +56,12 @@ -emacro(702, WEXITSTATUS) // signed shift right -efunc(525, VCC_Return_Name) // Negative indent - // -header(../../config.h) // Fix strchr() semtics, it can only return NULL if arg2 != 0 -sem(strchr, 1p, type(1), 2n == 0 ? (@p < 1p) : (@p < 1p || @p == 0 )) --sem(vsb_new, @p == malloc(1)) +-sem(vsb_new, @p == (1p ? 1p : malloc(1))) -sem(vsb_delete, custodial(1)) -sem(lbv_assert, r_no) -sem(lbv_xxxassert, r_no) diff --git a/varnish-cache/lib/libvarnish/vsb.c b/varnish-cache/lib/libvarnish/vsb.c index 16af1371..af9f1701 100644 --- a/varnish-cache/lib/libvarnish/vsb.c +++ b/varnish-cache/lib/libvarnish/vsb.c @@ -162,15 +162,17 @@ vsb_new(struct vsb *s, char *buf, int length, int flags) s = (struct vsb *)SBMALLOC(sizeof *s); if (s == NULL) return (NULL); - memset(s, 0, sizeof *s); - s->s_flags = flags; - s->s_magic = VSB_MAGIC; + if (vsb_new(s, buf, length, flags) == NULL) { + free(s); + return (NULL); + } VSB_SETFLAG(s, VSB_DYNSTRUCT); - } else { - memset(s, 0, sizeof *s); - s->s_flags = flags; - s->s_magic = VSB_MAGIC; + return (s); } + + memset(s, 0, sizeof *s); + s->s_flags = flags; + s->s_magic = VSB_MAGIC; s->s_size = length; if (buf) { s->s_buf = buf; @@ -179,11 +181,8 @@ vsb_new(struct vsb *s, char *buf, int length, int flags) if (flags & VSB_AUTOEXTEND) s->s_size = vsb_extendsize(s->s_size); s->s_buf = (char *)SBMALLOC(s->s_size); - if (s->s_buf == NULL) { - if (VSB_ISDYNSTRUCT(s)) - SBFREE(s); + if (s->s_buf == NULL) return (NULL); - } VSB_SETFLAG(s, VSB_DYNAMIC); return (s); } -- 2.39.5