diff --git a/src/core/data.c b/src/core/data.c
index a796b21eef37a57c4cc422836f5386f5c11c14ba..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;
- }
- else
- new = NULL;
+ assert(s1 && s2);
+
+ new = malloc(len1 + len2 + 1);
+ if (! new)
+ return -1;
if (len1)
memcpy(new, s1, len1);
if (len2)
memcpy(new + len1, s2, len2);
- if (new)
- new[len1 + len2] = '\0';
+ 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);
return -1;
if (regcomp(&tmp.data.re.regex, tmp.data.re.raw,
REG_EXTENDED | REG_ICASE | REG_NOSUB)) {
- free(tmp.data.re.raw);
sdb_log(SDB_LOG_ERR, "core: Failed to compile regular "
"expression '%s'", tmp.data.re.raw);
+ free(tmp.data.re.raw);
return -1;
}
if (! data) {