PROTON-2140: remove str scratch element from pn_data_t
diff --git a/c/src/core/codec.c b/c/src/core/codec.c
index 904fb72..e26ef81 100644
--- a/c/src/core/codec.c
+++ b/c/src/core/codec.c
@@ -86,7 +86,6 @@
pn_data_t *data = (pn_data_t *) object;
free(data->nodes);
pn_buffer_free(data->buf);
- pn_free(data->str);
pn_error_free(data->error);
}
@@ -362,14 +361,6 @@
#define pn_data_hashcode NULL
#define pn_data_compare NULL
-static inline pn_string_t *pni_data_str(pn_data_t *data)
-{
- if (data->str == NULL) {
- data->str = pn_string(NULL);
- }
- return data->str;
-}
-
static inline pn_error_t *pni_data_error(pn_data_t *data)
{
if (data->error == NULL) {
@@ -391,7 +382,6 @@
data->base_parent = 0;
data->base_current = 0;
data->error = NULL;
- data->str = NULL;
return data;
}
@@ -1198,30 +1188,31 @@
return err;
}
-static int pni_data_inspectify(pn_data_t *data)
-{
- int err = pn_string_set(pni_data_str(data), "");
- if (err) return err;
- return pn_data_inspect(data, pni_data_str(data));
-}
-
int pn_data_print(pn_data_t *data)
{
- int err = pni_data_inspectify(data);
- if (err) return err;
- printf("%s", pn_string_get(pni_data_str(data)));
+ pn_string_t *str = pn_string("");
+ int err = pn_data_inspect(data, str);
+ if (err) {
+ pn_free(str);
+ return err;
+ }
+ printf("%s", pn_string_get(str));
+ pn_free(str);
return 0;
}
int pn_data_format(pn_data_t *data, char *bytes, size_t *size)
{
- int err = pni_data_inspectify(data);
+ pn_string_t *str = pn_string("");
+ int err = pn_data_inspect(data, str);
if (err) return err;
- if (pn_string_size(pni_data_str(data)) >= *size) {
+ if (pn_string_size(str) >= *size) {
+ pn_free(str);
return PN_OVERFLOW;
} else {
- pn_string_put(pni_data_str(data), bytes);
- *size = pn_string_size(pni_data_str(data));
+ pn_string_put(str, bytes);
+ *size = pn_string_size(str);
+ pn_free(str);
return 0;
}
}
@@ -1461,12 +1452,13 @@
void pn_data_dump(pn_data_t *data)
{
+ pn_string_t *str = pn_string(0);
printf("{current=%" PN_ZI ", parent=%" PN_ZI "}\n", (size_t) data->current, (size_t) data->parent);
for (unsigned i = 0; i < data->size; i++)
{
pni_node_t *node = &data->nodes[i];
- pn_string_set(pni_data_str(data), "");
- pni_inspect_atom((pn_atom_t *) &node->atom, pni_data_str(data));
+ pn_string_setn(str, "", 0);
+ pni_inspect_atom((pn_atom_t *) &node->atom, str);
printf("Node %i: prev=%" PN_ZI ", next=%" PN_ZI ", parent=%" PN_ZI ", down=%" PN_ZI
", children=%" PN_ZI ", type=%s (%s)\n",
i + 1, (size_t) node->prev,
@@ -1474,8 +1466,9 @@
(size_t) node->parent,
(size_t) node->down,
(size_t) node->children,
- pn_type_name(node->atom.type), pn_string_get(pni_data_str(data)));
+ pn_type_name(node->atom.type), pn_string_get(str));
}
+ pn_free(str);
}
static pni_node_t *pni_data_add(pn_data_t *data)
diff --git a/c/src/core/data.h b/c/src/core/data.h
index 755909e..442760e 100644
--- a/c/src/core/data.h
+++ b/c/src/core/data.h
@@ -51,7 +51,6 @@
pni_node_t *nodes;
pn_buffer_t *buf;
pn_error_t *error;
- pn_string_t *str;
pni_nid_t capacity;
pni_nid_t size;
pni_nid_t parent;