diff --git a/src/core/data.c b/src/core/data.c
index 4840736896f55a03b4cf0716e18e3dec7cb9baec..f489367a42218e35a94bbf64afbff7d6255442fb 100644 (file)
--- a/src/core/data.c
+++ b/src/core/data.c
#include "core/data.h"
#include "utils/error.h"
+#include <assert.h>
+
#include <errno.h>
#include <inttypes.h>
else
return -1;
- if (s1 && s2) {
- new = malloc(len1 + len2 + 1);
- if (! new)
- return -1;
+ assert(s1 && s2);
- if (len1)
- memcpy(new, s1, len1);
- if (len2)
- memcpy(new + len1, s2, len2);
- new[len1 + len2] = '\0';
- }
- else {
- len1 = len2 = 0;
- new = NULL;
- }
+ new = malloc(len1 + len2 + 1);
+ if (! new)
+ return -1;
+
+ if (len1)
+ memcpy(new, s1, len1);
+ if (len2)
+ memcpy(new + len1, s2, len2);
+ new[len1 + len2] = '\0';
res->type = d1->type;
if (res->type == SDB_TYPE_STRING) {
* public API
*/
+const sdb_data_t SDB_DATA_NULL = SDB_DATA_INIT;
+
int
sdb_data_copy(sdb_data_t *dst, const sdb_data_t *src)
{
{
if (! datum)
return 1;
+ if (datum->type == SDB_TYPE_NULL)
+ return 1;
if ((datum->type == SDB_TYPE_STRING) && (! datum->data.string))
return 1;
if ((datum->type == SDB_TYPE_BINARY) && (! datum->data.binary.datum))
{
if ((! d1) || (! d2) || (! res))
return -1;
+ if (sdb_data_isnull(d1) || sdb_data_isnull(d2)) {
+ *res = SDB_DATA_NULL;
+ return 0;
+ }
switch (op) {
case SDB_DATA_CONCAT:
return data_concat(d1, d2, res);