mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Removed binary from kvpvalues
It looks like the binary kvpvalue wasn't being used, and, since it is difficult to deal with, it is easiest to remove it altogether.
This commit is contained in:
parent
9bc5d1a20c
commit
d2913915e6
@ -66,9 +66,6 @@ main_helper (void *closure, int argc, char **argv)
|
|||||||
|
|
||||||
xaccLogDisable ();
|
xaccLogDisable ();
|
||||||
|
|
||||||
/* scm conversion doesn't handle binary atm */
|
|
||||||
kvp_exclude_type (KVP_TYPE_BINARY);
|
|
||||||
|
|
||||||
run_tests (count);
|
run_tests (count);
|
||||||
|
|
||||||
print_test_results ();
|
print_test_results ();
|
||||||
|
@ -96,9 +96,6 @@ main_helper (void *closure, int argc, char **argv)
|
|||||||
|
|
||||||
xaccLogDisable ();
|
xaccLogDisable ();
|
||||||
|
|
||||||
/* scm conversion doesn't handle binary atm */
|
|
||||||
kvp_exclude_type (KVP_TYPE_BINARY);
|
|
||||||
|
|
||||||
/* double->string->double is not idempotent */
|
/* double->string->double is not idempotent */
|
||||||
kvp_exclude_type (KVP_TYPE_DOUBLE);
|
kvp_exclude_type (KVP_TYPE_DOUBLE);
|
||||||
|
|
||||||
|
@ -615,152 +615,6 @@ guid_kvp_value_parser_new(void)
|
|||||||
return(simple_kvp_value_parser_new(guid_kvp_value_end_handler));
|
return(simple_kvp_value_parser_new(guid_kvp_value_end_handler));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*********************************/
|
|
||||||
/* kvp-frame binary value handlers
|
|
||||||
|
|
||||||
A binary chunk can have a variety of types of children, and these
|
|
||||||
children may appear multiple times, but at the moment only <hex>
|
|
||||||
children are supported. The end handler has to take all the
|
|
||||||
children's results, concatenate them into one big kvp_value, and
|
|
||||||
return it.
|
|
||||||
|
|
||||||
All of the children ATM are expected to return binary kvp_values. */
|
|
||||||
|
|
||||||
/* <hex> (lineage <binary> <s> <kvp-frame>)
|
|
||||||
input: NA
|
|
||||||
returns: binary kvp_value
|
|
||||||
|
|
||||||
start: NA
|
|
||||||
chars: generic_accumulate_chars
|
|
||||||
end: convert the chars from hex to binary data and return binary kvp_value.
|
|
||||||
|
|
||||||
cleanup-result: kvp_value_delete
|
|
||||||
cleanup-chars: g_free chars
|
|
||||||
fail: NA
|
|
||||||
result-fail: kvp_value_delete
|
|
||||||
chars-fail: g_free chars
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
hex_binary_kvp_value_end_handler(gpointer data_for_children,
|
|
||||||
GSList *data_from_children, GSList *sibling_data,
|
|
||||||
gpointer parent_data, gpointer global_data,
|
|
||||||
gpointer *result, const gchar *tag)
|
|
||||||
{
|
|
||||||
gchar *txt = NULL;
|
|
||||||
void *val;
|
|
||||||
guint64 size;
|
|
||||||
kvp_value *kvpv;
|
|
||||||
gboolean ok;
|
|
||||||
|
|
||||||
txt = concatenate_child_result_chars(data_from_children);
|
|
||||||
g_return_val_if_fail(txt, FALSE);
|
|
||||||
|
|
||||||
ok = hex_string_to_binary(txt, &val, &size);
|
|
||||||
g_free(txt);
|
|
||||||
|
|
||||||
g_return_val_if_fail(ok, FALSE);
|
|
||||||
|
|
||||||
kvpv = kvp_value_new_binary_nc(val, size);
|
|
||||||
g_return_val_if_fail(kvpv, FALSE);
|
|
||||||
|
|
||||||
*result = kvpv;
|
|
||||||
return(TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
static sixtp*
|
|
||||||
hex_binary_kvp_value_parser_new(void)
|
|
||||||
{
|
|
||||||
return(simple_kvp_value_parser_new(hex_binary_kvp_value_end_handler));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* <binary> (lineage <s> <kvp-frame>)
|
|
||||||
input: NA
|
|
||||||
returns: binary kvp_value*
|
|
||||||
|
|
||||||
start: NA
|
|
||||||
chars: allow_and_ignore_only_whitespace.
|
|
||||||
end: concatenate all the binary data from the children -> kvp_value.
|
|
||||||
|
|
||||||
cleanup-result: kvp_value_delete
|
|
||||||
cleanup-chars: NA
|
|
||||||
fail: NA
|
|
||||||
result-fail: kvp_value_delete
|
|
||||||
chars-fail: NA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
kvp_frame_binary_end_handler(gpointer data_for_children,
|
|
||||||
GSList *data_from_children, GSList *sibling_data,
|
|
||||||
gpointer parent_data, gpointer global_data,
|
|
||||||
gpointer *result, const gchar *tag)
|
|
||||||
{
|
|
||||||
char *data;
|
|
||||||
guint64 total_size;
|
|
||||||
guint64 pos;
|
|
||||||
kvp_value *kvpv;
|
|
||||||
GSList *lp;
|
|
||||||
|
|
||||||
/* at this point, we know that if there are child results, they all
|
|
||||||
have to be binary kvp_values. */
|
|
||||||
|
|
||||||
/* first see how much data we've got. */
|
|
||||||
total_size = 0;
|
|
||||||
for (lp = data_from_children; lp; lp = lp->next)
|
|
||||||
{
|
|
||||||
sixtp_child_result *cr = (sixtp_child_result *) lp->data;
|
|
||||||
kvp_value *kvp = (kvp_value *) cr->data;
|
|
||||||
void *tmpdata;
|
|
||||||
guint64 tmpsize;
|
|
||||||
|
|
||||||
tmpdata = kvp_value_get_binary(kvp, &tmpsize);
|
|
||||||
g_return_val_if_fail(tmpdata, FALSE);
|
|
||||||
total_size += tmpsize;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* allocate a chunk to hold it all and copy */
|
|
||||||
data = g_new(gchar, total_size);
|
|
||||||
g_return_val_if_fail(data, FALSE);
|
|
||||||
|
|
||||||
pos = 0;
|
|
||||||
for (lp = data_from_children; lp; lp = lp->next)
|
|
||||||
{
|
|
||||||
sixtp_child_result *cr = (sixtp_child_result *) lp->data;
|
|
||||||
kvp_value *kvp = (kvp_value *) cr->data;
|
|
||||||
void *new_data;
|
|
||||||
guint64 new_size;
|
|
||||||
|
|
||||||
new_data = kvp_value_get_binary(kvp, &new_size);
|
|
||||||
g_return_val_if_fail(new_data, FALSE);
|
|
||||||
memcpy((data + pos), new_data, new_size);
|
|
||||||
pos += new_size;
|
|
||||||
}
|
|
||||||
|
|
||||||
kvpv = kvp_value_new_binary_nc(data, total_size);
|
|
||||||
g_return_val_if_fail(kvpv, FALSE);
|
|
||||||
|
|
||||||
*result = kvpv;
|
|
||||||
return(TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
static sixtp*
|
|
||||||
binary_kvp_value_parser_new(void)
|
|
||||||
{
|
|
||||||
return sixtp_add_some_sub_parsers(
|
|
||||||
sixtp_set_any(sixtp_new(), FALSE,
|
|
||||||
SIXTP_CHARACTERS_HANDLER_ID,
|
|
||||||
allow_and_ignore_only_whitespace,
|
|
||||||
SIXTP_END_HANDLER_ID, kvp_frame_binary_end_handler,
|
|
||||||
SIXTP_CLEANUP_RESULT_ID, kvp_value_result_cleanup,
|
|
||||||
SIXTP_RESULT_FAIL_ID, kvp_value_result_cleanup,
|
|
||||||
SIXTP_NO_MORE_HANDLERS),
|
|
||||||
TRUE,
|
|
||||||
"hex", hex_binary_kvp_value_parser_new(),
|
|
||||||
NULL, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*********************************/
|
/*********************************/
|
||||||
/* glist kvp-value handler
|
/* glist kvp-value handler
|
||||||
*/
|
*/
|
||||||
@ -835,7 +689,6 @@ add_all_kvp_value_parsers_as_sub_nodes(sixtp *p,
|
|||||||
KVP_TOKEN(gnc_numeric, "numeric");
|
KVP_TOKEN(gnc_numeric, "numeric");
|
||||||
KVP_TOKEN(string, "string");
|
KVP_TOKEN(string, "string");
|
||||||
KVP_TOKEN(guid, "guid");
|
KVP_TOKEN(guid, "guid");
|
||||||
KVP_TOKEN(binary, "binary");
|
|
||||||
|
|
||||||
sixtp_add_sub_parser(p, "glist", glist_parser);
|
sixtp_add_sub_parser(p, "glist", glist_parser);
|
||||||
sixtp_add_sub_parser(p, "frame", kvp_frame_parser);
|
sixtp_add_sub_parser(p, "frame", kvp_frame_parser);
|
||||||
|
@ -325,18 +325,6 @@ add_kvp_value_node(xmlNodePtr node, gchar *tag, kvp_value* val)
|
|||||||
break;
|
break;
|
||||||
case KVP_TYPE_GDATE:
|
case KVP_TYPE_GDATE:
|
||||||
xmlSetProp(val_node, BAD_CAST "type", BAD_CAST "gdate");
|
xmlSetProp(val_node, BAD_CAST "type", BAD_CAST "gdate");
|
||||||
break;
|
|
||||||
case KVP_TYPE_BINARY:
|
|
||||||
{
|
|
||||||
guint64 size;
|
|
||||||
gchar *tmp_str1;
|
|
||||||
void *binary_data = kvp_value_get_binary(val, &size);
|
|
||||||
xmlSetProp(val_node, BAD_CAST "type", BAD_CAST "binary");
|
|
||||||
g_return_if_fail(binary_data);
|
|
||||||
tmp_str1 = binary_to_string(binary_data, size);
|
|
||||||
xmlNodeSetContent(val_node, checked_char_cast (tmp_str1));
|
|
||||||
g_free(tmp_str1);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case KVP_TYPE_GLIST:
|
case KVP_TYPE_GLIST:
|
||||||
{
|
{
|
||||||
|
@ -303,30 +303,6 @@ string_to_binary(const gchar *str, void **v, guint64 *data_len)
|
|||||||
return(TRUE);
|
return(TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
kvp_value*
|
|
||||||
dom_tree_to_binary_kvp_value(xmlNodePtr node)
|
|
||||||
{
|
|
||||||
gchar *text;
|
|
||||||
void *val;
|
|
||||||
guint64 len;
|
|
||||||
kvp_value *ret = NULL;
|
|
||||||
|
|
||||||
text = dom_tree_to_text(node);
|
|
||||||
|
|
||||||
if (string_to_binary(text, &val, &len))
|
|
||||||
{
|
|
||||||
ret = kvp_value_new_binary_nc(val, len);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
PERR("string_to_binary returned false");
|
|
||||||
}
|
|
||||||
|
|
||||||
g_free(text);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
kvp_value*
|
kvp_value*
|
||||||
dom_tree_to_list_kvp_value(xmlNodePtr node)
|
dom_tree_to_list_kvp_value(xmlNodePtr node)
|
||||||
{
|
{
|
||||||
@ -387,7 +363,6 @@ struct kvp_val_converter val_converters[] =
|
|||||||
{ "guid", dom_tree_to_guid_kvp_value },
|
{ "guid", dom_tree_to_guid_kvp_value },
|
||||||
{ "timespec", dom_tree_to_timespec_kvp_value },
|
{ "timespec", dom_tree_to_timespec_kvp_value },
|
||||||
{ "gdate", dom_tree_to_gdate_kvp_value },
|
{ "gdate", dom_tree_to_gdate_kvp_value },
|
||||||
{ "binary", dom_tree_to_binary_kvp_value },
|
|
||||||
{ "list", dom_tree_to_list_kvp_value },
|
{ "list", dom_tree_to_list_kvp_value },
|
||||||
{ "frame", dom_tree_to_frame_kvp_value },
|
{ "frame", dom_tree_to_frame_kvp_value },
|
||||||
{ 0, 0 },
|
{ 0, 0 },
|
||||||
|
@ -14,65 +14,6 @@
|
|||||||
#define GNC_V2_STRING "gnc-v2"
|
#define GNC_V2_STRING "gnc-v2"
|
||||||
const gchar *gnc_v2_xml_version_string = GNC_V2_STRING;
|
const gchar *gnc_v2_xml_version_string = GNC_V2_STRING;
|
||||||
|
|
||||||
static void
|
|
||||||
test_binary()
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
for (i = 0; i < 20; i++)
|
|
||||||
{
|
|
||||||
bin_data *test_data1;
|
|
||||||
void *test_data2;
|
|
||||||
guint64 test_data2_len;
|
|
||||||
gchar *converted;
|
|
||||||
|
|
||||||
test_data1 = get_random_binary_data();
|
|
||||||
|
|
||||||
converted = binary_to_string(test_data1->data, test_data1->len);
|
|
||||||
|
|
||||||
if (!converted)
|
|
||||||
{
|
|
||||||
failure_args("binary_data", __FILE__, __LINE__, "binary_to_string returned NULL");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!string_to_binary(converted, &test_data2, &test_data2_len))
|
|
||||||
{
|
|
||||||
failure_args("binary_data", __FILE__, __LINE__,
|
|
||||||
"string_to_binary returned FALSE with data:\n%s\n",
|
|
||||||
converted);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (test_data2_len != test_data1->len)
|
|
||||||
{
|
|
||||||
failure_args("binary_data", __FILE__, __LINE__,
|
|
||||||
"lengths don't match: %" G_GINT64_FORMAT " vs %d",
|
|
||||||
test_data2_len, test_data1->len);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
int j;
|
|
||||||
guchar *d1 = test_data1->data;
|
|
||||||
guchar *d2 = (guchar*)test_data2;
|
|
||||||
|
|
||||||
for (j = 0; j < test_data2_len; j++)
|
|
||||||
{
|
|
||||||
if (d1[j] != d2[j])
|
|
||||||
{
|
|
||||||
failure_args("binary_data", __FILE__, __LINE__,
|
|
||||||
"data doesn't match at point %d.\n%d vs %d",
|
|
||||||
i, d1[j], d2[j]);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
success("binary_data");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static char *test_strings[] =
|
static char *test_strings[] =
|
||||||
{
|
{
|
||||||
"FooBar",
|
"FooBar",
|
||||||
@ -121,7 +62,6 @@ int
|
|||||||
main(int argc, char **argv)
|
main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
qof_log_init();
|
qof_log_init();
|
||||||
test_binary();
|
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
test_string_converters();
|
test_string_converters();
|
||||||
test_bad_string ();
|
test_bad_string ();
|
||||||
|
@ -764,10 +764,6 @@ gnc_kvp_value2scm (const KvpValue *value)
|
|||||||
scm = gnc_timespec2timepair (kvp_value_get_timespec (value));
|
scm = gnc_timespec2timepair (kvp_value_get_timespec (value));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KVP_TYPE_BINARY:
|
|
||||||
scm = SCM_BOOL_F;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case KVP_TYPE_NUMERIC:
|
case KVP_TYPE_NUMERIC:
|
||||||
{
|
{
|
||||||
gnc_numeric n = kvp_value_get_numeric (value);
|
gnc_numeric n = kvp_value_get_numeric (value);
|
||||||
@ -901,10 +897,6 @@ gnc_scm2KvpValue (SCM value_scm)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case KVP_TYPE_BINARY:
|
|
||||||
return NULL;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case KVP_TYPE_NUMERIC:
|
case KVP_TYPE_NUMERIC:
|
||||||
{
|
{
|
||||||
gnc_numeric n;
|
gnc_numeric n;
|
||||||
|
@ -62,7 +62,6 @@ gnc_scm_to_kvp_value_ptr(SCM val)
|
|||||||
#undef FUNC_NAME
|
#undef FUNC_NAME
|
||||||
return kvp_value_new_frame (frame);
|
return kvp_value_new_frame (frame);
|
||||||
}
|
}
|
||||||
/* FIXME: add binary handler here when it's figured out */
|
|
||||||
/* FIXME: add list handler here */
|
/* FIXME: add list handler here */
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -107,7 +106,6 @@ gnc_kvp_value_ptr_to_scm(KvpValue* val)
|
|||||||
return gnc_timespec2timepair(gdate_to_timespec(kvp_value_get_gdate(val)));
|
return gnc_timespec2timepair(gdate_to_timespec(kvp_value_get_gdate(val)));
|
||||||
|
|
||||||
/* FIXME: handle types below */
|
/* FIXME: handle types below */
|
||||||
case KVP_TYPE_BINARY:
|
|
||||||
case KVP_TYPE_GLIST:
|
case KVP_TYPE_GLIST:
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -208,7 +208,7 @@ get_random_glist(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* ========================================================== */
|
/* ========================================================== */
|
||||||
/* Time/Date, GncGUID, binary data stuff */
|
/* Time/Date, GncGUID data stuff */
|
||||||
|
|
||||||
Timespec*
|
Timespec*
|
||||||
get_random_timespec(void)
|
get_random_timespec(void)
|
||||||
@ -248,25 +248,6 @@ get_random_guid(void)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
bin_data*
|
|
||||||
get_random_binary_data(void)
|
|
||||||
{
|
|
||||||
int len;
|
|
||||||
bin_data *ret;
|
|
||||||
|
|
||||||
len = get_random_int_in_range(20, 100);
|
|
||||||
ret = g_new(bin_data, 1);
|
|
||||||
ret->data = g_new(guchar, len);
|
|
||||||
ret->len = len;
|
|
||||||
|
|
||||||
for (len--; len >= 0; len--)
|
|
||||||
{
|
|
||||||
ret->data[len] = (guchar)get_random_int_in_range(0, 255);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ========================================================== */
|
/* ========================================================== */
|
||||||
/* KVP stuff */
|
/* KVP stuff */
|
||||||
|
|
||||||
@ -340,16 +321,6 @@ get_random_kvp_value_depth (int type, gint depth)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KVP_TYPE_BINARY:
|
|
||||||
{
|
|
||||||
bin_data *tmp_data;
|
|
||||||
tmp_data = get_random_binary_data();
|
|
||||||
ret = kvp_value_new_binary(tmp_data->data, tmp_data->len);
|
|
||||||
g_free(tmp_data->data);
|
|
||||||
g_free(tmp_data);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case KVP_TYPE_GLIST:
|
case KVP_TYPE_GLIST:
|
||||||
ret = kvp_value_new_glist_nc(get_random_glist_depth (depth + 1));
|
ret = kvp_value_new_glist_nc(get_random_glist_depth (depth + 1));
|
||||||
break;
|
break;
|
||||||
|
@ -67,9 +67,6 @@ main_helper (void *closure, int argc, char **argv)
|
|||||||
|
|
||||||
xaccLogDisable ();
|
xaccLogDisable ();
|
||||||
|
|
||||||
/* scm conversion doesn't handle binary atm */
|
|
||||||
kvp_exclude_type (KVP_TYPE_BINARY);
|
|
||||||
|
|
||||||
run_tests ();
|
run_tests ();
|
||||||
|
|
||||||
print_test_results ();
|
print_test_results ();
|
||||||
|
@ -50,13 +50,6 @@ struct _KvpFrame
|
|||||||
GHashTable * hash;
|
GHashTable * hash;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
void *data;
|
|
||||||
int datasize;
|
|
||||||
} KvpValueBinaryData;
|
|
||||||
|
|
||||||
struct _KvpValue
|
struct _KvpValue
|
||||||
{
|
{
|
||||||
KvpValueType type;
|
KvpValueType type;
|
||||||
@ -68,7 +61,6 @@ struct _KvpValue
|
|||||||
gchar *str;
|
gchar *str;
|
||||||
GncGUID *guid;
|
GncGUID *guid;
|
||||||
Timespec timespec;
|
Timespec timespec;
|
||||||
KvpValueBinaryData binary;
|
|
||||||
GList *list;
|
GList *list;
|
||||||
KvpFrame *frame;
|
KvpFrame *frame;
|
||||||
GDate gdate;
|
GDate gdate;
|
||||||
@ -994,33 +986,6 @@ kvp_value_new_gdate(GDate value)
|
|||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
KvpValue *
|
|
||||||
kvp_value_new_binary(const void * value, guint64 datasize)
|
|
||||||
{
|
|
||||||
KvpValue * retval;
|
|
||||||
if (!value) return NULL;
|
|
||||||
|
|
||||||
retval = g_new0(KvpValue, 1);
|
|
||||||
retval->type = KVP_TYPE_BINARY;
|
|
||||||
retval->value.binary.data = g_new0(char, datasize);
|
|
||||||
retval->value.binary.datasize = datasize;
|
|
||||||
memcpy(retval->value.binary.data, value, datasize);
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
KvpValue *
|
|
||||||
kvp_value_new_binary_nc(void * value, guint64 datasize)
|
|
||||||
{
|
|
||||||
KvpValue * retval;
|
|
||||||
if (!value) return NULL;
|
|
||||||
|
|
||||||
retval = g_new0(KvpValue, 1);
|
|
||||||
retval->type = KVP_TYPE_BINARY;
|
|
||||||
retval->value.binary.data = value;
|
|
||||||
retval->value.binary.datasize = datasize;
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
KvpValue *
|
KvpValue *
|
||||||
kvp_value_new_glist(const GList * value)
|
kvp_value_new_glist(const GList * value)
|
||||||
{
|
{
|
||||||
@ -1082,9 +1047,6 @@ kvp_value_delete(KvpValue * value)
|
|||||||
case KVP_TYPE_GUID:
|
case KVP_TYPE_GUID:
|
||||||
g_free(value->value.guid);
|
g_free(value->value.guid);
|
||||||
break;
|
break;
|
||||||
case KVP_TYPE_BINARY:
|
|
||||||
g_free(value->value.binary.data);
|
|
||||||
break;
|
|
||||||
case KVP_TYPE_GLIST:
|
case KVP_TYPE_GLIST:
|
||||||
kvp_glist_delete(value->value.list);
|
kvp_glist_delete(value->value.list);
|
||||||
break;
|
break;
|
||||||
@ -1200,30 +1162,6 @@ kvp_value_get_gdate(const KvpValue * value)
|
|||||||
return date;
|
return date;
|
||||||
}
|
}
|
||||||
|
|
||||||
void *
|
|
||||||
kvp_value_get_binary(const KvpValue * value, guint64 * size_return)
|
|
||||||
{
|
|
||||||
if (!value)
|
|
||||||
{
|
|
||||||
if (size_return)
|
|
||||||
*size_return = 0;
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (value->type == KVP_TYPE_BINARY)
|
|
||||||
{
|
|
||||||
if (size_return)
|
|
||||||
*size_return = value->value.binary.datasize;
|
|
||||||
return value->value.binary.data;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (size_return)
|
|
||||||
*size_return = 0;
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
GList *
|
GList *
|
||||||
kvp_value_get_glist(const KvpValue * value)
|
kvp_value_get_glist(const KvpValue * value)
|
||||||
{
|
{
|
||||||
@ -1306,10 +1244,6 @@ kvp_value_copy(const KvpValue * value)
|
|||||||
case KVP_TYPE_TIMESPEC:
|
case KVP_TYPE_TIMESPEC:
|
||||||
return kvp_value_new_timespec(value->value.timespec);
|
return kvp_value_new_timespec(value->value.timespec);
|
||||||
break;
|
break;
|
||||||
case KVP_TYPE_BINARY:
|
|
||||||
return kvp_value_new_binary(value->value.binary.data,
|
|
||||||
value->value.binary.datasize);
|
|
||||||
break;
|
|
||||||
case KVP_TYPE_GLIST:
|
case KVP_TYPE_GLIST:
|
||||||
return kvp_value_new_glist(value->value.list);
|
return kvp_value_new_glist(value->value.list);
|
||||||
break;
|
break;
|
||||||
@ -1384,15 +1318,6 @@ kvp_value_compare(const KvpValue * kva, const KvpValue * kvb)
|
|||||||
case KVP_TYPE_GDATE:
|
case KVP_TYPE_GDATE:
|
||||||
return g_date_compare(&(kva->value.gdate), &(kvb->value.gdate));
|
return g_date_compare(&(kva->value.gdate), &(kvb->value.gdate));
|
||||||
break;
|
break;
|
||||||
case KVP_TYPE_BINARY:
|
|
||||||
/* I don't know that this is a good compare. Ab is bigger than Acef.
|
|
||||||
But I'm not sure that actually matters here. */
|
|
||||||
if (kva->value.binary.datasize < kvb->value.binary.datasize) return -1;
|
|
||||||
if (kva->value.binary.datasize > kvb->value.binary.datasize) return 1;
|
|
||||||
return memcmp(kva->value.binary.data,
|
|
||||||
kvb->value.binary.data,
|
|
||||||
kva->value.binary.datasize);
|
|
||||||
break;
|
|
||||||
case KVP_TYPE_GLIST:
|
case KVP_TYPE_GLIST:
|
||||||
return kvp_glist_compare(kva->value.list, kvb->value.list);
|
return kvp_glist_compare(kva->value.list, kvb->value.list);
|
||||||
break;
|
break;
|
||||||
@ -1461,23 +1386,6 @@ kvp_frame_compare(const KvpFrame *fa, const KvpFrame *fb)
|
|||||||
return(-status.compare);
|
return(-status.compare);
|
||||||
}
|
}
|
||||||
|
|
||||||
gchar*
|
|
||||||
binary_to_string(const void *data, guint32 size)
|
|
||||||
{
|
|
||||||
GString *output;
|
|
||||||
guint32 i;
|
|
||||||
guchar *data_str = (guchar*)data;
|
|
||||||
|
|
||||||
output = g_string_sized_new(size * sizeof(char));
|
|
||||||
|
|
||||||
for (i = 0; i < size; i++)
|
|
||||||
{
|
|
||||||
g_string_append_printf(output, "%02x", (unsigned int) (data_str[i]));
|
|
||||||
}
|
|
||||||
|
|
||||||
return output->str;
|
|
||||||
}
|
|
||||||
|
|
||||||
static gchar*
|
static gchar*
|
||||||
kvp_value_glist_to_string(const GList *list)
|
kvp_value_glist_to_string(const GList *list)
|
||||||
{
|
{
|
||||||
@ -1580,16 +1488,6 @@ kvp_value_to_string(const KvpValue *val)
|
|||||||
tmp2 = g_strdup_printf("KVP_VALUE_TIMESPEC(%s)", tmp1);
|
tmp2 = g_strdup_printf("KVP_VALUE_TIMESPEC(%s)", tmp1);
|
||||||
g_free(tmp1);
|
g_free(tmp1);
|
||||||
return tmp2;
|
return tmp2;
|
||||||
break;
|
|
||||||
|
|
||||||
case KVP_TYPE_BINARY:
|
|
||||||
{
|
|
||||||
guint64 len;
|
|
||||||
void *data;
|
|
||||||
data = kvp_value_get_binary(val, &len);
|
|
||||||
tmp1 = binary_to_string(data, len);
|
|
||||||
return g_strdup_printf("KVP_VALUE_BINARY(%s)", tmp1 ? tmp1 : "");
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KVP_TYPE_GLIST:
|
case KVP_TYPE_GLIST:
|
||||||
@ -1728,11 +1626,6 @@ gvalue_from_kvp_value (KvpValue *kval)
|
|||||||
tm = kvp_value_get_timespec (kval);
|
tm = kvp_value_get_timespec (kval);
|
||||||
g_value_set_boxed (val, &tm);
|
g_value_set_boxed (val, &tm);
|
||||||
break;
|
break;
|
||||||
case KVP_TYPE_BINARY:
|
|
||||||
PWARN ("Error! Don't use Kvp Binary!");
|
|
||||||
g_slice_free (GValue, val);
|
|
||||||
val = NULL;
|
|
||||||
break;
|
|
||||||
case KVP_TYPE_GDATE:
|
case KVP_TYPE_GDATE:
|
||||||
g_value_init (val, G_TYPE_DATE);
|
g_value_init (val, G_TYPE_DATE);
|
||||||
gdate = kvp_value_get_gdate (kval);
|
gdate = kvp_value_get_gdate (kval);
|
||||||
|
@ -99,7 +99,6 @@ typedef enum
|
|||||||
KVP_TYPE_STRING, /**< QOF_TYPE_STRING gchar* */
|
KVP_TYPE_STRING, /**< QOF_TYPE_STRING gchar* */
|
||||||
KVP_TYPE_GUID, /**< QOF_TYPE_GUID */
|
KVP_TYPE_GUID, /**< QOF_TYPE_GUID */
|
||||||
KVP_TYPE_TIMESPEC, /**< QOF_TYPE_DATE */
|
KVP_TYPE_TIMESPEC, /**< QOF_TYPE_DATE */
|
||||||
KVP_TYPE_BINARY, /**< no QOF equivalent. */
|
|
||||||
KVP_TYPE_GLIST, /**< no QOF equivalent. */
|
KVP_TYPE_GLIST, /**< no QOF equivalent. */
|
||||||
KVP_TYPE_FRAME /**< no QOF equivalent. */
|
KVP_TYPE_FRAME /**< no QOF equivalent. */
|
||||||
, KVP_TYPE_GDATE /**< no QOF equivalent. */
|
, KVP_TYPE_GDATE /**< no QOF equivalent. */
|
||||||
@ -270,7 +269,7 @@ void kvp_frame_add_frame_nc(KvpFrame *frame, const gchar *path, KvpFrame *chld);
|
|||||||
If any part of the path does not exist, then NULL or zero will be
|
If any part of the path does not exist, then NULL or zero will be
|
||||||
returned.
|
returned.
|
||||||
|
|
||||||
The values returned for GncGUID, binary, GList, KvpFrame and string
|
The values returned for GncGUID, GList, KvpFrame and string
|
||||||
are "non-copying" -- the returned item is the actual item stored.
|
are "non-copying" -- the returned item is the actual item stored.
|
||||||
Do not delete this item unless you take the required care to avoid
|
Do not delete this item unless you take the required care to avoid
|
||||||
possible bad pointer derefrences (i.e. core dumps). Also, be
|
possible bad pointer derefrences (i.e. core dumps). Also, be
|
||||||
@ -278,7 +277,7 @@ void kvp_frame_add_frame_nc(KvpFrame *frame, const gchar *path, KvpFrame *chld);
|
|||||||
at the same path names: the referenced item will be freed during
|
at the same path names: the referenced item will be freed during
|
||||||
the store.
|
the store.
|
||||||
|
|
||||||
That is, if you get a string value (or guid, binary or frame),
|
That is, if you get a string value (or guid or frame),
|
||||||
and then store something else at that path, the string that you've
|
and then store something else at that path, the string that you've
|
||||||
gotten will be freed during the store (internally, by the set_*()
|
gotten will be freed during the store (internally, by the set_*()
|
||||||
routines), and you will be left hanging onto an invalid pointer.
|
routines), and you will be left hanging onto an invalid pointer.
|
||||||
@ -466,7 +465,6 @@ KvpValue * kvp_value_new_numeric(gnc_numeric value);
|
|||||||
KvpValue * kvp_value_new_string(const gchar * value);
|
KvpValue * kvp_value_new_string(const gchar * value);
|
||||||
KvpValue * kvp_value_new_guid(const GncGUID * guid);
|
KvpValue * kvp_value_new_guid(const GncGUID * guid);
|
||||||
KvpValue * kvp_value_new_timespec(Timespec timespec);
|
KvpValue * kvp_value_new_timespec(Timespec timespec);
|
||||||
KvpValue * kvp_value_new_binary(const void * data, guint64 datasize);
|
|
||||||
KvpValue * kvp_value_new_frame(const KvpFrame * value);
|
KvpValue * kvp_value_new_frame(const KvpFrame * value);
|
||||||
KvpValue * kvp_value_new_gdate(GDate date);
|
KvpValue * kvp_value_new_gdate(GDate date);
|
||||||
|
|
||||||
@ -474,10 +472,6 @@ KvpValue * kvp_value_new_gdate(GDate date);
|
|||||||
* confused with GList's of something else!) */
|
* confused with GList's of something else!) */
|
||||||
KvpValue * kvp_value_new_glist(const GList * value);
|
KvpValue * kvp_value_new_glist(const GList * value);
|
||||||
|
|
||||||
/** value constructors (non-copying - KvpValue takes pointer ownership)
|
|
||||||
values *must* have been allocated via glib allocators! (gnew, etc.) */
|
|
||||||
KvpValue * kvp_value_new_binary_nc(void * data, guint64 datasize);
|
|
||||||
|
|
||||||
/** Creates a KvpValue from a <b>GList of kvp_value's</b>! (Not to be
|
/** Creates a KvpValue from a <b>GList of kvp_value's</b>! (Not to be
|
||||||
* confused with GList's of something else!)
|
* confused with GList's of something else!)
|
||||||
*
|
*
|
||||||
@ -514,7 +508,7 @@ GList * kvp_value_replace_glist_nc(KvpValue *value, GList *newlist);
|
|||||||
KvpValueType kvp_value_get_type(const KvpValue * value);
|
KvpValueType kvp_value_get_type(const KvpValue * value);
|
||||||
|
|
||||||
|
|
||||||
/** Value accessors. Those for GncGUID, binary, GList, KvpFrame and
|
/** Value accessors. Those for GncGUID, GList, KvpFrame and
|
||||||
* string are non-copying -- the caller can modify the value
|
* string are non-copying -- the caller can modify the value
|
||||||
* directly. Just don't free it, or you screw up everything.
|
* directly. Just don't free it, or you screw up everything.
|
||||||
* Note that if another value is stored at the key location
|
* Note that if another value is stored at the key location
|
||||||
@ -536,11 +530,6 @@ char * kvp_value_get_string(const KvpValue * value);
|
|||||||
* the value directly. */
|
* the value directly. */
|
||||||
GncGUID * kvp_value_get_guid(const KvpValue * value);
|
GncGUID * kvp_value_get_guid(const KvpValue * value);
|
||||||
|
|
||||||
/** Value accessor. This one is non-copying -- the caller can modify
|
|
||||||
* the value directly. */
|
|
||||||
void * kvp_value_get_binary(const KvpValue * value,
|
|
||||||
guint64 * size_return);
|
|
||||||
|
|
||||||
/** Returns the GList of kvp_frame's (not to be confused with GList's
|
/** Returns the GList of kvp_frame's (not to be confused with GList's
|
||||||
* of something else!) from the given kvp_frame. This one is
|
* of something else!) from the given kvp_frame. This one is
|
||||||
* non-copying -- the caller can modify the value directly. */
|
* non-copying -- the caller can modify the value directly. */
|
||||||
@ -569,11 +558,6 @@ itself a debugging and development utility function.
|
|||||||
*/
|
*/
|
||||||
gchar* kvp_value_to_string(const KvpValue *val);
|
gchar* kvp_value_to_string(const KvpValue *val);
|
||||||
|
|
||||||
/** Manipulator:
|
|
||||||
*
|
|
||||||
* copying - but more efficient than creating a new KvpValue manually. */
|
|
||||||
gboolean kvp_value_binary_append(KvpValue *v, void *data, guint64 size);
|
|
||||||
|
|
||||||
/** @name Iterators
|
/** @name Iterators
|
||||||
@{
|
@{
|
||||||
*/
|
*/
|
||||||
@ -591,7 +575,6 @@ void kvp_frame_for_each_slot(KvpFrame *f,
|
|||||||
|
|
||||||
/** Internal helper routines, you probably shouldn't be using these. */
|
/** Internal helper routines, you probably shouldn't be using these. */
|
||||||
gchar* kvp_frame_to_string(const KvpFrame *frame);
|
gchar* kvp_frame_to_string(const KvpFrame *frame);
|
||||||
gchar* binary_to_string(const void *data, guint32 size);
|
|
||||||
GHashTable* kvp_frame_get_hash(const KvpFrame *frame);
|
GHashTable* kvp_frame_get_hash(const KvpFrame *frame);
|
||||||
|
|
||||||
/** KvpItem: GValue Exchange
|
/** KvpItem: GValue Exchange
|
||||||
|
@ -873,20 +873,12 @@ test_kvp_value_compare( void )
|
|||||||
static void
|
static void
|
||||||
test_kvp_value_new_foo_nc( void )
|
test_kvp_value_new_foo_nc( void )
|
||||||
{
|
{
|
||||||
KvpValue *binary_value_nc, *glist_value_nc, *frame_value_nc;
|
KvpValue *glist_value_nc, *frame_value_nc;
|
||||||
void *val;
|
void *val;
|
||||||
guint64 size;
|
guint64 size;
|
||||||
GList *list = NULL;
|
GList *list = NULL;
|
||||||
KvpFrame *frame = NULL;
|
KvpFrame *frame = NULL;
|
||||||
|
|
||||||
g_test_message( "Test new binary values are not copied" );
|
|
||||||
val = g_new0( char, 5 );
|
|
||||||
size = sizeof( val );
|
|
||||||
binary_value_nc = kvp_value_new_binary_nc( val, size );
|
|
||||||
g_assert( binary_value_nc );
|
|
||||||
g_assert( kvp_value_get_type( binary_value_nc ) == KVP_TYPE_BINARY );
|
|
||||||
g_assert( kvp_value_get_binary( binary_value_nc, &size ) == val );
|
|
||||||
|
|
||||||
g_test_message( "Test new glist is not copied" );
|
g_test_message( "Test new glist is not copied" );
|
||||||
list = g_list_append( list, kvp_value_new_gint64( 2 ) );
|
list = g_list_append( list, kvp_value_new_gint64( 2 ) );
|
||||||
g_assert_cmpint( g_list_length( list ), == , 1 );
|
g_assert_cmpint( g_list_length( list ), == , 1 );
|
||||||
@ -902,7 +894,6 @@ test_kvp_value_new_foo_nc( void )
|
|||||||
g_assert( kvp_value_get_type( frame_value_nc ) == KVP_TYPE_FRAME );
|
g_assert( kvp_value_get_type( frame_value_nc ) == KVP_TYPE_FRAME );
|
||||||
g_assert( kvp_value_get_frame( frame_value_nc ) == frame );
|
g_assert( kvp_value_get_frame( frame_value_nc ) == frame );
|
||||||
|
|
||||||
kvp_value_delete( binary_value_nc );
|
|
||||||
kvp_value_delete( glist_value_nc );
|
kvp_value_delete( glist_value_nc );
|
||||||
kvp_value_delete( frame_value_nc );
|
kvp_value_delete( frame_value_nc );
|
||||||
}
|
}
|
||||||
@ -955,28 +946,6 @@ test_kvp_frame_compare( Fixture *fixture, gconstpointer pData )
|
|||||||
kvp_frame_delete( cmp_frame );
|
kvp_frame_delete( cmp_frame );
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
test_binary_to_string( void )
|
|
||||||
{
|
|
||||||
gchar *result;
|
|
||||||
guchar *val;
|
|
||||||
guint32 size;
|
|
||||||
val = g_new0( guchar, 5 );
|
|
||||||
size = 5 * sizeof( guchar );
|
|
||||||
val[0] = (guchar) 0;
|
|
||||||
val[1] = (guchar) 9;
|
|
||||||
val[2] = (guchar) 10;
|
|
||||||
val[3] = (guchar) 255;
|
|
||||||
val[4] = (guchar) 256;
|
|
||||||
|
|
||||||
result = binary_to_string( val, size );
|
|
||||||
g_assert( result );
|
|
||||||
g_assert_cmpstr( result, == , "00090aff00" );
|
|
||||||
|
|
||||||
g_free( val );
|
|
||||||
g_free( result );
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
test_kvp_value_to_string( void )
|
test_kvp_value_to_string( void )
|
||||||
{
|
{
|
||||||
@ -1696,7 +1665,6 @@ test_suite_kvp_frame( void )
|
|||||||
GNC_TEST_ADD_FUNC( suitename, "kvp value compare", test_kvp_value_compare );
|
GNC_TEST_ADD_FUNC( suitename, "kvp value compare", test_kvp_value_compare );
|
||||||
GNC_TEST_ADD_FUNC( suitename, "kvp value new foo no copy", test_kvp_value_new_foo_nc );
|
GNC_TEST_ADD_FUNC( suitename, "kvp value new foo no copy", test_kvp_value_new_foo_nc );
|
||||||
GNC_TEST_ADD( suitename, "kvp frame compare", Fixture, NULL, setup, test_kvp_frame_compare, teardown );
|
GNC_TEST_ADD( suitename, "kvp frame compare", Fixture, NULL, setup, test_kvp_frame_compare, teardown );
|
||||||
GNC_TEST_ADD_FUNC( suitename, "binary to string", test_binary_to_string );
|
|
||||||
GNC_TEST_ADD_FUNC( suitename, "kvp value to string", test_kvp_value_to_string );
|
GNC_TEST_ADD_FUNC( suitename, "kvp value to string", test_kvp_value_to_string );
|
||||||
GNC_TEST_ADD( suitename, "kvp frame to string", Fixture, NULL, setup, test_kvp_frame_to_string, teardown );
|
GNC_TEST_ADD( suitename, "kvp frame to string", Fixture, NULL, setup, test_kvp_frame_to_string, teardown );
|
||||||
GNC_TEST_ADD( suitename, "kvp frame set slot path", Fixture, NULL, setup, test_kvp_frame_set_slot_path, teardown );
|
GNC_TEST_ADD( suitename, "kvp frame set slot path", Fixture, NULL, setup, test_kvp_frame_set_slot_path, teardown );
|
||||||
|
Loading…
Reference in New Issue
Block a user