diff options
author | Jeremy Sowden <jeremy@azazel.net> | 2021-11-30 10:55:48 +0000 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2022-01-03 15:00:49 +0100 |
commit | 53d669d95c94aab4366b8fe9544d61369aa384b5 (patch) | |
tree | 5cb0680291cd6f3823dd3b32744615b3609a07f7 /output/sqlite3 | |
parent | 1d9fd9d64b17b48dd0b38bdebb7086c88a649e1b (diff) |
output: SQLITE3: improve formatting of insert statement
`sqlite3_createstmt` contains a variable `stmt_pos` which points to the
end of the SQL already written, where the next chunk should be appended.
Currently, this is assigned after every write:
sprintf(stmt_pos, ...);
stmt_pos = priv->stmt + strlen(priv->stmt);
However, since `sprintf` returns the number of bytes written, increment
`stmt_pos` by the return-value of `sprintf` in order to avoid the
repeated `strlen` calls.
Pablo mangled this original patch to add this chunk at the end of this
patch (originally submitted as a conversion to use strcpy).
+ for (i = 0; i < cols - 1; i++)
+ stmt_pos += sprintf(stmt_pos, "?,");
Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'output/sqlite3')
-rw-r--r-- | output/sqlite3/ulogd_output_SQLITE3.c | 16 |
1 files changed, 6 insertions, 10 deletions
diff --git a/output/sqlite3/ulogd_output_SQLITE3.c b/output/sqlite3/ulogd_output_SQLITE3.c index 41aeeec..692ff2b 100644 --- a/output/sqlite3/ulogd_output_SQLITE3.c +++ b/output/sqlite3/ulogd_output_SQLITE3.c @@ -226,9 +226,9 @@ sqlite3_createstmt(struct ulogd_pluginstance *pi) ulogd_log(ULOGD_ERROR, "SQLITE3: out of memory\n"); return -1; } + stmt_pos = priv->stmt; - sprintf(priv->stmt, "insert into %s (", table_ce(pi)); - stmt_pos = priv->stmt + strlen(priv->stmt); + stmt_pos += sprintf(stmt_pos, "insert into %s (", table_ce(pi)); tailq_for_each(f, priv->fields, link) { strncpy(buf, f->name, ULOGD_MAX_KEYLEN); @@ -236,21 +236,17 @@ sqlite3_createstmt(struct ulogd_pluginstance *pi) while ((underscore = strchr(buf, '.'))) *underscore = '_'; - sprintf(stmt_pos, "%s,", buf); - stmt_pos = priv->stmt + strlen(priv->stmt); + stmt_pos += sprintf(stmt_pos, "%s,", buf); cols++; } *(stmt_pos - 1) = ')'; - sprintf(stmt_pos, " values ("); - stmt_pos = priv->stmt + strlen(priv->stmt); + stmt_pos += sprintf(stmt_pos, " values ("); - for (i = 0; i < cols - 1; i++) { - sprintf(stmt_pos,"?,"); - stmt_pos += 2; - } + for (i = 0; i < cols - 1; i++) + stmt_pos += sprintf(stmt_pos, "?,"); sprintf(stmt_pos, "?)"); ulogd_log(ULOGD_DEBUG, "%s: stmt='%s'\n", pi->id, priv->stmt); |