return long long, not int, so gint64 deserialization actually works. Is there any flag that makes the compiler check...

Original commit message from CVS:

* check/gst/gstvalue.c: (START_TEST):
* gst/gstvalue.c: (gst_value_deserialize):
return long long, not int, so gint64 deserialization actually
works.  Is there any flag that makes the compiler check this ?
Fixes #308559
This commit is contained in:
Thomas Vander Stichele 2005-06-22 10:52:18 +00:00
parent 202c113397
commit bdc643ddb9
4 changed files with 88 additions and 77 deletions

View file

@ -1,3 +1,11 @@
2005-06-22 Thomas Vander Stichele <thomas at apestaart dot org>
* check/gst/gstvalue.c: (START_TEST):
* gst/gstvalue.c: (gst_value_deserialize):
return long long, not int, so gint64 deserialization actually
works. Is there any flag that makes the compiler check this ?
Fixes #308559
2005-06-22 Wim Taymans <wim@fluendo.com> 2005-06-22 Wim Taymans <wim@fluendo.com>
* gst/gstbuffer.h: * gst/gstbuffer.h:

View file

@ -36,14 +36,13 @@ END_TEST;
START_TEST (test_deserialize_gint64) START_TEST (test_deserialize_gint64)
{ {
GValue value = { 0 }; GValue value = { 0 };
const char *string = "12345678901";
g_value_init (&value, G_TYPE_INT64); g_value_init (&value, G_TYPE_INT64);
fail_unless (gst_value_deserialize (&value, "12345678901")); fail_unless (gst_value_deserialize (&value, string));
/* FIXME:
* this test actually fails, gasp.
fail_unless (g_value_get_int64 (&value) == 12345678901LL, fail_unless (g_value_get_int64 (&value) == 12345678901LL,
"resulting value is %" G_GINT64_FORMAT ", not 12345678901"); "resulting value is %" G_GINT64_FORMAT ", not %s", value, string);
*/
} }
END_TEST; END_TEST;

View file

@ -984,7 +984,7 @@ gst_value_deserialize_boolean (GValue * dest, const char *s)
* int * * int *
*******/ *******/
static int static long long
gst_strtoll (const char *s, char **end, int base) gst_strtoll (const char *s, char **end, int base)
{ {
long long i; long long i;
@ -1060,13 +1060,14 @@ gst_value_deserialize_int_helper (long long *to, const char *s, long long min,
#define CREATE_SERIALIZATION(_type,_macro) \ #define CREATE_SERIALIZATION(_type,_macro) \
CREATE_SERIALIZATION_START(_type,_macro) \ CREATE_SERIALIZATION_START(_type,_macro) \
\ \
static gboolean \ static gboolean \
gst_value_deserialize_ ## _type (GValue * dest, const char *s) \ gst_value_deserialize_ ## _type (GValue * dest, const char *s) \
{ \ { \
long long x; \ long long x; \
\ \
if (gst_value_deserialize_int_helper (&x, s, G_MIN ## _macro, G_MAX ## _macro)) { \ if (gst_value_deserialize_int_helper (&x, s, G_MIN ## _macro, \
G_MAX ## _macro)) { \
g_value_set_ ## _type (dest, x); \ g_value_set_ ## _type (dest, x); \
return TRUE; \ return TRUE; \
} else { \ } else { \
@ -1076,14 +1077,14 @@ gst_value_deserialize_ ## _type (GValue * dest, const char *s) \
#define CREATE_USERIALIZATION(_type,_macro) \ #define CREATE_USERIALIZATION(_type,_macro) \
CREATE_SERIALIZATION_START(_type,_macro) \ CREATE_SERIALIZATION_START(_type,_macro) \
\ \
static gboolean \ static gboolean \
gst_value_deserialize_ ## _type (GValue * dest, const char *s) \ gst_value_deserialize_ ## _type (GValue * dest, const char *s) \
{ \ { \
unsigned long long x; \ unsigned long long x; \
char *end; \ char *end; \
gboolean ret = FALSE; \ gboolean ret = FALSE; \
\ \
x = g_ascii_strtoull (s, &end, 0); \ x = g_ascii_strtoull (s, &end, 0); \
if (*end == 0) { \ if (*end == 0) { \
ret = TRUE; \ ret = TRUE; \
@ -1106,7 +1107,7 @@ gst_value_deserialize_ ## _type (GValue * dest, const char *s) \
} \ } \
} \ } \
if (ret) { \ if (ret) { \
if (x > G_MAX ## _macro) {\ if (x > G_MAX ## _macro) { \
ret = FALSE; \ ret = FALSE; \
} else { \ } else { \
g_value_set_ ## _type (dest, x); \ g_value_set_ ## _type (dest, x); \
@ -1115,14 +1116,15 @@ gst_value_deserialize_ ## _type (GValue * dest, const char *s) \
return ret; \ return ret; \
} }
#define REGISTER_SERIALIZATION(_gtype, _type) G_STMT_START{ \ #define REGISTER_SERIALIZATION(_gtype, _type) \
G_STMT_START { \
static const GstValueTable gst_value = { \ static const GstValueTable gst_value = { \
_gtype, \ _gtype, \
gst_value_compare_ ## _type, \ gst_value_compare_ ## _type, \
gst_value_serialize_ ## _type, \ gst_value_serialize_ ## _type, \
gst_value_deserialize_ ## _type, \ gst_value_deserialize_ ## _type, \
}; \ }; \
\ \
gst_value_register (&gst_value); \ gst_value_register (&gst_value); \
} G_STMT_END } G_STMT_END
@ -2494,17 +2496,20 @@ gst_value_deserialize (GValue * dest, const gchar * src)
table = &g_array_index (gst_value_table, GstValueTable, i); table = &g_array_index (gst_value_table, GstValueTable, i);
if (table->serialize == NULL) if (table->serialize == NULL)
continue; continue;
if (table->type == G_VALUE_TYPE (dest)) { if (table->type == G_VALUE_TYPE (dest)) {
best = table; best = table;
break; break;
} }
if (g_type_is_a (G_VALUE_TYPE (dest), table->type)) { if (g_type_is_a (G_VALUE_TYPE (dest), table->type)) {
if (!best || g_type_is_a (table->type, best->type)) if (!best || g_type_is_a (table->type, best->type))
best = table; best = table;
} }
} }
if (best) if (best) {
return best->deserialize (dest, src); return best->deserialize (dest, src);
}
return FALSE; return FALSE;
} }

View file

@ -36,14 +36,13 @@ END_TEST;
START_TEST (test_deserialize_gint64) START_TEST (test_deserialize_gint64)
{ {
GValue value = { 0 }; GValue value = { 0 };
const char *string = "12345678901";
g_value_init (&value, G_TYPE_INT64); g_value_init (&value, G_TYPE_INT64);
fail_unless (gst_value_deserialize (&value, "12345678901")); fail_unless (gst_value_deserialize (&value, string));
/* FIXME:
* this test actually fails, gasp.
fail_unless (g_value_get_int64 (&value) == 12345678901LL, fail_unless (g_value_get_int64 (&value) == 12345678901LL,
"resulting value is %" G_GINT64_FORMAT ", not 12345678901"); "resulting value is %" G_GINT64_FORMAT ", not %s", value, string);
*/
} }
END_TEST; END_TEST;