From: Enlightenment C. <no...@cv...> - 2008-05-14 20:53:11
|
Enlightenment CVS committal Author : cedric Project : e17 Module : libs/eet Dir : e17/libs/eet/src/lib Modified Files: eet_data.c Log Message: Converting back an hash from a dumped text was broken. =================================================================== RCS file: /cvs/e/e17/libs/eet/src/lib/eet_data.c,v retrieving revision 1.74 retrieving revision 1.75 diff -u -3 -r1.74 -r1.75 --- eet_data.c 28 Apr 2008 03:04:26 -0000 1.74 +++ eet_data.c 14 May 2008 20:53:07 -0000 1.75 @@ -1557,11 +1557,22 @@ data = _eet_data_dump_encode(ed, n, &size); if (data) { - eet_data_stream_write(ds, data, size); + echnk = eet_data_chunk_new(data, size, node->name, node->type, node->type); + eet_data_chunk_put(ed, echnk, ds); + eet_data_chunk_free(echnk); free(data); } } - break; + + /* Hash is somekind of special case, so we should embed it inside another chunk. */ + *size_ret = ds->pos; + cdata = ds->data; + + ds->data = NULL; + ds->size = 0; + eet_data_stream_free(ds); + + return cdata; case EET_T_CHAR: data = eet_data_put_type(ed, node->type, &(node->data.c), &size); if (data) |
From: Enlightenment C. <no...@cv...> - 2008-05-14 20:54:21
|
Enlightenment CVS committal Author : cedric Project : e17 Module : libs/eet Dir : e17/libs/eet/src/lib Modified Files: eet_data.c Log Message: Fix inlined string dump/undump. =================================================================== RCS file: /cvs/e/e17/libs/eet/src/lib/eet_data.c,v retrieving revision 1.75 retrieving revision 1.76 diff -u -3 -r1.75 -r1.76 --- eet_data.c 14 May 2008 20:53:07 -0000 1.75 +++ eet_data.c 14 May 2008 20:54:15 -0000 1.76 @@ -1654,6 +1654,13 @@ } break; case EET_T_INLINED_STRING: + data = eet_data_put_type(ed, node->type, &(node->data.str), &size); + if (data) + { + eet_data_stream_write(ds, data, size); + free(data); + } + break; case EET_T_STRING: data = eet_data_put_type(ed, node->type, &(node->data.str), &size); if (data) @@ -1870,6 +1877,11 @@ n->type = EET_T_STRING; n->data.str = strdup(tok4); } + else if (!strcmp(tok3, "inlined:")) + { + n->type = EET_T_INLINED_STRING; + n->data.str = strdup(tok4); + } else { printf("ERROR: value type '%s' invalid.\n", tok4); @@ -2295,6 +2307,18 @@ snprintf(tbuf, sizeof(tbuf), "%llu", *((unsigned long long *)dd)); dumpfunc(dumpdata, tbuf); break; case EET_T_INLINED_STRING: + { + char *s; + + s = *((char **)dd); + if (s) + { + dumpfunc(dumpdata, "inlined: \""); + _eet_data_dump_string_escape(dumpdata, dumpfunc, s); + dumpfunc(dumpdata, "\""); + } + } + break; case EET_T_STRING: { char *s; |
From: Enlightenment C. <no...@cv...> - 2008-05-15 14:03:17
|
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 typo preventing the parsing of unsigned int. =================================================================== RCS file: /cvs/e/e17/libs/eet/src/lib/eet_data.c,v retrieving revision 1.76 retrieving revision 1.77 diff -u -3 -r1.76 -r1.77 --- eet_data.c 14 May 2008 20:54:15 -0000 1.76 +++ eet_data.c 15 May 2008 14:03:09 -0000 1.77 @@ -1862,7 +1862,7 @@ n->type = EET_T_USHORT; sscanf(tok4, "%hu", &(n->data.us)); } - else if (!strcmp(tok3, "unit:")) + else if (!strcmp(tok3, "uint:")) { n->type = EET_T_UINT; sscanf(tok4, "%u", &(n->data.ui)); |
From: Enlightenment C. <no...@cv...> - 2008-05-15 14:14:38
|
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; |
From: Enlightenment C. <no...@cv...> - 2008-05-15 14:17:05
|
Enlightenment CVS committal Author : cedric Project : e17 Module : libs/eet Dir : e17/libs/eet/src/lib Modified Files: eet_data.c Log Message: Remove the wrong and dead code for basic type inside list/hash and put assert instead. =================================================================== RCS file: /cvs/e/e17/libs/eet/src/lib/eet_data.c,v retrieving revision 1.78 retrieving revision 1.79 diff -u -3 -r1.78 -r1.79 --- eet_data.c 15 May 2008 14:14:35 -0000 1.78 +++ eet_data.c 15 May 2008 14:16:46 -0000 1.79 @@ -12,6 +12,7 @@ #define __UNUSED__ #endif +#include <assert.h> #include <stdio.h> #include <string.h> #include <math.h> @@ -203,18 +204,18 @@ const Eet_Data_Basic_Type_Decoder eet_coder[] = { - {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), "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 } + {sizeof(char *), "string", eet_data_get_string, eet_data_put_string }, + {sizeof(char *), "inlined", eet_data_get_istring, eet_data_put_istring } }; static int words_bigendian = -1; @@ -1281,13 +1282,10 @@ data = NULL; } + assert(!IS_SIMPLE_TYPE(ede->type)); + /* Store data */ - if (IS_SIMPLE_TYPE(ede->type)) - data = eet_data_put_type(ed, - ede->type, - hdata, - &size); - else if (ede->subtype) + if (ede->subtype) data = _eet_data_descriptor_encode(ed, ede->subtype, hdata, @@ -2156,23 +2154,10 @@ ptr = (void **)(((char *)data) + ede->offset); list = *ptr; data_ret = NULL; - if (IS_SIMPLE_TYPE(type)) - { - data_ret = calloc(1, eet_coder[type - 1].size); - if (data_ret) - { - _eet_freelist_add(data_ret); - ret = eet_data_get_type(ed, - type, - echnk.data, - ((char *)echnk.data) + echnk.size, - data_ret); - if (ret <= 0) goto error; - } - else - goto error; - } - else if (ede->subtype) + + assert(!IS_SIMPLE_TYPE(type)); + + if (ede->subtype) data_ret = _eet_data_descriptor_decode(ed, ede->subtype, echnk.data, @@ -2216,23 +2201,10 @@ /* Read value */ eet_data_chunk_get(ed, &echnk, p, size); if (!echnk.name) goto error; - if (IS_SIMPLE_TYPE(type)) - { - data_ret = calloc(1, eet_coder[type - 1].size); - if (data_ret) - { - _eet_freelist_add(data_ret); - ret = eet_data_get_type(ed, - type, - echnk.data, - ((char *)echnk.data) + echnk.size, - data_ret); - if (ret <= 0) goto error; - } - else - goto error; - } - else if (ede->subtype) + + assert(!IS_SIMPLE_TYPE(type)); + + if (ede->subtype) { data_ret = _eet_data_descriptor_decode(ed, ede->subtype, @@ -2411,24 +2383,16 @@ void *data_ret; data_ret = NULL; - if (IS_SIMPLE_TYPE(type)) - { - data_ret = (void *)1; - ret = eet_data_get_type(ed, - type, - echnk.data, - ((char *)echnk.data) + echnk.size, - dd); - if (ret <= 0) goto error; - } - else - data_ret = _eet_data_descriptor_decode(ed, - NULL, - echnk.data, - echnk.size, - level + 2, - dumpfunc, - dumpdata); + + assert(!IS_SIMPLE_TYPE(type)); + + data_ret = _eet_data_descriptor_decode(ed, + NULL, + echnk.data, + echnk.size, + level + 2, + dumpfunc, + dumpdata); if (!data_ret) goto error; } @@ -2454,36 +2418,28 @@ /* Read value */ eet_data_chunk_get(ed, &echnk, p, size); if (!echnk.name) goto error; - if (IS_SIMPLE_TYPE(type)) - { - data_ret = (void *)1; - ret = eet_data_get_type(ed, - type, - echnk.data, - ((char *)echnk.data) + echnk.size, - dd); - if (ret <= 0) goto error; - } - else - { - char *s; - s = key; - if (s) - { - for (i = 0; i < level; i++) dumpfunc(dumpdata, " "); - dumpfunc(dumpdata, " key \""); - _eet_data_dump_string_escape(dumpdata, dumpfunc, s); - dumpfunc(dumpdata, "\";\n"); - } - data_ret = _eet_data_descriptor_decode(ed, - NULL, - echnk.data, - echnk.size, - level + 2, - dumpfunc, - dumpdata); - } + assert(!IS_SIMPLE_TYPE(type)); + + { + char *s; + + s = key; + if (s) + { + for (i = 0; i < level; i++) dumpfunc(dumpdata, " "); + dumpfunc(dumpdata, " key \""); + _eet_data_dump_string_escape(dumpdata, dumpfunc, s); + dumpfunc(dumpdata, "\";\n"); + } + data_ret = _eet_data_descriptor_decode(ed, + NULL, + echnk.data, + echnk.size, + level + 2, + dumpfunc, + dumpdata); + } if (!data_ret) { goto error; @@ -2711,12 +2667,9 @@ l = *((void **)(((char *)data_in) + ede->offset)); for (; l; l = edd->func.list_next(l)) { - if (IS_SIMPLE_TYPE(ede->type)) - data = eet_data_put_type(ed, - ede->type, - edd->func.list_data(l), - &size); - else if (ede->subtype) + assert(!IS_SIMPLE_TYPE(ede->type)); + + if (ede->subtype) data = _eet_data_descriptor_encode(ed, ede->subtype, edd->func.list_data(l), |
From: Enlightenment C. <no...@cv...> - 2008-05-16 09:59:22
|
Enlightenment CVS committal Author : cedric Project : e17 Module : libs/eet Dir : e17/libs/eet/src/lib Modified Files: eet_data.c Log Message: The purpose of descriptor3 was to introduce a way to malloc/free less string. So do it. =================================================================== RCS file: /cvs/e/e17/libs/eet/src/lib/eet_data.c,v retrieving revision 1.79 retrieving revision 1.80 diff -u -3 -r1.79 -r1.80 --- eet_data.c 15 May 2008 14:16:46 -0000 1.79 +++ eet_data.c 16 May 2008 09:59:16 -0000 1.80 @@ -1007,6 +1007,8 @@ edd->func.hash_foreach = eddc->func.hash_foreach; edd->func.hash_add = eddc->func.hash_add; edd->func.hash_free = eddc->func.hash_free; + edd->func.str_direct_alloc = eddc->func.str_direct_alloc; + edd->func.str_direct_free = eddc->func.str_direct_free; return edd; } |
From: Enlightenment C. <no...@cv...> - 2008-05-16 10:00:56
|
Enlightenment CVS committal Author : cedric Project : e17 Module : libs/eet Dir : e17/libs/eet/src/lib Modified Files: eet_lib.c Log Message: Fix EET_FILE_MODE_READ_WRITE when file doesn't exist. =================================================================== RCS file: /cvs/e/e17/libs/eet/src/lib/eet_lib.c,v retrieving revision 1.102 retrieving revision 1.103 diff -u -3 -r1.102 -r1.103 --- eet_lib.c 10 Apr 2008 09:12:43 -0000 1.102 +++ eet_lib.c 16 May 2008 10:00:54 -0000 1.103 @@ -1163,18 +1163,23 @@ if ((mode == EET_FILE_MODE_READ) || (mode == EET_FILE_MODE_READ_WRITE)) { fp = fopen(file, "rb"); - if (!fp) return NULL; + if (!fp) goto on_error; if (fstat(fileno(fp), &file_stat)) { fclose(fp); - return NULL; + fp = NULL; + goto on_error; } if ((mode == EET_FILE_MODE_READ) && (file_stat.st_size < (sizeof(int) * 3))) { fclose(fp); - return NULL; + fp = NULL; + goto on_error; } + + on_error: + if (fp == NULL && mode == EET_FILE_MODE_READ) return NULL; } else { @@ -1197,7 +1202,7 @@ if (ef) { /* reference it up and return it */ - fclose(fp); + if (fp != NULL) fclose(fp); ef->references++; return ef; } @@ -1221,8 +1226,11 @@ ef->data = NULL; ef->data_size = 0; - /* FIXME: Add new ed on EET_FILE_MODE_WRITE */ - ef->ed = mode == EET_FILE_MODE_WRITE ? eet_dictionary_add() : NULL; + ef->ed = (mode == EET_FILE_MODE_WRITE) + || (ef->fp == NULL && mode == EET_FILE_MODE_READ_WRITE) ? + eet_dictionary_add() : NULL; + + if (ef->fp == NULL && mode == EET_FILE_MODE_READ_WRITE) goto empty_file; /* if we can't open - bail out */ if (eet_test_close(!ef->fp, ef)) @@ -1241,12 +1249,14 @@ return NULL; } + empty_file: /* we need to delete the original file in read-write mode and re-open for writing */ if (ef->mode == EET_FILE_MODE_READ_WRITE) { ef->readfp = ef->fp; unlink(ef->path); ef->fp = fopen(ef->path, "wb"); + fcntl(fileno(ef->fp), F_SETFD, FD_CLOEXEC); } /* add to cache */ |
From: Enlightenment C. <no...@cv...> - 2008-05-16 14:03:25
|
Enlightenment CVS committal Author : cedric Project : e17 Module : libs/eet Dir : e17/libs/eet/src/lib Modified Files: eet_lib.c Log Message: Add some test around efn->offset and set it properly in all case. =================================================================== RCS file: /cvs/e/e17/libs/eet/src/lib/eet_lib.c,v retrieving revision 1.103 retrieving revision 1.104 diff -u -3 -r1.103 -r1.104 --- eet_lib.c 16 May 2008 10:00:54 -0000 1.103 +++ eet_lib.c 16 May 2008 14:03:11 -0000 1.104 @@ -1482,6 +1482,9 @@ if (!efn) return NULL; + if (efn->offset < 0 && efn->data == NULL) + return NULL; + /* get size (uncompressed, if compressed at all) */ size = efn->data_size; @@ -1590,6 +1593,7 @@ efn->size = data_size; efn->data_size = size; efn->data = data2; + efn->offset = -1; exists_already = 1; break; } @@ -1608,7 +1612,7 @@ efn->next = ef->header->directory->nodes[hash]; ef->header->directory->nodes[hash] = efn; - efn->offset = 0; + efn->offset = -1; efn->compression = !!compress; efn->size = data_size; efn->data_size = size; @@ -1795,6 +1799,8 @@ static int read_data_from_disk(Eet_File *ef, Eet_File_Node *efn, void *buf, int len) { + if (efn->offset < 0) return 0; + if (ef->data) { if ((efn->offset + len) > ef->data_size) return 0; |
From: Enlightenment C. <no...@cv...> - 2008-05-16 15:00:45
|
Enlightenment CVS committal Author : cedric Project : e17 Module : libs/eet Dir : e17/libs/eet/src/tests Log Message: Directory /cvs/e/e17/libs/eet/src/tests added to the repository |
From: Enlightenment C. <no...@cv...> - 2008-05-16 15:07:12
|
Enlightenment CVS committal Author : cedric Project : e17 Module : libs/eet Dir : e17/libs/eet/src/tests Added Files: Makefile.am TODO eet_data_suite.c eet_suite.c eet_suite.h Log Message: Introducing unit test in EFL using cvs check library for the test suite (http://check.sourceforge.net/) and lcov from cvs also for the coverage accounting (http://ltp.sourceforge.net/coverage/lcov.php). This first set provide an overall coverage rate for src/lib 2111 of 2607 lines (81.0%) for eet. And it helped in finding and fixing the bugs of the last three days. |
From: Enlightenment C. <no...@cv...> - 2008-05-16 15:07:41
|
Enlightenment CVS committal Author : cedric Project : e17 Module : libs/eet Dir : e17/libs/eet/src Modified Files: Makefile.am Log Message: Introducing unit test in EFL using cvs check library for the test suite (http://check.sourceforge.net/) and lcov from cvs also for the coverage accounting (http://ltp.sourceforge.net/coverage/lcov.php). This first set provide an overall coverage rate for src/lib 2111 of 2607 lines (81.0%) for eet. And it helped in finding and fixing the bugs of the last three days. =================================================================== RCS file: /cvs/e/e17/libs/eet/src/Makefile.am,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- Makefile.am 8 Sep 2007 09:35:40 -0000 1.5 +++ Makefile.am 16 May 2008 15:07:03 -0000 1.6 @@ -1,3 +1,3 @@ MAINTAINERCLEANFILES = Makefile.in -SUBDIRS = lib bin +SUBDIRS = lib bin tests |
From: Enlightenment C. <no...@cv...> - 2008-05-16 15:07:46
|
Enlightenment CVS committal Author : cedric Project : e17 Module : libs/eet Dir : e17/libs/eet/src/lib Modified Files: Makefile.am Log Message: Introducing unit test in EFL using cvs check library for the test suite (http://check.sourceforge.net/) and lcov from cvs also for the coverage accounting (http://ltp.sourceforge.net/coverage/lcov.php). This first set provide an overall coverage rate for src/lib 2111 of 2607 lines (81.0%) for eet. And it helped in finding and fixing the bugs of the last three days. =================================================================== RCS file: /cvs/e/e17/libs/eet/src/lib/Makefile.am,v retrieving revision 1.24 retrieving revision 1.25 diff -u -3 -r1.24 -r1.25 --- Makefile.am 19 Apr 2008 21:18:12 -0000 1.24 +++ Makefile.am 16 May 2008 15:07:03 -0000 1.25 @@ -7,7 +7,8 @@ -DPACKAGE_BIN_DIR=\"$(bindir)\" \ -DPACKAGE_LIB_DIR=\"$(libdir)\" \ -DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \ -@EVIL_CFLAGS@ +@EVIL_CFLAGS@ \ +@COVERAGE_CFLAGS@ include_HEADERS = Eet.h @@ -22,8 +23,11 @@ eet_utils.c libeet_la_CFLAGS = @WIN32_CFLAGS@ -libeet_la_LIBADD = @EVIL_LIBS@ @WIN32_LIBS@ -lz -ljpeg @fnmatch_libs@ -lm +libeet_la_LIBADD = @COVERAGE_LIBS@ @EVIL_LIBS@ @WIN32_LIBS@ -lz -ljpeg @fnmatch_libs@ -lm libeet_la_LDFLAGS = @lt_no_undefined@ @lt_enable_auto_import@ -version-info @version_info@ libeet_la_DEPENDENCIES = $(top_builddir)/config.h EXTRA_DIST = Eet_private.h + +clean-local: + @rm -rf *.gcno |
From: Enlightenment C. <no...@cv...> - 2008-05-16 15:07:59
|
Enlightenment CVS committal Author : cedric Project : e17 Module : libs/eet Dir : e17/libs/eet Modified Files: ChangeLog INSTALL Makefile.am configure.in Log Message: Introducing unit test in EFL using cvs check library for the test suite (http://check.sourceforge.net/) and lcov from cvs also for the coverage accounting (http://ltp.sourceforge.net/coverage/lcov.php). This first set provide an overall coverage rate for src/lib 2111 of 2607 lines (81.0%) for eet. And it helped in finding and fixing the bugs of the last three days. =================================================================== RCS file: /cvs/e/e17/libs/eet/ChangeLog,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- ChangeLog 28 Apr 2008 03:04:26 -0000 1.4 +++ ChangeLog 16 May 2008 15:07:03 -0000 1.5 @@ -8,4 +8,37 @@ (IS_SIMPLE_TYPE) to alloc the correct amount (using the correct type offset). Also fixed a hash (EET_G_HASH) of simple types too. +2008-05-14 Cedric BAIL + * Fix convertion from a text to a hash (EET_G_HASH). + + * Fix inlined string (EET_T_INLINED_STRING) dump/undump by introducing + the new word for the parser 'inlined'. + +2008-05-15 Cedric BAIL + + * Fix a typo preventing the parsing of unsigned int (EET_T_UINT). + + * Fix group of simple type by implicitly creating a structure with + the simple type in it. + + * Remove dead code handling group of simple type and put assert + instead. + +2008-05-16 Cedric BAIL + + * Fix eet_data_descriptor3_new as it purpose was to introduce + str_direct_alloc/str_direct_free usage. Application should now receive + direct pointer to read only (mmaped) string. + + * Fix EET_FILE_MODE_READ_WRITE when file doesn't exist. + + * Fix some miss use of efn->offset. + + * Introduce unit test in EFL. The current set provide an overall + coverage rate of 2111 of 2607 lines (81.0%) for eet. It helped + finding and fixing the bugs of the last three days. + The test suite is based on library check. At this time we need + cvs version, look at http://check.sourceforge.net/ to find it. + The covering is done by lcov and we also need the cvs version that + you can found at http://ltp.sourceforge.net/coverage/lcov.php. =================================================================== RCS file: /cvs/e/e17/libs/eet/INSTALL,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- INSTALL 8 Mar 2008 07:28:12 -0000 1.4 +++ INSTALL 16 May 2008 15:07:03 -0000 1.5 @@ -39,3 +39,11 @@ 3) run configure with the option --host=arm-wince-cegcc + +NOTE: If you want to be able to run make check, you need library check + from http://check.sourceforge.net/. + +NOTE: If you want to be able to run coverage test over eet, you will need + lcov from http://ltp.sourceforge.net/coverage/lcov.php. + +NOTE: For coverage support you also need check support. =================================================================== RCS file: /cvs/e/e17/libs/eet/Makefile.am,v retrieving revision 1.37 retrieving revision 1.38 diff -u -3 -r1.37 -r1.38 --- Makefile.am 20 Apr 2008 06:03:03 -0000 1.37 +++ Makefile.am 16 May 2008 15:07:03 -0000 1.38 @@ -38,3 +38,49 @@ pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = eet.pc + + +if EET_ENABLE_TESTS + +check-local: + @./src/tests/eet_suite + +else + +check-local: + @echo "reconfigure with --enable-tests" + +endif + +if EET_ENABLE_COVERAGE +lcov-reset: + @rm -rf coverage + @find . -name "*.gcda" -exec rm {} \; + @lcov --directory . --zerocounters + +lcov-report: + @mkdir coverage + @lcov --compat-libtool --directory . --capture --output-file coverage/coverage.info + @lcov -l coverage/coverage.info | grep -v "`cd $(top_srcdir) && pwd`" | cut -d: -f1 > coverage/remove + @lcov -r coverage/coverage.info `cat coverage/remove` > coverage/coverage.cleaned.info + @rm coverage/remove + @mv coverage/coverage.cleaned.info coverage/coverage.info + @genhtml -t "$(PACKAGE_STRING)" -o coverage coverage/coverage.info + +coverage: + @make lcov-reset + @make check + @make lcov-report + +clean-local: + @rm -rf coverage +else +lcov-reset: + @echo "reconfigure with --enable-gcov" + +lcov-report: + @echo "reconfigure with --enable-gcov" + +coverage: + @echo "reconfigure with --enable-tests --enable-gcov" +endif =================================================================== RCS file: /cvs/e/e17/libs/eet/configure.in,v retrieving revision 1.95 retrieving revision 1.96 diff -u -3 -r1.95 -r1.96 --- configure.in 20 Apr 2008 06:40:28 -0000 1.95 +++ configure.in 16 May 2008 15:07:03 -0000 1.96 @@ -29,6 +29,8 @@ version_info=`expr $VMAJ + $VMIN`":$VMIC:$VMIN" AC_SUBST(version_info) +PKG_PROG_PKG_CONFIG + WIN32_CFLAGS="" WIN32_LIBS="" lt_no_undefined="" @@ -115,6 +117,73 @@ ], AC_MSG_WARN([Cannot check when cross-compiling -- assuming null is okay]) ) +dnl Unit Tests + +AC_ARG_ENABLE(tests, + [AC_HELP_STRING([--enable-tests], [Enable tests @<:@default=no@:>@])], + [ + if test "x${enableval}" = "xyes" ; then + enable_tests="yes" + else + enable_tests="no" + fi + ], + [enable_tests="no"] +) +AC_MSG_CHECKING([if tests are built]) +AC_MSG_RESULT([${enable_tests}]) + +if test "x${enable_tests}" = "xyes" ; then + PKG_CHECK_MODULES([CHECK], + [check >= 0.9.5], + [dummy="yes"], + [enable_tests="no"] + ) +fi + +AM_CONDITIONAL(EET_ENABLE_TESTS, test "x${enable_tests}" = "xyes") + +dnl Coverage + +AC_ARG_ENABLE(coverage, + [AC_HELP_STRING([--enable-coverage], + [compile with coverage profiling instrumentation @<:@default=no@:>@])], + [ + if test "x${enableval}" = "xyes" ; then + enable_coverage="yes" + else + enable_coverage="no" + fi], + [enable_coverage="no"] +) +AC_MSG_CHECKING([whether to use profiling instrumentation]) +AC_MSG_RESULT($enable_coverage) + +if test "x$enable_tests" = "xno" -a "x$enable_coverage" = "xyes"; then + enable_coverage="no" +fi + +if test "x$enable_coverage" = "xyes"; then + AC_CHECK_PROG(have_lcov, + [lcov], + [yes], + [no] + ) + if test "x$have_lcov" = "xyes" ; then + COVERAGE_CFLAGS="-fprofile-arcs -ftest-coverage" + COVERAGE_LIBS="-lgcov" +dnl remove any optimisation flag and force debug symbols + CFLAGS="-g -O0" + else + AC_MSG_WARN([lcov is not found, disable profiling instrumentation]) + enable_coverage="no" + fi +fi +AC_SUBST(COVERAGE_CFLAGS) +AC_SUBST(COVERAGE_LIBS) + +AM_CONDITIONAL(EET_ENABLE_COVERAGE, test "x$enable_coverage" = "xyes") + #AM_CHECK_DOXYGEN() AC_OUTPUT([ @@ -124,6 +193,7 @@ src/Makefile src/lib/Makefile src/bin/Makefile +src/tests/Makefile README eet.spec ]) @@ -140,6 +210,9 @@ echo "------------------------------------------------------------------------" echo echo "Configuration Options Summary:" +echo +echo " Tests................: ${enable_tests}" +echo " Coverage.............: ${enable_coverage}" echo echo " Compilation..........: make" echo |
From: Enlightenment C. <no...@cv...> - 2008-05-19 15:23:57
|
Enlightenment CVS committal Author : cedric Project : e17 Module : libs/eet Dir : e17/libs/eet/src/lib Modified Files: eet_lib.c Log Message: Old eet file format are now marked as deprecated. The plan is to let the support enable by default for some time, then make desactivate it and finaly we will remove it completely at some point. =================================================================== RCS file: /cvs/e/e17/libs/eet/src/lib/eet_lib.c,v retrieving revision 1.104 retrieving revision 1.105 diff -u -3 -r1.104 -r1.105 --- eet_lib.c 16 May 2008 14:03:11 -0000 1.104 +++ eet_lib.c 19 May 2008 15:23:41 -0000 1.105 @@ -905,6 +905,7 @@ return ef; } +#if EET_OLD_EET_FILE_FORMAT static Eet_File * eet_internal_read1(Eet_File *ef) { @@ -915,6 +916,8 @@ int byte_entries; int i; + fprintf(stderr, "EET file format of '%s' is deprecated. You should just open it one time with mode == EET_FILE_MODE_READ_WRITE to solve this issue.\n", ef->path); + /* build header table if read mode */ /* geat header */ index += sizeof(int); @@ -1066,7 +1069,9 @@ } return ef; } +#endif +#if EET_OLD_EET_FILE_FORMAT static Eet_File * eet_internal_read(Eet_File *ef) { @@ -1080,8 +1085,10 @@ switch (ntohl(*data)) { +#if EET_OLD_EET_FILE_FORMAT case EET_MAGIC_FILE: return eet_internal_read1(ef); +#endif case EET_MAGIC_FILE2: return eet_internal_read2(ef); default: @@ -1271,6 +1278,7 @@ return ef; } +#endif EAPI Eet_File_Mode eet_mode_get(Eet_File *ef) |
From: Enlightenment C. <no...@cv...> - 2008-05-19 15:24:48
|
Enlightenment CVS committal Author : cedric Project : e17 Module : libs/eet Dir : e17/libs/eet Modified Files: configure.in Log Message: Old eet file format are now marked as deprecated. The plan is to let the support enable by default for some time, then make desactivate it and finaly we will remove it completely at some point. =================================================================== RCS file: /cvs/e/e17/libs/eet/configure.in,v retrieving revision 1.97 retrieving revision 1.98 diff -u -3 -r1.97 -r1.98 --- configure.in 19 May 2008 00:07:11 -0000 1.97 +++ configure.in 19 May 2008 15:23:41 -0000 1.98 @@ -184,6 +184,38 @@ AM_CONDITIONAL(EET_ENABLE_COVERAGE, test "x$enable_coverage" = "xyes") +dnl Disable support for old eet file format. +old_eet_file_format="yes" +AC_ARG_ENABLE(old-eet-file-format, + AC_HELP_STRING( + [--disable-old-eet-file-format], + [disable old eet file format support. [[default=enabled]]] + ), + [ old_eet_file_format=$enableval ] +) +AM_CONDITIONAL(EET_OLD_EET_FILE_FORMAT, test "x$old_eet_file_format" = "xyes") +if test "x$old_eet_file_format" = "xyes"; then + AC_DEFINE(EET_OLD_EET_FILE_FORMAT, 1, [support old eet file format]) +else + AC_DEFINE(EET_OLD_EET_FILE_FORMAT, 0, [support old eet file format]) +fi + +dnl Disable support for old eet file format. +old_eet_file_format="yes" +AC_ARG_ENABLE(old-eet-file-format, + AC_HELP_STRING( + [--disable-old-eet-file-format], + [disable old eet file format support. [[default=enabled]]] + ), + [ old_eet_file_format=$enableval ] +) +AM_CONDITIONAL(EET_OLD_EET_FILE_FORMAT, test "x$old_eet_file_format" = "xyes") +if test "x$old_eet_file_format" = "xyes"; then + AC_DEFINE(EET_OLD_EET_FILE_FORMAT, 1, [support old eet file format]) +else + AC_DEFINE(EET_OLD_EET_FILE_FORMAT, 0, [support old eet file format]) +fi + #AM_CHECK_DOXYGEN() AC_OUTPUT([ @@ -213,6 +245,10 @@ echo echo " Tests................: ${enable_tests}" echo " Coverage.............: ${enable_coverage}" +echo +echo " Old eet file format..: ${old_eet_file_format}" +echo +echo " Old eet file format..: ${old_eet_file_format}" echo echo " Compilation..........: make" echo |
From: Enlightenment C. <no...@cv...> - 2008-05-19 15:25:54
|
Enlightenment CVS committal Author : cedric Project : e17 Module : libs/eet Dir : e17/libs/eet/src/lib Modified Files: eet_data.c eet_lib.c Log Message: Remove all use of strcpy as we already know the length. =================================================================== RCS file: /cvs/e/e17/libs/eet/src/lib/eet_data.c,v retrieving revision 1.80 retrieving revision 1.81 diff -u -3 -r1.80 -r1.81 --- eet_data.c 16 May 2008 09:59:16 -0000 1.80 +++ eet_data.c 19 May 2008 15:25:46 -0000 1.81 @@ -417,7 +417,7 @@ len = strlen(s); d = malloc(len + 1); if (!d) return NULL; - strcpy(d, s); + memcpy(d, s, len + 1); *size_ret = len + 1; return d; } @@ -526,7 +526,7 @@ len = strlen(buf); d = malloc(len + 1); if (!d) return NULL; - strcpy(d, buf); + memcpy(d, buf, len + 1); *size_ret = len + 1; return d; } @@ -589,7 +589,7 @@ len = strlen(buf); d = malloc(len + 1); if (!d) return NULL; - strcpy(d, buf); + memcpy(d, buf, len + 1); *size_ret = len + 1; return d; =================================================================== RCS file: /cvs/e/e17/libs/eet/src/lib/eet_lib.c,v retrieving revision 1.105 retrieving revision 1.106 diff -u -3 -r1.105 -r1.106 --- eet_lib.c 19 May 2008 15:23:41 -0000 1.105 +++ eet_lib.c 19 May 2008 15:25:46 -0000 1.106 @@ -1134,6 +1134,7 @@ { FILE *fp; Eet_File *ef; + int file_len; struct stat file_stat; if (!file) @@ -1214,8 +1215,10 @@ return ef; } + file_len = strlen(file) + 1; + /* Allocate struct for eet file and have it zero'd out */ - ef = malloc(sizeof(Eet_File) + strlen(file) + 1); + ef = malloc(sizeof(Eet_File) + file_len); if (!ef) return NULL; @@ -1223,7 +1226,7 @@ ef->fp = fp; ef->readfp = NULL; ef->path = ((char *)ef) + sizeof(Eet_File); - strcpy(ef->path, file); + memcpy(ef->path, file, file_len); ef->magic = EET_MAGIC_FILE; ef->references = 1; ef->mode = mode; |
From: Enlightenment C. <no...@cv...> - 2008-05-19 15:27:22
|
Enlightenment CVS committal Author : cedric Project : e17 Module : libs/eet Dir : e17/libs/eet/src/lib Modified Files: Eet_private.h eet_data.c eet_utils.c Log Message: Remove use of sprintf by propagating the buffer size information. =================================================================== RCS file: /cvs/e/e17/libs/eet/src/lib/Eet_private.h,v retrieving revision 1.24 retrieving revision 1.25 diff -u -3 -r1.24 -r1.25 --- Eet_private.h 28 Mar 2008 17:17:43 -0000 1.24 +++ Eet_private.h 19 May 2008 15:27:04 -0000 1.25 @@ -68,7 +68,7 @@ void _eet_memfile_shutdown(void); int _eet_hash_gen(const char *key, int hash_size); int _eet_string_to_double_convert(const char *src, long long *m, long *e); -void _eet_double_to_string_convert(char *des, double d); +void _eet_double_to_string_convert(char des[128], double d); #ifndef PATH_MAX #define PATH_MAX 4096 =================================================================== RCS file: /cvs/e/e17/libs/eet/src/lib/eet_data.c,v retrieving revision 1.81 retrieving revision 1.82 diff -u -3 -r1.81 -r1.82 --- eet_data.c 19 May 2008 15:25:46 -0000 1.81 +++ eet_data.c 19 May 2008 15:27:04 -0000 1.82 @@ -513,7 +513,7 @@ static void * eet_data_put_float(Eet_Dictionary *ed, const void *src, int *size_ret) { - char buf[64]; + char buf[128]; int index; _eet_double_to_string_convert(buf, (double)(*(float *)src)); =================================================================== RCS file: /cvs/e/e17/libs/eet/src/lib/eet_utils.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -3 -r1.8 -r1.9 --- eet_utils.c 3 Apr 2008 19:30:18 -0000 1.8 +++ eet_utils.c 19 May 2008 15:27:04 -0000 1.9 @@ -150,7 +150,7 @@ /* */ /* where h is a hexadecimal number and e a decimal number. */ void -_eet_double_to_string_convert(char *des, double d) +_eet_double_to_string_convert(char des[128], double d) { static const char look_up_table[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', @@ -199,5 +199,5 @@ else *(des++) = '+'; - sprintf(des, "%d", p); + snprintf(des, 128, "%d", p); } |
From: Enlightenment C. <no...@cv...> - 2008-05-19 16:02:50
|
Enlightenment CVS committal Author : cedric Project : e17 Module : libs/eet Dir : e17/libs/eet/src/lib Modified Files: eet_data.c Log Message: Remove some unused variable. =================================================================== RCS file: /cvs/e/e17/libs/eet/src/lib/eet_data.c,v retrieving revision 1.82 retrieving revision 1.83 diff -u -3 -r1.82 -r1.83 --- eet_data.c 19 May 2008 15:27:04 -0000 1.82 +++ eet_data.c 19 May 2008 16:01:50 -0000 1.83 @@ -1030,7 +1030,6 @@ Eet_Data_Descriptor *subtype) { Eet_Data_Element *ede; - Eet_Data_Descriptor *simple_type; /* int l1, l2, p1, p2, i; char *ps;*/ @@ -2148,7 +2147,6 @@ break; case EET_G_LIST: { - int ret; void *list = NULL; void **ptr; void *data_ret; @@ -2381,7 +2379,6 @@ break; case EET_G_LIST: { - int ret; void *data_ret; data_ret = NULL; |
From: Enlightenment C. <no...@cv...> - 2008-05-19 16:29:14
|
Enlightenment CVS committal Author : cedric Project : e17 Module : libs/eet Dir : e17/libs/eet Modified Files: ChangeLog Log Message: Update ChangeLog. =================================================================== RCS file: /cvs/e/e17/libs/eet/ChangeLog,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- ChangeLog 16 May 2008 15:32:32 -0000 1.6 +++ ChangeLog 19 May 2008 16:28:30 -0000 1.7 @@ -43,3 +43,13 @@ The covering is done by gcov The html report is done by lcov version 1.6 or above. You can found it at http://ltp.sourceforge.net/coverage/lcov.php. + +2008-05-19 Cedric BAIL + + * Old Eet file format is now marked as deprecated and accessing old + file will display a warning. You can already remove completely all + code related to it, but it's still enabled by default. We will later + disable it by default and at some point drop the support completely. + + * Remove use of strcpy and sprintf definitively. + |
From: Enlightenment C. <no...@cv...> - 2008-05-19 16:48:50
|
Enlightenment CVS committal Author : cedric Project : e17 Module : libs/eet Dir : e17/libs/eet Modified Files: configure.in Log Message: Oops double commit. =================================================================== RCS file: /cvs/e/e17/libs/eet/configure.in,v retrieving revision 1.98 retrieving revision 1.99 diff -u -3 -r1.98 -r1.99 --- configure.in 19 May 2008 15:23:41 -0000 1.98 +++ configure.in 19 May 2008 16:47:37 -0000 1.99 @@ -200,22 +200,6 @@ AC_DEFINE(EET_OLD_EET_FILE_FORMAT, 0, [support old eet file format]) fi -dnl Disable support for old eet file format. -old_eet_file_format="yes" -AC_ARG_ENABLE(old-eet-file-format, - AC_HELP_STRING( - [--disable-old-eet-file-format], - [disable old eet file format support. [[default=enabled]]] - ), - [ old_eet_file_format=$enableval ] -) -AM_CONDITIONAL(EET_OLD_EET_FILE_FORMAT, test "x$old_eet_file_format" = "xyes") -if test "x$old_eet_file_format" = "xyes"; then - AC_DEFINE(EET_OLD_EET_FILE_FORMAT, 1, [support old eet file format]) -else - AC_DEFINE(EET_OLD_EET_FILE_FORMAT, 0, [support old eet file format]) -fi - #AM_CHECK_DOXYGEN() AC_OUTPUT([ @@ -245,8 +229,6 @@ echo echo " Tests................: ${enable_tests}" echo " Coverage.............: ${enable_coverage}" -echo -echo " Old eet file format..: ${old_eet_file_format}" echo echo " Old eet file format..: ${old_eet_file_format}" echo |
From: Enlightenment C. <no...@cv...> - 2008-05-27 13:50:45
|
Enlightenment CVS committal Author : cedric Project : e17 Module : libs/eet Dir : e17/libs/eet/src/lib Modified Files: eet_lib.c Log Message: Disabling support of old eet file format was broken. =================================================================== RCS file: /cvs/e/e17/libs/eet/src/lib/eet_lib.c,v retrieving revision 1.106 retrieving revision 1.107 diff -u -3 -r1.106 -r1.107 --- eet_lib.c 19 May 2008 15:25:46 -0000 1.106 +++ eet_lib.c 27 May 2008 13:50:40 -0000 1.107 @@ -1071,7 +1071,6 @@ } #endif -#if EET_OLD_EET_FILE_FORMAT static Eet_File * eet_internal_read(Eet_File *ef) { @@ -1281,7 +1280,6 @@ return ef; } -#endif EAPI Eet_File_Mode eet_mode_get(Eet_File *ef) |
From: Enlightenment C. <no...@cv...> - 2008-06-02 16:01:22
|
Enlightenment CVS committal Author : cedric Project : e17 Module : libs/eet Dir : e17/libs/eet/src/lib Modified Files: Eet.h eet_image.c Log Message: Add eet_data_image_read_to_surface and eet_data_image_decode_to_surface. This functions provide a way to support tiles with eet. They also give the possibility to directly decompress eet image inside an engine surface. =================================================================== RCS file: /cvs/e/e17/libs/eet/src/lib/Eet.h,v retrieving revision 1.54 retrieving revision 1.55 diff -u -3 -r1.54 -r1.55 --- Eet.h 17 Apr 2008 14:27:24 -0000 1.54 +++ Eet.h 2 Jun 2008 16:01:18 -0000 1.55 @@ -470,6 +470,45 @@ EAPI void *eet_data_image_read(Eet_File *ef, const char *name, unsigned int *w, unsigned int *h, int *alpha, int *compress, int *quality, int *lossy); /** + * Read image data from the named key in the eet file. + * @param ef A valid eet file handle opened for reading. + * @param name Name of the entry. eg: "/base/file_i_want". + * @param src_x The starting x coordinate from where to dump the stream. + * @param src_y The starting y coordinate from where to dump the stream. + * @param d A pointer to the pixel surface. + * @param w The expected width in pixels of the pixel surface to decode. + * @param h The expected height in pixels of the pixel surface to decode. + * @param row_stride The length of a pixels line in the destination surface. + * @param alpha A pointer to the int to hold the alpha flag. + * @param compress A pointer to the int to hold the compression amount. + * @param quality A pointer to the int to hold the quality amount. + * @param lossy A pointer to the int to hold the lossiness flag. + * @return 1 on success, 0 otherwise. + * + * This function reads an image from an eet file stored under the named + * key in the eet file and return a pointer to the decompressed pixel data. + * + * The other parameters of the image (width, height etc.) are placed into + * the values pointed to (they must be supplied). The pixel data is a linear + * array of pixels starting from the top-left of the image scanning row by + * row from left to right. Each pile is a 32bit value, with the high byte + * being the alpha channel, the next being red, then green, and the low byte + * being blue. The width and height are measured in pixels and will be + * greater than 0 when returned. The alpha flag is either 0 or 1. 0 denotes + * that the alpha channel is not used. 1 denotes that it is significant. + * Compress is filled with the compression value/amount the image was + * stored with. The quality value is filled with the quality encoding of + * the image file (0 - 100). The lossy flags is either 0 or 1 as to if + * the image was encoded lossily or not. + * + * On success the function returns 1, and 0 on failure. On failure the + * parameter values may not contain any sensible data. + * + * @since 1.0.2 + */ + EAPI int eet_data_image_read_to_surface(Eet_File *ef, const char *name, unsigned int src_x, unsigned int src_y, unsigned int *d, unsigned int w, unsigned int h, unsigned int row_stride, int *alpha, int *compress, int *quality, int *lossy); + + /** * Write image data to the named key in an eet file. * @param ef A valid eet file handle opened for writing. * @param name Name of the entry. eg: "/base/file_i_want". @@ -574,6 +613,45 @@ * @since 1.0.0 */ EAPI void *eet_data_image_decode(const void *data, int size, unsigned int *w, unsigned int *h, int *alpha, int *compress, int *quality, int *lossy); + + /** + * Decode Image data into pixel data. + * @param data The encoded pixel data. + * @param size The size, in bytes, of the encoded pixel data. + * @param src_x The starting x coordinate from where to dump the stream. + * @param src_y The starting y coordinate from where to dump the stream. + * @param d A pointer to the pixel surface. + * @param w The expected width in pixels of the pixel surface to decode. + * @param h The expected height in pixels of the pixel surface to decode. + * @param row_stride The length of a pixels line in the destination surface. + * @param alpha A pointer to the int to hold the alpha flag. + * @param compress A pointer to the int to hold the compression amount. + * @param quality A pointer to the int to hold the quality amount. + * @param lossy A pointer to the int to hold the lossiness flag. + * @return 1 on success, 0 otherwise. + * + * This function takes encoded pixel data and decodes it into raw RGBA + * pixels on success. + * + * The other parameters of the image (alpha, compress etc.) are placed into + * the values pointed to (they must be supplied). The pixel data is a linear + * array of pixels starting from the top-left of the image scanning row by + * row from left to right. Each pixel is a 32bit value, with the high byte + * being the alpha channel, the next being red, then green, and the low byte + * being blue. The width and height are measured in pixels and will be + * greater than 0 when returned. The alpha flag is either 0 or 1. 0 denotes + * that the alpha channel is not used. 1 denotes that it is significant. + * Compress is filled with the compression value/amount the image was + * stored with. The quality value is filled with the quality encoding of + * the image file (0 - 100). The lossy flags is either 0 or 1 as to if + * the image was encoded lossily or not. + * + * On success the function returns 1, and 0 on failure. On failure the + * parameter values may not contain any sensible data. + * + * @since 1.0.2 + */ + EAPI int eet_data_image_decode_to_surface(const void *data, int size, unsigned int src_x, unsigned int src_y, unsigned int *d, unsigned int w, unsigned int h, unsigned int row_stride, int *alpha, int *compress, int *quality, int *lossy); /** * Encode image data for storage or transmission. =================================================================== RCS file: /cvs/e/e17/libs/eet/src/lib/eet_image.c,v retrieving revision 1.21 retrieving revision 1.22 diff -u -3 -r1.21 -r1.22 --- eet_image.c 3 Apr 2008 19:29:55 -0000 1.21 +++ eet_image.c 2 Jun 2008 16:01:18 -0000 1.22 @@ -55,8 +55,8 @@ static void _JPEGErrorHandler2(j_common_ptr cinfo, int msg_level); static int eet_data_image_jpeg_header_decode(const void *data, int size, unsigned int *w, unsigned int *h); -static void *eet_data_image_jpeg_rgb_decode(const void *data, int size, unsigned int *w, unsigned int *h); -static void *eet_data_image_jpeg_alpha_decode(const void *data, int size, unsigned int *d, unsigned int *w, unsigned int *h); +static int eet_data_image_jpeg_rgb_decode(const void *data, int size, unsigned int src_x, unsigned int src_y, unsigned int *d, unsigned int w, unsigned int h, unsigned int row_stride); +static void *eet_data_image_jpeg_alpha_decode(const void *data, int size, unsigned int src_x, unsigned int src_y, unsigned int *d, unsigned int w, unsigned int h, unsigned int row_stride); static void *eet_data_image_lossless_convert(int *size, const void *data, unsigned int w, unsigned int h, int alpha); static void *eet_data_image_lossless_compressed_convert(int *size, const void *data, unsigned int w, unsigned int h, int alpha, int compression); static void *eet_data_image_jpeg_convert(int *size, const void *data, unsigned int w, unsigned int h, int alpha, int quality); @@ -168,20 +168,24 @@ return 1; } -static void * -eet_data_image_jpeg_rgb_decode(const void *data, int size, unsigned int *w, unsigned int *h) +static int +eet_data_image_jpeg_rgb_decode(const void *data, int size, unsigned int src_x, unsigned int src_y, + unsigned int *d, unsigned int w, unsigned int h, unsigned int row_stride) { - unsigned int *d; struct jpeg_decompress_struct cinfo; struct _JPEG_error_mgr jerr; unsigned char *ptr, *line[16], *tdata = NULL; - unsigned int *ptr2; - unsigned int x, y, l, scans; + unsigned int *ptr2, *tmp; + unsigned int iw, ih; + int x, y, l, scans; int i, count, prevy; FILE *f; + /* FIXME: handle src_x, src_y and row_stride correctly */ + if (!d) return 0; + f = _eet_memfile_read_open(data, (size_t)size); - if (!f) return NULL; + if (!f) return 0; cinfo.err = jpeg_std_error(&(jerr.pub)); jerr.pub.error_exit = _JPEGFatalErrorHandler; jerr.pub.emit_message = _JPEGErrorHandler2; @@ -191,7 +195,7 @@ if (tdata) free(tdata); jpeg_destroy_decompress(&cinfo); _eet_memfile_read_close(f); - return NULL; + return 0; } jpeg_create_decompress(&cinfo); jpeg_stdio_src(&cinfo, f); @@ -202,13 +206,13 @@ jpeg_start_decompress(&cinfo); /* head decoding */ - *w = cinfo.output_width; - *h = cinfo.output_height; - if ((*w < 1) || (*h < 1) || (*w > 8192) || (*h > 8192)) + iw = cinfo.output_width; + ih = cinfo.output_height; + if ((iw != w) || (ih != h)) { jpeg_destroy_decompress(&cinfo); _eet_memfile_read_close(f); - return NULL; + return 0; } /* end head decoding */ /* data decoding */ @@ -216,79 +220,102 @@ { jpeg_destroy_decompress(&cinfo); _eet_memfile_read_close(f); - return NULL; - } - tdata = alloca((*w) * 16 * 3); - d = malloc((*w) * (*h) * 4); - if (!d) - { - jpeg_destroy_decompress(&cinfo); - _eet_memfile_read_close(f); - return NULL; + return 0; } + tdata = alloca((iw) * 16 * 3); ptr2 = d; count = 0; prevy = 0; + if (cinfo.output_components == 3) { for (i = 0; i < cinfo.rec_outbuf_height; i++) - line[i] = tdata + (i * (*w) * 3); - for (l = 0; l < (*h); l += cinfo.rec_outbuf_height) + line[i] = tdata + (i * (iw) * 3); + for (l = 0; l < ih; l += cinfo.rec_outbuf_height) { jpeg_read_scanlines(&cinfo, line, cinfo.rec_outbuf_height); - scans = cinfo.rec_outbuf_height; - if (((*h) - l) < scans) scans = (*h) - l; + scans = cinfo.rec_outbuf_height; + if ((ih - l) < scans) scans = ih - l; ptr = tdata; - for (y = 0; y < scans; y++) + + if (l + scans >= src_y && l < src_y + h) { - for (x = 0; x < (*w); x++) + y = src_y - l; + if (y < 0) y = 0; + for (ptr += 3 * iw * y; y < scans && (y + l) < (src_y + h); y++) { - *ptr2 = - (0xff000000) | ((ptr[0]) << 16) | ((ptr[1]) << 8) | (ptr[2]); - ptr += 3; - ptr2++; + tmp = ptr2; + ptr += 3 * src_x; + for (x = 0; x < w; x++) + { + *ptr2 = + (0xff000000) | ((ptr[0]) << 16) | ((ptr[1]) << 8) | (ptr[2]); + ptr += 3; + ptr2++; + } + ptr += 3 * (iw - w); + ptr2 = tmp + row_stride / 4; } } + else + { + ptr += 3 * iw * scans; + } } } else if (cinfo.output_components == 1) { for (i = 0; i < cinfo.rec_outbuf_height; i++) - line[i] = tdata + (i * (*w)); - for (l = 0; l < (*h); l += cinfo.rec_outbuf_height) + line[i] = tdata + (i * (iw)); + for (l = 0; l < (ih); l += cinfo.rec_outbuf_height) { jpeg_read_scanlines(&cinfo, line, cinfo.rec_outbuf_height); scans = cinfo.rec_outbuf_height; - if (((*h) - l) < scans) scans = (*h) - l; + if (((ih) - l) < scans) scans = (ih) - l; ptr = tdata; - for (y = 0; y < scans; y++) + + if (l >= src_y && l < src_y + h) { - for (x = 0; x < (*w); x++) + y = src_y - l; + if (y < 0) y = 0; + for (ptr += iw * y; y < scans && (y + l) < (src_y + h); y++) { - *ptr2 = - (0xff000000) | ((ptr[0]) << 16) | ((ptr[0]) << 8) | (ptr[0]); - ptr++; - ptr2++; + tmp = ptr2; + ptr += src_x; + for (x = 0; x < w; x++) + { + *ptr2 = + (0xff000000) | ((ptr[0]) << 16) | ((ptr[0]) << 8) | (ptr[0]); + ptr++; + ptr2++; + } + ptr += iw - w; + ptr2 = tmp + row_stride / 4; } } + else + { + ptr += iw * scans; + } } } /* end data decoding */ jpeg_finish_decompress(&cinfo); jpeg_destroy_decompress(&cinfo); _eet_memfile_read_close(f); - return d; + return 1; } static void * -eet_data_image_jpeg_alpha_decode(const void *data, int size, unsigned int *d, unsigned int *w, unsigned int *h) +eet_data_image_jpeg_alpha_decode(const void *data, int size, unsigned int src_x, unsigned int src_y, + unsigned int *d, unsigned int w, unsigned int h, unsigned int row_stride) { struct jpeg_decompress_struct cinfo; struct _JPEG_error_mgr jerr; unsigned char *ptr, *line[16], *tdata = NULL; - unsigned int *ptr2; - unsigned int x, y, l, scans; - int i, count, prevy; + unsigned int *ptr2, *tmp; + int x, y, l, scans; + int i, count, prevy, iw; FILE *f; f = _eet_memfile_read_open(data, (size_t)size); @@ -322,20 +349,14 @@ jpeg_start_decompress(&cinfo); /* head decoding */ - if ((*w) != cinfo.output_width) + iw = cinfo.output_width; + if (w != cinfo.output_width + || h != cinfo.output_height) { jpeg_destroy_decompress(&cinfo); _eet_memfile_read_close(f); return NULL; } - if ((*h) != cinfo.output_height) - { - jpeg_destroy_decompress(&cinfo); - _eet_memfile_read_close(f); - return NULL; - } - *w = cinfo.output_width; - *h = cinfo.output_height; /* end head decoding */ /* data decoding */ if (cinfo.rec_outbuf_height > 16) @@ -344,31 +365,45 @@ _eet_memfile_read_close(f); return NULL; } - tdata = alloca((*w) * 16 * 3); + tdata = alloca(w * 16 * 3); ptr2 = d; count = 0; prevy = 0; if (cinfo.output_components == 1) { for (i = 0; i < cinfo.rec_outbuf_height; i++) - line[i] = tdata + (i * (*w)); - for (l = 0; l < (*h); l += cinfo.rec_outbuf_height) + line[i] = tdata + (i * w); + for (l = 0; l < h; l += cinfo.rec_outbuf_height) { jpeg_read_scanlines(&cinfo, line, cinfo.rec_outbuf_height); scans = cinfo.rec_outbuf_height; - if (((*h) - l) < scans) scans = (*h) - l; + if ((h - l) < scans) scans = h - l; ptr = tdata; - for (y = 0; y < scans; y++) + + if (l >= src_y && l < src_y + h) { - for (x = 0; x < (*w); x++) + y = src_y - l; + if (y < 0) y = 0; + for (ptr += iw * y; y < scans && (y + l) < (src_y + h); y++) { - *ptr2 = - ((*ptr2) & 0x00ffffff) | - ((ptr[0]) << 24); - ptr++; - ptr2++; + tmp = ptr2; + ptr += src_x; + for (x = 0; x < w; x++) + { + *ptr2 = + ((*ptr2) & 0x00ffffff) | + ((ptr[0]) << 24); + ptr++; + ptr2++; + } + ptr += iw - w; + ptr2 = tmp + row_stride / 4; } } + else + { + ptr += iw * scans; + } } } /* end data decoding */ @@ -786,6 +821,33 @@ } EAPI int +eet_data_image_read_to_surface(Eet_File *ef, const char *name, unsigned int src_x, unsigned int src_y, + unsigned int *d, unsigned int w, unsigned int h, unsigned int row_stride, + int *alpha, int *compress, int *quality, int *lossy) +{ + void *data; + int size; + int free_data = 0; + int res = 1; + + + data = (void *)eet_read_direct(ef, name, &size); + if (!data) + { + data = eet_read(ef, name, &size); + free_data = 1; + } + + if (!data) return 0; + res = eet_data_image_decode_to_surface(data, size, src_x, src_y, d, w, h, row_stride, alpha, compress, quality, lossy); + + if (free_data) + free(data); + + return res; +} + +EAPI int eet_data_image_header_read(Eet_File *ef, const char *name, unsigned int *w, unsigned int *h, int *alpha, int *compress, int *quality, int *lossy) @@ -869,7 +931,7 @@ if ((cp == 0) && (size < ((iw * ih * 4) + 32))) return 0; if (w) *w = iw; if (h) *h = ih; - if (alpha) *alpha = al; + if (alpha) *alpha = al ? 1 : 0; if (compress) *compress = cp; if (lossy) *lossy = 0; if (quality) *quality = 100; @@ -918,118 +980,172 @@ return 0; } -EAPI void * -eet_data_image_decode(const void *data, int size, unsigned int *w, unsigned int *h, int *alpha, int *compress, int *quality, int *lossy) +static void +_eet_data_image_copy_buffer(const unsigned int *src, unsigned int src_x, unsigned int src_y, unsigned int src_w, + unsigned int *dst, unsigned int w, unsigned int h, unsigned int row_stride) { - unsigned int *d = NULL; - int header[8]; + src += src_x + src_y * src_w; - if (words_bigendian == -1) + if (row_stride == src_w * 4 && w == src_w) { - unsigned long int v; - - v = htonl(0x12345678); - if (v == 0x12345678) words_bigendian = 1; - else words_bigendian = 0; + memcpy(dst, src, row_stride * h); } - - if (size < 32) return NULL; - - memcpy(header, data, 32); - if (words_bigendian) + else { - int i; + unsigned int *over = dst; + unsigned int y; - for (i = 0; i < 8; i++) SWAP32(header[i]); + for (y = 0; y < h; ++y, src += src_w, over += row_stride) + memcpy(over, src, w * 4); } - if ((unsigned)header[0] == 0xac1dfeed) +} + + +static int +_eet_data_image_decode_inside(const void *data, int size, unsigned int src_x, unsigned int src_y, + unsigned int src_w, unsigned int src_h, + unsigned int *d, unsigned int w, unsigned int h, unsigned int row_stride, + int alpha, int compress, int quality, int lossy) +{ + if (lossy == 0 && quality == 100) { - int iw, ih, al, cp; unsigned int *body; - iw = header[1]; - ih = header[2]; - al = header[3]; - cp = header[4]; - if ((iw > 8192) || (ih > 8192)) return NULL; - if ((cp == 0) && (size < ((iw * ih * 4) + 32))) return NULL; body = ((unsigned int *)data) + 8; - d = malloc(iw * ih * 4); - if (!d) return NULL; - if (!cp) + if (!compress) { - memcpy(d, body, iw * ih * 4); - if (words_bigendian) - { - int x; - - for (x = 0; x < (iw * ih); x++) SWAP32(d[x]); - } + _eet_data_image_copy_buffer(body, src_x, src_y, src_w, d, w, h, row_stride); } else { - uLongf dlen; + if (src_h == h && src_w == w && row_stride == src_w * 4) + { + uLongf dlen; - dlen = iw * ih * 4; - uncompress((Bytef *)d, &dlen, (Bytef *)body, - (uLongf)(size - 32)); - if (words_bigendian) + dlen = w * h * 4; + uncompress((Bytef *)d, &dlen, (Bytef *)body, + (uLongf)(size - 32)); + } + else { - int x; + Bytef *dtmp; + uLongf dlen = src_w * src_h * 4; + + /* FIXME: This could create a huge alloc. So compressed data and tile could not always work. */ + dtmp = malloc(dlen); + if (!dtmp) return 0; + + uncompress(dtmp, &dlen, (Bytef *)body, (uLongf)(size - 32)); - for (x = 0; x < (iw * ih); x++) SWAP32(d[x]); + _eet_data_image_copy_buffer((unsigned int *) dtmp, src_x, src_y, src_w, d, w, h, row_stride); + + free(dtmp); } } - if (d) + + /* Fix swapiness. */ + if (words_bigendian) { - if (w) *w = iw; - if (h) *h = ih; - if (alpha) *alpha = al; - if (compress) *compress = cp; - if (lossy) *lossy = 0; - if (quality) *quality = 100; + unsigned int x; + + for (x = 0; x < (w * h); x++) SWAP32(d[x]); } } - else if ((unsigned)header[0] == 0xbeeff00d) + else if (compress == 0 && lossy == 1) { - unsigned int iw = 0, ih = 0; - unsigned const char *dt; - int sz1, sz2; - - sz1 = header[1]; - sz2 = header[2]; - dt = data; - dt += 12; - d = eet_data_image_jpeg_rgb_decode(dt, sz1, &iw, &ih); - if (d) + if (alpha) { - dt += sz1; - eet_data_image_jpeg_alpha_decode(dt, sz2, d, &iw, &ih); + unsigned const char *dt; + int header[8]; + int sz1, sz2; + + memcpy(header, data, 32); + if (words_bigendian) + { + int i; + + for (i = 0; i < 8; i++) SWAP32(header[i]); + } + + sz1 = header[1]; + sz2 = header[2]; + dt = data; + dt += 12; + + if (eet_data_image_jpeg_rgb_decode(dt, sz1, src_x, src_y, d, w, h, row_stride)) + { + dt += sz1; + if (!eet_data_image_jpeg_alpha_decode(dt, sz2, src_x, src_y, d, w, h, row_stride)) + return 0; + } } - if (d) + else { - if (w) *w = iw; - if (h) *h = ih; - if (alpha) *alpha = 1; - if (compress) *compress = 0; - if (lossy) *lossy = 1; - if (quality) *quality = 75; + if (!eet_data_image_jpeg_rgb_decode(data, size, src_x, src_y, d, w, h, row_stride)) + return 0; } } else { - unsigned int iw = 0, ih = 0; + abort(); + } - d = eet_data_image_jpeg_rgb_decode(data, size, &iw, &ih); - if (d) - { - if (w) *w = iw; - if (h) *h = ih; - if (alpha) *alpha = 0; - if (compress) *compress = 0; - if (lossy) *lossy = 1; - if (quality) *quality = 75; - } + return 1; +} + +EAPI void * +eet_data_image_decode(const void *data, int size, unsigned int *w, unsigned int *h, int *alpha, int *compress, int *quality, int *lossy) +{ + unsigned int *d = NULL; + unsigned int iw, ih; + int ialpha, icompress, iquality, ilossy; + + /* All check are done during header decode, this simplify the code a lot. */ + if (!eet_data_image_header_decode(data, size, &iw, &ih, &ialpha, &icompress, &iquality, &ilossy)) + return NULL; + + d = malloc(iw * ih * 4); + if (!d) return NULL; + + if (!_eet_data_image_decode_inside(data, size, 0, 0, iw, ih, d, iw, ih, iw * 4, ialpha, icompress, iquality, ilossy)) + { + if (d) free(d); + return NULL; } + + if (w) *w = iw; + if (h) *h = ih; + if (alpha) *alpha = ialpha; + if (compress) *compress = icompress; + if (quality) *quality = iquality; + if (lossy) *lossy = ilossy; + return d; +} + +EAPI int +eet_data_image_decode_to_surface(const void *data, int size, unsigned int src_x, unsigned int src_y, + unsigned int *d, unsigned int w, unsigned int h, unsigned int row_stride, + int *alpha, int *compress, int *quality, int *lossy) +{ + unsigned int iw, ih; + int ialpha, icompress, iquality, ilossy; + + /* All check are done during header decode, this simplify the code a lot. */ + if (!eet_data_image_header_decode(data, size, &iw, &ih, &ialpha, &icompress, &iquality, &ilossy)) + return 0; + + if (!d) return 0; + if (w * 4 > row_stride) return 0; + if (w > iw || h > ih) return 0; + + if (!_eet_data_image_decode_inside(data, size, src_x, src_y, iw, ih, d, w, h, row_stride, ialpha, icompress, iquality, ilossy)) + return 0; + + if (alpha) *alpha = ialpha; + if (compress) *compress = icompress; + if (quality) *quality = iquality; + if (lossy) *lossy = ilossy; + + return 1; } |
From: Enlightenment C. <no...@cv...> - 2008-06-02 16:01:22
|
Enlightenment CVS committal Author : cedric Project : e17 Module : libs/eet Dir : e17/libs/eet/src/tests Modified Files: eet_suite.c Log Message: Add eet_data_image_read_to_surface and eet_data_image_decode_to_surface. This functions provide a way to support tiles with eet. They also give the possibility to directly decompress eet image inside an engine surface. =================================================================== RCS file: /cvs/e/e17/libs/eet/src/tests/eet_suite.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- eet_suite.c 16 May 2008 15:07:03 -0000 1.1 +++ eet_suite.c 2 Jun 2008 16:01:18 -0000 1.2 @@ -903,10 +903,21 @@ fail_if(compress != 0); fail_if(lossy != 0); - data = eet_data_image_read(ef, EET_TEST_FILE_IMAGE "0", &w, &h, &alpha, &compress, &quality, &lossy); + data = malloc(w * h * 4); fail_if(data == NULL); - fail_if(w != test_noalpha.w); - fail_if(h != test_noalpha.h); + result = eet_data_image_read_to_surface(ef, EET_TEST_FILE_IMAGE "0", 4, 4, data, 2, 2, w * 4, &alpha, &compress, &quality, &lossy); + fail_if(result != 1); + fail_if(alpha != test_noalpha.alpha); + fail_if(compress != 0); + fail_if(quality != 100); + fail_if(lossy != 0); + fail_if(data[0] != test_noalpha.color[4 + 4 * w]); + free(data); + + data = malloc(w * h * 4); + fail_if(data == NULL); + result = eet_data_image_read_to_surface(ef, EET_TEST_FILE_IMAGE "0", 0, 0, data, w, h, w * 4, &alpha, &compress, &quality, &lossy); + fail_if(result != 1); fail_if(alpha != test_noalpha.alpha); fail_if(compress != 0); fail_if(quality != 100); |
From: Enlightenment C. <no...@cv...> - 2008-06-02 16:02:43
|
Enlightenment CVS committal Author : cedric Project : e17 Module : libs/eet Dir : e17/libs/eet Modified Files: ChangeLog Log Message: Update ChangeLog. =================================================================== RCS file: /cvs/e/e17/libs/eet/ChangeLog,v retrieving revision 1.7 retrieving revision 1.8 diff -u -3 -r1.7 -r1.8 --- ChangeLog 19 May 2008 16:28:30 -0000 1.7 +++ ChangeLog 2 Jun 2008 16:02:41 -0000 1.8 @@ -53,3 +53,9 @@ * Remove use of strcpy and sprintf definitively. +2008-06-02 Cedric BAIL + + * Introduce tile support and the possibility to decompress eet + image inside an existing surface. + + |
From: Enlightenment C. <no...@cv...> - 2008-06-26 15:47:30
|
Enlightenment CVS committal Author : cedric Project : e17 Module : libs/eet Dir : e17/libs/eet/src/tests Modified Files: eet_suite.c Log Message: This patch is a starting point for cleaning up eet_data.c. It also add EET_G_VAR_ARRAY and EET_G_ARRAY thanks to turran's (jor...@gm...) last year patch. Of course we have test code for it and eet_data.c code is covered around 90.1%. We need to test with garbage data for increasing it more. WARNING: API of eet_data_descriptor_element_add is not clean and we will need to break it, if we want a clean API. So this is the plan for version 2.0.0. =================================================================== RCS file: /cvs/e/e17/libs/eet/src/tests/eet_suite.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- eet_suite.c 2 Jun 2008 16:01:18 -0000 1.2 +++ eet_suite.c 26 Jun 2008 15:47:25 -0000 1.3 @@ -1,5 +1,6 @@ #include <stdlib.h> #include <string.h> +#include <strings.h> #include <stdio.h> #include <check.h> @@ -91,38 +92,56 @@ } }; +static void +_eet_test_basic_set(Eet_Test_Basic_Type *res, int i) +{ + res->c = EET_TEST_CHAR; + res->s = EET_TEST_SHORT; + res->i = EET_TEST_INT + i; + res->l = EET_TEST_LONG_LONG; + res->str = EET_TEST_STRING; + res->istr = EET_TEST_STRING; + res->f1 = - EET_TEST_FLOAT; + res->d = - EET_TEST_DOUBLE; + res->f2 = EET_TEST_FLOAT4; + res->uc = EET_TEST_CHAR; + res->us = EET_TEST_SHORT; + res->ui = EET_TEST_INT; + res->ul = EET_TEST_LONG_LONG; +} -START_TEST(eet_test_basic_data_type_encoding_decoding) +static void +_eet_test_basic_check(Eet_Test_Basic_Type *result, int i) { - Eet_Data_Descriptor *edd; - Eet_Test_Basic_Type *result; - Eet_Data_Descriptor_Class eddc; - Eet_Test_Basic_Type etbt; - void *transfert; - int size; float tmp; - etbt.c = EET_TEST_CHAR; - etbt.s = EET_TEST_SHORT; - etbt.i = EET_TEST_INT; - etbt.l = EET_TEST_LONG_LONG; - etbt.str = EET_TEST_STRING; - etbt.istr = EET_TEST_STRING; - etbt.f1 = - EET_TEST_FLOAT; - etbt.d = - EET_TEST_DOUBLE; - etbt.f2 = EET_TEST_FLOAT4; - etbt.uc = EET_TEST_CHAR; - etbt.us = EET_TEST_SHORT; - etbt.ui = EET_TEST_INT; - etbt.ul = EET_TEST_LONG_LONG; + fail_if(result->c != EET_TEST_CHAR); + fail_if(result->s != EET_TEST_SHORT); + fail_if(result->i != EET_TEST_INT + i); + fail_if(result->l != EET_TEST_LONG_LONG); + fail_if(strcmp(result->str, EET_TEST_STRING) != 0); + fail_if(strcmp(result->istr, EET_TEST_STRING) != 0); + fail_if(result->uc != EET_TEST_CHAR); + fail_if(result->us != EET_TEST_SHORT); + fail_if(result->ui != EET_TEST_INT); + fail_if(result->ul != EET_TEST_LONG_LONG); - eet_test_setup_eddc(&eddc); - eddc.name = "Eet_Test_Basic_Type"; - eddc.size = sizeof(Eet_Test_Basic_Type); + tmp = (result->f1 + EET_TEST_FLOAT); + if (tmp < 0) tmp = -tmp; + fail_if(tmp > 0.005); - edd = eet_data_descriptor2_new(&eddc); - fail_if(!edd); + tmp = (result->f2 - EET_TEST_FLOAT4); + if (tmp < 0) tmp = -tmp; + fail_if(tmp > 0.005); + + tmp = (result->d + EET_TEST_DOUBLE); + if (tmp < 0) tmp = -tmp; + fail_if(tmp > 0.00005); +} +static void +_eet_build_basic_descriptor(Eet_Data_Descriptor *edd) +{ EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "c", c, EET_T_CHAR); EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "s", s, EET_T_SHORT); EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "i", i, EET_T_INT); @@ -136,6 +155,27 @@ EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "us", us, EET_T_USHORT); EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "ui", ui, EET_T_UINT); EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "ul", ul, EET_T_ULONG_LONG); +} + +START_TEST(eet_test_basic_data_type_encoding_decoding) +{ + Eet_Data_Descriptor *edd; + Eet_Test_Basic_Type *result; + Eet_Data_Descriptor_Class eddc; + Eet_Test_Basic_Type etbt; + void *transfert; + int size; + + _eet_test_basic_set(&etbt, 0); + + eet_test_setup_eddc(&eddc); + eddc.name = "Eet_Test_Basic_Type"; + eddc.size = sizeof(Eet_Test_Basic_Type); + + edd = eet_data_descriptor2_new(&eddc); + fail_if(!edd); + + _eet_build_basic_descriptor(edd); transfert = eet_data_descriptor_encode(edd, &etbt, &size); fail_if(!transfert || size <= 0); @@ -143,28 +183,7 @@ result = eet_data_descriptor_decode(edd, transfert, size); fail_if(!result); - fail_if(result->c != EET_TEST_CHAR); - fail_if(result->s != EET_TEST_SHORT); - fail_if(result->i != EET_TEST_INT); - fail_if(result->l != EET_TEST_LONG_LONG); - fail_if(strcmp(result->str, EET_TEST_STRING) != 0); - fail_if(strcmp(result->istr, EET_TEST_STRING) != 0); - fail_if(result->uc != EET_TEST_CHAR); - fail_if(result->us != EET_TEST_SHORT); - fail_if(result->ui != EET_TEST_INT); - fail_if(result->ul != EET_TEST_LONG_LONG); - - tmp = (result->f1 + EET_TEST_FLOAT); - if (tmp < 0) tmp = -tmp; - fail_if(tmp > 0.005); - - tmp = (result->f2 - EET_TEST_FLOAT4); - if (tmp < 0) tmp = -tmp; - fail_if(tmp > 0.005); - - tmp = (result->d + EET_TEST_DOUBLE); - if (tmp < 0) tmp = -tmp; - fail_if(tmp > 0.00005); + _eet_test_basic_check(result, 0); free(result->str); free(result); @@ -194,6 +213,12 @@ Eet_Hash *hash; Eet_List *ilist; Eet_Hash *ihash; + Eet_Test_Basic_Type sarray1[10]; + unsigned int sarray2[5]; + unsigned int varray1_count; + unsigned int *varray1; + unsigned int varray2_count; + Eet_Test_Basic_Type *varray2; unsigned char uc; unsigned short us; unsigned int ui; @@ -203,9 +228,63 @@ static int i42 = 42; static int i7 = 7; + +static void +_eet_build_ex_descriptor(Eet_Data_Descriptor *edd) +{ + Eet_Data_Descriptor_Class eddc; + Eet_Test_Ex_Type etbt; + Eet_Data_Descriptor *eddb; + + eet_test_setup_eddc(&eddc); + eddc.name = "Eet_Test_Basic_Type"; + eddc.size = sizeof(Eet_Test_Basic_Type); + eddb = eet_data_descriptor3_new(&eddc); + fail_if(!eddb); + + _eet_build_basic_descriptor(eddb); + + EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "c", c, EET_T_CHAR); + EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "s", s, EET_T_SHORT); + EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "i", i, EET_T_INT); + EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "l", l, EET_T_LONG_LONG); + EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "str", str, EET_T_STRING); + EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "istr", istr, EET_T_INLINED_STRING); + EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "f1", f1, EET_T_FLOAT); + EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "f2", f2, EET_T_FLOAT); + EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "f3", f3, EET_T_FLOAT); + EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "f4", f4, EET_T_FLOAT); + EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "d1", d1, EET_T_DOUBLE); + EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "d2", d2, EET_T_DOUBLE); + EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "d3", d3, EET_T_DOUBLE); + EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "d4", d4, EET_T_DOUBLE); + EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "uc", uc, EET_T_UCHAR); + EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "us", us, EET_T_USHORT); + EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "ui", ui, EET_T_UINT); + EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "ul", ul, EET_T_ULONG_LONG); + EET_DATA_DESCRIPTOR_ADD_ARRAY(edd, Eet_Test_Ex_Type, "sarray1", sarray1, eddb); + EET_DATA_DESCRIPTOR_ADD_VAR_ARRAY(edd, Eet_Test_Ex_Type, "varray2", varray2, eddb); + eet_data_descriptor_element_add(edd, "varray1", EET_T_INT, EET_G_VAR_ARRAY, + (char *)(&(etbt.varray1)) - (char *)(&(etbt)), + (char *)(&(etbt.varray1_count)) - (char *)(&(etbt)), /* 0, */NULL, NULL); + eet_data_descriptor_element_add(edd, "sarray2", EET_T_INT, EET_G_ARRAY, + (char *)(&(etbt.sarray2)) - (char *)(&(etbt)), + /* 0, */sizeof(etbt.sarray2)/sizeof(etbt.sarray2[0]), NULL, NULL); + EET_DATA_DESCRIPTOR_ADD_LIST(edd, Eet_Test_Ex_Type, "list", list, edd); + EET_DATA_DESCRIPTOR_ADD_HASH(edd, Eet_Test_Ex_Type, "hash", hash, edd); + eet_data_descriptor_element_add(edd, "ilist", EET_T_INT, EET_G_LIST, + (char *)(&(etbt.ilist)) - (char *)(&(etbt)), + 0, /* 0, */NULL, NULL); + eet_data_descriptor_element_add(edd, "ihash", EET_T_INT, EET_G_HASH, + (char *)(&(etbt.ihash)) - (char *)(&(etbt)), + 0, /* 0, */NULL, NULL); +} + static Eet_Test_Ex_Type* _eet_test_ex_set(Eet_Test_Ex_Type *res, int offset) { + int i; + if (!res) res = malloc( sizeof(Eet_Test_Ex_Type)); if (!res) return NULL; @@ -227,6 +306,23 @@ res->hash = NULL; res->ilist = NULL; res->ihash = NULL; + + res->varray2 = malloc(sizeof (Eet_Test_Basic_Type) * 10); + res->varray1 = malloc(sizeof (int) * 5); + fail_if(!res->varray1 || !res->varray2); + for (i = 0; i < 10; ++i) + { + _eet_test_basic_set(res->sarray1 + i, i); + _eet_test_basic_set(res->varray2 + i, i); + } + res->varray2_count = 10; + for (i = 0; i < 5; ++i) + { + res->sarray2[i] = i * 42 + 1; + res->varray1[i] = i * 42 + 1; + } + res->varray1_count = 5; + res->uc = EET_TEST_CHAR + offset; res->us = EET_TEST_SHORT + offset; res->ui = EET_TEST_INT + offset; @@ -239,6 +335,7 @@ _eet_test_ex_check(Eet_Test_Ex_Type *stuff, int offset) { double tmp; + int i; if (!stuff) return 1; @@ -271,6 +368,13 @@ if (stuff->ui != EET_TEST_INT + offset) return 1; if (stuff->ul != EET_TEST_LONG_LONG + offset) return 1; + for (i = 0; i < 5; ++i) + if (stuff->sarray2[i] != i * 42 + 1) + return 1; + + for (i = 0; i < 10; ++i) + _eet_test_basic_check(stuff->sarray1 + i, i); + return 0; } @@ -323,32 +427,7 @@ edd = eet_data_descriptor3_new(&eddc); fail_if(!edd); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "c", c, EET_T_CHAR); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "s", s, EET_T_SHORT); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "i", i, EET_T_INT); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "l", l, EET_T_LONG_LONG); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "str", str, EET_T_STRING); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "istr", istr, EET_T_INLINED_STRING); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "f1", f1, EET_T_FLOAT); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "f2", f2, EET_T_FLOAT); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "f3", f3, EET_T_FLOAT); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "f4", f4, EET_T_FLOAT); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "d1", d1, EET_T_DOUBLE); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "d2", d2, EET_T_DOUBLE); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "d3", d3, EET_T_DOUBLE); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "d4", d4, EET_T_DOUBLE); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "uc", uc, EET_T_UCHAR); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "us", us, EET_T_USHORT); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "ui", ui, EET_T_UINT); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "ul", ul, EET_T_ULONG_LONG); - EET_DATA_DESCRIPTOR_ADD_LIST(edd, Eet_Test_Ex_Type, "list", list, edd); - EET_DATA_DESCRIPTOR_ADD_HASH(edd, Eet_Test_Ex_Type, "hash", hash, edd); - eet_data_descriptor_element_add(edd, "ilist", EET_T_INT, EET_G_LIST, - (char *)(&(etbt.ilist)) - (char *)(&(etbt)), - 0, NULL, NULL); - eet_data_descriptor_element_add(edd, "ihash", EET_T_INT, EET_G_HASH, - (char *)(&(etbt.ihash)) - (char *)(&(etbt)), - 0, NULL, NULL); + _eet_build_ex_descriptor(edd); transfert = eet_data_descriptor_encode(edd, &etbt, &size); fail_if(!transfert || size <= 0); @@ -417,32 +496,7 @@ edd = eet_data_descriptor3_new(&eddc); fail_if(!edd); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "c", c, EET_T_CHAR); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "s", s, EET_T_SHORT); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "i", i, EET_T_INT); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "l", l, EET_T_LONG_LONG); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "str", str, EET_T_STRING); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "istr", istr, EET_T_INLINED_STRING); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "f1", f1, EET_T_FLOAT); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "f2", f2, EET_T_FLOAT); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "f3", f3, EET_T_FLOAT); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "f4", f4, EET_T_FLOAT); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "d1", d1, EET_T_DOUBLE); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "d2", d2, EET_T_DOUBLE); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "d3", d3, EET_T_DOUBLE); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "d4", d4, EET_T_DOUBLE); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "uc", uc, EET_T_UCHAR); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "us", us, EET_T_USHORT); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "ui", ui, EET_T_UINT); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "ul", ul, EET_T_ULONG_LONG); - EET_DATA_DESCRIPTOR_ADD_LIST(edd, Eet_Test_Ex_Type, "list", list, edd); - EET_DATA_DESCRIPTOR_ADD_HASH(edd, Eet_Test_Ex_Type, "hash", hash, edd); - eet_data_descriptor_element_add(edd, "ilist", EET_T_INT, EET_G_LIST, - (char *)(&(etbt.ilist)) - (char *)(&(etbt)), - 0, NULL, NULL); - eet_data_descriptor_element_add(edd, "ihash", EET_T_INT, EET_G_HASH, - (char *)(&(etbt.ihash)) - (char *)(&(etbt)), - 0, NULL, NULL); + _eet_build_ex_descriptor(edd); transfert1 = eet_data_descriptor_encode(edd, &etbt, &size1); fail_if(!transfert1 || size1 <= 0); @@ -572,32 +626,7 @@ edd = eet_data_descriptor3_new(&eddc); fail_if(!edd); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "c", c, EET_T_CHAR); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "s", s, EET_T_SHORT); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "i", i, EET_T_INT); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "l", l, EET_T_LONG_LONG); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "str", str, EET_T_STRING); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "istr", istr, EET_T_INLINED_STRING); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "f1", f1, EET_T_FLOAT); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "f2", f2, EET_T_FLOAT); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "f3", f3, EET_T_FLOAT); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "f4", f4, EET_T_FLOAT); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "d1", d1, EET_T_DOUBLE); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "d2", d2, EET_T_DOUBLE); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "d3", d3, EET_T_DOUBLE); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "d4", d4, EET_T_DOUBLE); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "uc", uc, EET_T_UCHAR); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "us", us, EET_T_USHORT); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "ui", ui, EET_T_UINT); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "ul", ul, EET_T_ULONG_LONG); - EET_DATA_DESCRIPTOR_ADD_LIST(edd, Eet_Test_Ex_Type, "list", list, edd); - EET_DATA_DESCRIPTOR_ADD_HASH(edd, Eet_Test_Ex_Type, "hash", hash, edd); - eet_data_descriptor_element_add(edd, "ilist", EET_T_INT, EET_G_LIST, - (char *)(&(etbt.ilist)) - (char *)(&(etbt)), - 0, NULL, NULL); - eet_data_descriptor_element_add(edd, "ihash", EET_T_INT, EET_G_HASH, - (char *)(&(etbt.ihash)) - (char *)(&(etbt)), - 0, NULL, NULL); + _eet_build_ex_descriptor(edd); mktemp(file); @@ -608,7 +637,7 @@ ef = eet_open(file, EET_FILE_MODE_READ_WRITE); fail_if(!ef); - fail_if(!eet_data_write(ef, edd, EET_TEST_FILE_KEY1, &etbt, 1)); + fail_if(!eet_data_write(ef, edd, EET_TEST_FILE_KEY1, &etbt, 0)); result = eet_data_read(ef, edd, EET_TEST_FILE_KEY1); fail_if(!result); @@ -729,32 +758,7 @@ edd = eet_data_descriptor3_new(&eddc); fail_if(!edd); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "c", c, EET_T_CHAR); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "s", s, EET_T_SHORT); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "i", i, EET_T_INT); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "l", l, EET_T_LONG_LONG); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "str", str, EET_T_STRING); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "istr", istr, EET_T_INLINED_STRING); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "f1", f1, EET_T_FLOAT); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "f2", f2, EET_T_FLOAT); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "f3", f3, EET_T_FLOAT); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "f4", f4, EET_T_FLOAT); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "d1", d1, EET_T_DOUBLE); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "d2", d2, EET_T_DOUBLE); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "d3", d3, EET_T_DOUBLE); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "d4", d4, EET_T_DOUBLE); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "uc", uc, EET_T_UCHAR); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "us", us, EET_T_USHORT); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "ui", ui, EET_T_UINT); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "ul", ul, EET_T_ULONG_LONG); - EET_DATA_DESCRIPTOR_ADD_LIST(edd, Eet_Test_Ex_Type, "list", list, edd); - EET_DATA_DESCRIPTOR_ADD_HASH(edd, Eet_Test_Ex_Type, "hash", hash, edd); - eet_data_descriptor_element_add(edd, "ilist", EET_T_INT, EET_G_LIST, - (char *)(&(etbt.ilist)) - (char *)(&(etbt)), - 0, NULL, NULL); - eet_data_descriptor_element_add(edd, "ihash", EET_T_INT, EET_G_HASH, - (char *)(&(etbt.ihash)) - (char *)(&(etbt)), - 0, NULL, NULL); + _eet_build_ex_descriptor(edd); mktemp(file); |