Skip to content

Commit a2ab304

Browse files
committed
filterx: stack allocate strings where it is possible and useful
Signed-off-by: Attila Szakacs <attila.szakacs@axoflow.com>
1 parent 86fd0e3 commit a2ab304

9 files changed

+24
-20
lines changed

lib/filterx/expr-regexp-search.c

+5-5
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ _store_matches_to_list(pcre2_code_8 *pattern, const FilterXReMatchState *state,
6868
if (begin_index < 0 || end_index < 0)
6969
continue;
7070

71-
FilterXObject *value = filterx_string_new(state->lhs_str + begin_index, end_index - begin_index);
71+
FILTERX_STRING_DECLARE_ON_STACK(value, state->lhs_str + begin_index, end_index - begin_index);
7272
gboolean success = filterx_list_append(fillable, &value);
7373
filterx_object_unref(value);
7474

@@ -101,8 +101,8 @@ _store_matches_to_dict(pcre2_code_8 *pattern, const FilterXReMatchState *state,
101101
continue;
102102

103103
g_snprintf(num_str_buf, sizeof(num_str_buf), "%" G_GUINT32_FORMAT, i);
104-
FilterXObject *key = filterx_string_new(num_str_buf, -1);
105-
FilterXObject *value = filterx_string_new(state->lhs_str + begin_index, end_index - begin_index);
104+
FILTERX_STRING_DECLARE_ON_STACK(key, num_str_buf, -1);
105+
FILTERX_STRING_DECLARE_ON_STACK(value, state->lhs_str + begin_index, end_index - begin_index);
106106

107107
gboolean success = filterx_object_set_subscript(fillable, key, &value);
108108

@@ -135,8 +135,8 @@ _store_matches_to_dict(pcre2_code_8 *pattern, const FilterXReMatchState *state,
135135
continue;
136136

137137
g_snprintf(num_str_buf, sizeof(num_str_buf), "%" G_GUINT32_FORMAT, n);
138-
FilterXObject *num_key = filterx_string_new(num_str_buf, -1);
139-
FilterXObject *key = filterx_string_new(namedgroup_name, -1);
138+
FILTERX_STRING_DECLARE_ON_STACK(num_key, num_str_buf, -1);
139+
FILTERX_STRING_DECLARE_ON_STACK(key, namedgroup_name, -1);
140140
FilterXObject *value = filterx_object_get_subscript(fillable, num_key);
141141

142142
gboolean success = filterx_object_set_subscript(fillable, key, &value);

lib/filterx/filterx-object.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
FilterXObject *
3131
filterx_object_getattr_string(FilterXObject *self, const gchar *attr_name)
3232
{
33-
FilterXObject *attr = filterx_string_new(attr_name, -1);
33+
FILTERX_STRING_DECLARE_ON_STACK(attr, attr_name, -1);
3434
FilterXObject *res = filterx_object_getattr(self, attr);
3535
filterx_object_unref(attr);
3636
return res;
@@ -39,7 +39,7 @@ filterx_object_getattr_string(FilterXObject *self, const gchar *attr_name)
3939
gboolean
4040
filterx_object_setattr_string(FilterXObject *self, const gchar *attr_name, FilterXObject **new_value)
4141
{
42-
FilterXObject *attr = filterx_string_new(attr_name, -1);
42+
FILTERX_STRING_DECLARE_ON_STACK(attr, attr_name, -1);
4343
gboolean res = filterx_object_setattr(self, attr, new_value);
4444
filterx_object_unref(attr);
4545
return res;

lib/filterx/func-sdata.c

+4-3
Original file line numberDiff line numberDiff line change
@@ -172,8 +172,9 @@ _extract_sd_components(const gchar *key, gssize key_len, const gchar **sd_id_sta
172172
static gboolean
173173
_insert_into_dict(FilterXObject *dict, const gchar *key, gssize key_len, const gchar *value, gssize value_len)
174174
{
175-
FilterXObject *fob_key = filterx_string_new(key, key_len);
176-
FilterXObject *fob_value = filterx_string_new(value, value_len);
175+
FILTERX_STRING_DECLARE_ON_STACK(fob_key, key, key_len);
176+
FILTERX_STRING_DECLARE_ON_STACK(fob_value, value, value_len);
177+
177178
gboolean res = filterx_object_set_subscript(dict, fob_key, &fob_value);
178179

179180
filterx_object_unref(fob_key);
@@ -254,7 +255,7 @@ _generate(FilterXExprGenerator *s, FilterXObject *fillable)
254255
return FALSE;
255256
i += num_insertions + 1;
256257

257-
FilterXObject *sd_id_key = filterx_string_new(current_sd_id_start, current_sd_id_len);
258+
FILTERX_STRING_DECLARE_ON_STACK(sd_id_key, current_sd_id_start, current_sd_id_len);
258259
filterx_object_set_subscript(fillable, sd_id_key, &inner_dict);
259260
filterx_object_unref(inner_dict);
260261
filterx_object_unref(sd_id_key);

lib/filterx/func-vars.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ _add_to_dict(FilterXVariable *variable, gpointer user_data)
5050
name_len = name_buf->len;
5151
}
5252

53-
FilterXObject *name = filterx_string_new(name_str, name_len);
53+
FILTERX_STRING_DECLARE_ON_STACK(name, name_str, name_len);
5454

5555
FilterXObject *value = filterx_variable_get_value(variable);
5656
FilterXObject *cloned_value = filterx_object_clone(value);

lib/filterx/object-metrics-labels.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -172,8 +172,8 @@ _iter(FilterXDict *s, FilterXDictIterFunc func, gpointer user_data)
172172
{
173173
StatsClusterLabel *label = &g_array_index(self->labels, StatsClusterLabel, i);
174174

175-
FilterXObject *name = filterx_string_new(label->name, -1);
176-
FilterXObject *value = filterx_string_new(label->value, -1);
175+
FILTERX_STRING_DECLARE_ON_STACK(name, label->name, -1);
176+
FILTERX_STRING_DECLARE_ON_STACK(value, label->value, -1);
177177

178178
gboolean success = func(name, value, user_data);
179179

modules/cef/event-format-parser.c

+3-3
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,8 @@ _set_dict_value(FilterXObject *out,
8686
const gchar *key, gsize key_len,
8787
const gchar *value, gsize value_len)
8888
{
89-
FilterXObject *dict_key = filterx_string_new(key, key_len);
90-
FilterXObject *dict_val = filterx_string_new(value, value_len);
89+
FILTERX_STRING_DECLARE_ON_STACK(dict_key, key, key_len);
90+
FILTERX_STRING_DECLARE_ON_STACK(dict_val, value, value_len);
9191

9292
gboolean ok = filterx_object_set_subscript(out, dict_key, &dict_val);
9393

@@ -156,7 +156,7 @@ _match_field_to_column(EventParserContext *ctx, Field *field, const gchar *input
156156
gboolean ok = FALSE;
157157
if (!*error && val)
158158
{
159-
FilterXObject *key = filterx_string_new(field->name, -1);
159+
FILTERX_STRING_DECLARE_ON_STACK(key, field->name, -1);
160160
ok = filterx_object_set_subscript(fillable, key, &val);
161161
filterx_object_unref(key);
162162
}

modules/grpc/otel/filterx/object-otel-kvlist.cpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
#include <google/protobuf/util/json_util.h>
3737

3838
#include <stdexcept>
39+
#include <string.h>
3940

4041
/* The deprecated MutableRepeatedPtrField() does not have a proper alternative. */
4142
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
@@ -234,7 +235,8 @@ KVList::iter(FilterXDictIterFunc func, gpointer user_data) const
234235
for (int i = 0; i < repeated_kv->size(); i++)
235236
{
236237
KeyValue &kv = repeated_kv->at(i);
237-
FilterXObject *key = filterx_string_new(kv.key().c_str(), kv.key().length());
238+
239+
FILTERX_STRING_DECLARE_ON_STACK(key, kv.key().c_str(), kv.key().length());
238240
FilterXObject *value = converter->Get(&kv, "value");
239241

240242
bool result = func(key, value, user_data);

modules/grpc/otel/filterx/otel-field.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545

4646
#include "opentelemetry/proto/logs/v1/logs.pb.h"
4747

48+
#include <string.h>
4849

4950
using namespace syslogng::grpc::otel;
5051
using namespace google::protobuf;
@@ -377,7 +378,7 @@ syslogng::grpc::otel::iter_on_otel_protobuf_message_fields(google::protobuf::Mes
377378
ProtoReflectors field_reflectors(message, name);
378379
ProtobufField *converter = syslogng::grpc::otel::otel_converter_by_field_descriptor(field_reflectors.fieldDescriptor);
379380

380-
FilterXObject *key = filterx_string_new(name.c_str(), name.size());
381+
FILTERX_STRING_DECLARE_ON_STACK(key, name.c_str(), name.size());
381382
FilterXObject *value = converter->Get(&message, name);
382383
if (!value)
383384
{

modules/kvformat/filterx-func-parse-kv.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,8 @@ _set_dict_value(FilterXObject *out,
8080
const gchar *key, gsize key_len,
8181
const gchar *value, gsize value_len)
8282
{
83-
FilterXObject *dict_key = filterx_string_new(key, key_len);
84-
FilterXObject *dict_val = filterx_string_new(value, value_len);
83+
FILTERX_STRING_DECLARE_ON_STACK(dict_key, key, key_len);
84+
FILTERX_STRING_DECLARE_ON_STACK(dict_val, value, value_len);
8585

8686
gboolean ok = filterx_object_set_subscript(out, dict_key, &dict_val);
8787

0 commit comments

Comments
 (0)