diff --git a/src/db_column.c b/src/db_column.c index cef46bc..4f33795 100644 --- a/src/db_column.c +++ b/src/db_column.c @@ -368,14 +368,24 @@ int setColumnValue(struct column_data_t *col, uint64_t row, const char *value, s } case TYPE_STRING: - case TYPE_BLOB: - case TYPE_RAW: { if (strmemcpy(value, value_size, (col->data.ptr_str + row), (col->data_lens + row)) != 0) { return -1; } break; } + + case TYPE_BLOB: + case TYPE_RAW: + { + *(col->data.ptr_str + row) = (char *)malloc(value_size); + if (*(col->data.ptr_str + row) == 0) { + fprintf(stderr, "[%d]malloc: (%d) %s\n", __LINE__, errno, strerror(errno)); + return -errno; + } + memcpy(*(col->data.ptr_str + row), value, value_size); + break; + } } return 0; diff --git a/src/db_value.c b/src/db_value.c index d037dfa..9d8ddaa 100644 --- a/src/db_value.c +++ b/src/db_value.c @@ -68,39 +68,32 @@ void db_value_sbva(str_builder *sb, e_column_type type, uint32_t n_args, va_list return; } - if (type == TYPE_STRING) - { - tmp_str = va_arg(args, char *); - if (n_args == 1) { - tmp_len = strlen(tmp_str); - } else { - tmp_len = va_arg(args, size_t); - } - } - if (type == TYPE_BLOB || type == TYPE_STRING) { + if (type == TYPE_STRING) { + tmp_str = va_arg(args, char *); if (tmp_str == 0) { - tmp_str = (char *)va_arg(args, void *); + strbld_str(sb, "NULL", 4); + return; + } + + if (n_args == 1) { + tmp_len = strlen(tmp_str); + } else { tmp_len = va_arg(args, size_t); } - if (tmp_str == 0) { - strbld_str(sb, "NULL", 4); + + esc_str = (char *)malloc(tmp_len * 2 + 1 + 2); + if (esc_str == 0) { + fprintf(stderr, "[%d]malloc: (%d) %s\n", __LINE__, errno, strerror(errno)); return; } sql = mysql_init(NULL); if (sql == 0) { fprintf(stderr, "[%d]mysql_init: (%d) %s\n", __LINE__, errno, strerror(errno)); + free(esc_str); return; } - - esc_str = (char *)malloc(tmp_len * 2 + 1 + 2); - if (esc_str == 0) { - fprintf(stderr, "[%d]malloc: (%d) %s\n", __LINE__, errno, strerror(errno)); - mysql_close(sql); - return; - } - esc_str[0] = '\''; esc_len = mysql_real_escape_string(sql, esc_str + 1, tmp_str, tmp_len); esc_str[esc_len + 1] = '\''; @@ -114,6 +107,27 @@ void db_value_sbva(str_builder *sb, e_column_type type, uint32_t n_args, va_list return; } + if (type == TYPE_BLOB) { + tmp_str = (char *)va_arg(args, void *); + if (tmp_str == 0) { + strbld_str(sb, "NULL", 4); + return; + } + + tmp_len = va_arg(args, size_t); + + esc_str = (char *)malloc(tmp_len * 2 + 1); + if (esc_str == 0) { + fprintf(stderr, "[%d]malloc: (%d) %s\n", __LINE__, errno, strerror(errno)); + return; + } + + esc_len = mysql_hex_string(esc_str, tmp_str, tmp_len); + strbld_str(sb, esc_str, esc_len); + free(esc_str); + return; + } + memset(buf, 0, 32); switch(type) { case TYPE_BOOL: