aboutsummaryrefslogtreecommitdiff
path: root/src/vmod_dbrw.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/vmod_dbrw.c')
-rw-r--r--src/vmod_dbrw.c30
1 files changed, 13 insertions, 17 deletions
diff --git a/src/vmod_dbrw.c b/src/vmod_dbrw.c
index 8afaf04..2895ea5 100644
--- a/src/vmod_dbrw.c
+++ b/src/vmod_dbrw.c
@@ -265,12 +265,10 @@ expand_backref(struct sess *sp, const char *str, const char *val,
size_t matchcount, regmatch_t *matches, char *qry)
{
unsigned u;
- char *b, *e, *p;
+ char *b, *p;
u = WS_Reserve(sp->wrk->ws, 0);
- e = b = sp->wrk->ws->f;
- e += u;
- p = b;
+ p = b = sp->wrk->ws->f;
while (*val) {
if (u == 0) {
@@ -310,17 +308,9 @@ expand_backref(struct sess *sp, const char *str, const char *val,
u--;
}
- if (u == 0) {
- WS_Release(sp->wrk->ws, 0);
- return NULL;
- }
-
- *p = 0;
- u--;
-
if (qry) {
- size_t len = strlen(qry) + 1;
- if (len >= u) {
+ size_t len = strlen(qry);
+ if (len + 1 >= u) {
WS_Release(sp->wrk->ws, 0);
return NULL;
}
@@ -329,11 +319,17 @@ expand_backref(struct sess *sp, const char *str, const char *val,
else
*p++ = '?';
memcpy(p, qry, len);
+ p += len;
u -= len;
- }
+ }
+
+ if (u == 0) {
+ WS_Release(sp->wrk->ws, 0);
+ return NULL;
+ }
+ *p = 0;
- if (u)
- WS_Release(sp->wrk->ws, u);
+ WS_ReleaseP(sp->wrk->ws, p);
return b;
}

Return to:

Send suggestions and report system problems to the System administrator.