Enlightenment CVS committal Author : cedric Project : e17 Module : libs/eet
Dir : e17/libs/eet/src/lib Modified Files: eet_data.c Log Message: Fix a bug with list or hash of basic type. They are now silently converted to an implicit structure with the basic type inside. =================================================================== RCS file: /cvs/e/e17/libs/eet/src/lib/eet_data.c,v retrieving revision 1.77 retrieving revision 1.78 diff -u -3 -r1.77 -r1.78 --- eet_data.c 15 May 2008 14:03:09 -0000 1.77 +++ eet_data.c 15 May 2008 14:14:35 -0000 1.78 @@ -79,9 +79,10 @@ struct _Eet_Data_Basic_Type_Decoder { - int size; - int (*get) (const Eet_Dictionary *ed, const void *src, const void *src_end, void *dest); - void *(*put) (Eet_Dictionary *ed, const void *src, int *size_ret); + int size; + const char *name; + int (*get) (const Eet_Dictionary *ed, const void *src, const void *src_end, void *dest); + void *(*put) (Eet_Dictionary *ed, const void *src, int *size_ret); }; struct _Eet_Data_Chunk @@ -202,18 +203,18 @@ const Eet_Data_Basic_Type_Decoder eet_coder[] = { - {sizeof(char), eet_data_get_char, eet_data_put_char }, - {sizeof(short), eet_data_get_short, eet_data_put_short }, - {sizeof(int), eet_data_get_int, eet_data_put_int }, - {sizeof(long long), eet_data_get_long_long, eet_data_put_long_long}, - {sizeof(float), eet_data_get_float, eet_data_put_float }, - {sizeof(double), eet_data_get_double, eet_data_put_double }, - {sizeof(char), eet_data_get_char, eet_data_put_char }, - {sizeof(short), eet_data_get_short, eet_data_put_short }, - {sizeof(int), eet_data_get_int, eet_data_put_int }, - {sizeof(long long), eet_data_get_long_long, eet_data_put_long_long}, - {sizeof(char *), eet_data_get_string, eet_data_put_string }, - {sizeof(char *), eet_data_get_istring, eet_data_put_istring } + {sizeof(char), "char", eet_data_get_char, eet_data_put_char }, + {sizeof(short), "short", eet_data_get_short, eet_data_put_short }, + {sizeof(int), "int", eet_data_get_int, eet_data_put_int }, + {sizeof(long long), "long_long", eet_data_get_long_long, eet_data_put_long_long}, + {sizeof(float), "float", eet_data_get_float, eet_data_put_float }, + {sizeof(double), "double", eet_data_get_double, eet_data_put_double }, + {sizeof(char), "uchar", eet_data_get_char, eet_data_put_char }, + {sizeof(short), "ushort", eet_data_get_short, eet_data_put_short }, + {sizeof(int), "uint", eet_data_get_int, eet_data_put_int }, + {sizeof(long long), "ulong_long", eet_data_get_long_long, eet_data_put_long_long}, + {sizeof(char *), "string", eet_data_get_string, eet_data_put_string }, + {sizeof(char *), "inlined_string", eet_data_get_istring, eet_data_put_istring } }; static int words_bigendian = -1; @@ -1026,14 +1027,37 @@ Eet_Data_Descriptor *subtype) { Eet_Data_Element *ede; + Eet_Data_Descriptor *simple_type; /* int l1, l2, p1, p2, i; char *ps;*/ + /* FIXME: Fail safely when realloc fail. */ edd->elements.num++; edd->elements.set = realloc(edd->elements.set, edd->elements.num * sizeof(Eet_Data_Element)); if (!edd->elements.set) return; ede = &(edd->elements.set[edd->elements.num - 1]); ede->name = name; + + /* + * We do a special case when we do list,hash or whatever group of simple type. + * Instead of handling it in encode/decode/dump/undump, we create an + * implicit structure with only the simple type. + */ + if (group_type > EET_G_UNKNOWN + && group_type < EET_G_LAST + && type != EET_T_UNKNOW + && subtype == NULL) + { + subtype = calloc(1, sizeof (Eet_Data_Descriptor)); + if (!subtype) return ; + subtype->name = "implicit"; + subtype->size = eet_coder[type - 1].size; + memcpy(&subtype->func, &edd->func, sizeof(subtype->func)); + + eet_data_descriptor_element_add(subtype, eet_coder[type - 1].name, type, + EET_G_UNKNOWN, 0, 0, NULL, NULL); + type = EET_T_UNKNOW; + } ede->type = type; ede->group_type = group_type; ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs