From: Enlightenment S. <no-...@en...> - 2008-12-30 11:04:45
|
Log: Remove dead debugging code. Author: cedric Date: 2008-12-30 03:04:35 -0800 (Tue, 30 Dec 2008) New Revision: 38352 Modified: trunk/eet/src/lib/eet_cipher.c Modified: trunk/eet/src/lib/eet_cipher.c =================================================================== --- trunk/eet/src/lib/eet_cipher.c 2008-12-30 11:01:36 UTC (rev 38351) +++ trunk/eet/src/lib/eet_cipher.c 2008-12-30 11:04:35 UTC (rev 38352) @@ -92,7 +92,6 @@ struct stat st; void *data = NULL; gnutls_datum_t load_file = { NULL, 0 }; - int res; char pass[1024]; /* Init */ @@ -109,7 +108,7 @@ /* Import the certificate in Eet_Key structure */ load_file.data = data; load_file.size = st.st_size; - if ((res = gnutls_x509_crt_import(key->certificate, &load_file, GNUTLS_X509_FMT_PEM)) < 0) + if (gnutls_x509_crt_import(key->certificate, &load_file, GNUTLS_X509_FMT_PEM) < 0) goto on_error; if (munmap(data, st.st_size)) goto on_error; @@ -130,19 +129,19 @@ load_file.data = data; load_file.size = st.st_size; /* Try to directly import the PEM encoded private key */ - if ((res = gnutls_x509_privkey_import(key->private_key, &load_file, GNUTLS_X509_FMT_PEM)) < 0) + if (gnutls_x509_privkey_import(key->private_key, &load_file, GNUTLS_X509_FMT_PEM) < 0) { /* Else ask for the private key pass */ if (cb && cb(pass, 1024, 0, NULL)) { /* If pass then try to decode the pkcs 8 private key */ - if ((res = gnutls_x509_privkey_import_pkcs8(key->private_key, &load_file, GNUTLS_X509_FMT_PEM, pass, 0))) + if (gnutls_x509_privkey_import_pkcs8(key->private_key, &load_file, GNUTLS_X509_FMT_PEM, pass, 0)) goto on_error; } else { /* Else try to import the pkcs 8 private key without pass */ - if ((res = gnutls_x509_privkey_import_pkcs8(key->private_key, &load_file, GNUTLS_X509_FMT_PEM, NULL, 1))) + if (gnutls_x509_privkey_import_pkcs8(key->private_key, &load_file, GNUTLS_X509_FMT_PEM, NULL, 1)) goto on_error; } } |
From: Enlightenment S. <no-...@en...> - 2009-01-30 13:50:05
|
Log: * eet/src/lib/eet_cipher.c: Fix a corrupted pointer use. Author: cedric Date: 2009-01-30 05:50:01 -0800 (Fri, 30 Jan 2009) New Revision: 38856 Modified: trunk/eet/src/lib/eet_cipher.c Modified: trunk/eet/src/lib/eet_cipher.c =================================================================== --- trunk/eet/src/lib/eet_cipher.c 2009-01-30 11:38:49 UTC (rev 38855) +++ trunk/eet/src/lib/eet_cipher.c 2009-01-30 13:50:01 UTC (rev 38856) @@ -668,7 +668,7 @@ err = gcry_cipher_open(&cipher, GCRY_CIPHER_AES256, GCRY_CIPHER_MODE_CBC, 0); if (err) goto on_error; opened = 1; - err = gcry_cipher_setiv(cipher, &iv, MAX_IV_LEN); + err = gcry_cipher_setiv(cipher, iv, MAX_IV_LEN); if (err) goto on_error; err = gcry_cipher_setkey(cipher, ik, MAX_KEY_LEN); if (err) goto on_error; @@ -772,7 +772,7 @@ /* Gcrypt create the corresponding cipher */ err = gcry_cipher_open(&cipher, GCRY_CIPHER_AES256, GCRY_CIPHER_MODE_CBC, 0); if (err) return EET_ERROR_DECRYPT_FAILED; - err = gcry_cipher_setiv(cipher, &iv, MAX_IV_LEN); + err = gcry_cipher_setiv(cipher, iv, MAX_IV_LEN); if (err) goto on_error; err = gcry_cipher_setkey(cipher, ik, MAX_KEY_LEN); if (err) goto on_error; |
From: Enlightenment S. <no-...@en...> - 2009-02-09 13:53:27
|
Log: * eet/src/lib/Eet.h, * eet/src/lib/eet_lib.c, * eet/src/lib/eet_cipher.c, * eet/src/lib/Eet_private.h: Add a function to retrieve SHA1 of an associated Eet_File. Note: Sadly GnuTLS doesn't seem to provide a gnutls_x509_crt_verify_hash function. Author: cedric Date: 2009-02-09 05:53:20 -0800 (Mon, 09 Feb 2009) New Revision: 38982 Modified: trunk/eet/src/lib/Eet.h trunk/eet/src/lib/Eet_private.h trunk/eet/src/lib/eet_cipher.c trunk/eet/src/lib/eet_lib.c Modified: trunk/eet/src/lib/Eet.h =================================================================== --- trunk/eet/src/lib/Eet.h 2009-02-09 12:48:29 UTC (rev 38981) +++ trunk/eet/src/lib/Eet.h 2009-02-09 13:53:20 UTC (rev 38982) @@ -313,6 +313,14 @@ */ EAPI const void *eet_identity_signature(Eet_File *ef, int *signature_length); + /** + * Get the SHA1 associated with a file. Could be the one used to sign the data + * or if the data where not signed, it will be the SHA1 of the file. + * + * @since 2.0.0 + */ + EAPI const void *eet_identity_sha1(Eet_File *ef, int *sha1_length); + /** * Display the x509 der certificate to out. * Modified: trunk/eet/src/lib/Eet_private.h =================================================================== --- trunk/eet/src/lib/Eet_private.h 2009-02-09 12:48:29 UTC (rev 38981) +++ trunk/eet/src/lib/Eet_private.h 2009-02-09 13:53:20 UTC (rev 38982) @@ -72,6 +72,8 @@ const void *signature_base, unsigned int signature_length, const void **raw_signature_base, unsigned int *raw_signature_length, int *x509_length); +void *eet_identity_compute_sha1(const void *data_base, unsigned int data_length, + int *sha1_length); Eet_Error eet_cipher(const void *data, unsigned int size, const char *key, unsigned int length, void **result, unsigned int *result_length); Eet_Error eet_decipher(const void *data, unsigned int size, const char *key, unsigned int length, void **result, unsigned int *result_length); Eet_Error eet_identity_sign(FILE *fp, Eet_Key *key); Modified: trunk/eet/src/lib/eet_cipher.c =================================================================== --- trunk/eet/src/lib/eet_cipher.c 2009-02-09 12:48:29 UTC (rev 38981) +++ trunk/eet/src/lib/eet_cipher.c 2009-02-09 13:53:20 UTC (rev 38982) @@ -30,6 +30,10 @@ # endif #endif +#ifdef HAVE_OPENSSL +# include <openssl/sha.h> +#endif + #ifdef HAVE_CIPHER # ifdef HAVE_GNUTLS # include <gnutls/x509.h> @@ -337,6 +341,31 @@ eet_identity_close(key); } +void * +eet_identity_compute_sha1(const void *data_base, unsigned int data_length, + int *sha1_length) +{ + void *result; + +#ifdef HAVE_GNUTLS + result = malloc(gcry_md_get_algo_dlen(GCRY_MD_SHA1)); + if (!result) return NULL; + + gcry_md_hash_buffer(GCRY_MD_SHA1, result, data_base, data_length); +#else +# ifdef HAVE_OPENSSL + result = malloc(SHA_DIGEST_LENGTH); + if (!result) return NULL; + + SHA1(data_base, data_length, result); +# else + result = NULL; +# endif +#endif + + return result; +} + Eet_Error eet_identity_sign(FILE *fp, Eet_Key *key) { @@ -513,11 +542,12 @@ gnutls_x509_crt_init(&cert); gnutls_x509_crt_import(cert, &datum, GNUTLS_X509_FMT_DER); + signature.data = (void *)sign; + signature.size = sign_len; + /* Verify the signature */ datum.data = (void *)data_base; datum.size = data_length; - signature.data = (void *)sign; - signature.size = sign_len; if (!gnutls_x509_crt_verify_data(cert, 0, &datum, &signature)) return NULL; # else Modified: trunk/eet/src/lib/eet_lib.c =================================================================== --- trunk/eet/src/lib/eet_lib.c 2009-02-09 12:48:29 UTC (rev 38981) +++ trunk/eet/src/lib/eet_lib.c 2009-02-09 13:53:20 UTC (rev 38982) @@ -90,6 +90,7 @@ const unsigned char *data; const void *x509_der; const void *signature; + void *sha1; Eet_File_Mode mode; @@ -99,6 +100,7 @@ int data_size; int x509_length; unsigned int signature_length; + unsigned int sha1_length; time_t mtime; @@ -1266,6 +1268,8 @@ ef->readfp = NULL; ef->data = data; ef->data_size = size; + ef->sha1 = NULL; + ef->sha1_length = 0; return eet_internal_read(ef); } @@ -1382,6 +1386,8 @@ ef->delete_me_now = 0; ef->data = NULL; ef->data_size = 0; + ef->sha1 = NULL; + ef->sha1_length = 0; ef->ed = (mode == EET_FILE_MODE_WRITE) || (ef->fp == NULL && mode == EET_FILE_MODE_READ_WRITE) ? @@ -1456,6 +1462,16 @@ return ef->signature; } +EAPI const void * +eet_identity_sha1(Eet_File *ef, int *sha1_length) +{ + if (!ef->sha1) + ef->sha1 = eet_identity_compute_sha1(ef->data, ef->data_size, &ef->sha1_length); + + if (sha1_length) *sha1_length = ef->sha1_length; + return ef->sha1; +} + EAPI Eet_Error eet_identity_set(Eet_File *ef, Eet_Key *key) { |
From: Enlightenment S. <no-...@en...> - 2009-03-02 15:39:13
|
Log: eet: Including two times the same header is useless in the best case. Author: cedric Date: 2009-03-02 07:39:10 -0800 (Mon, 02 Mar 2009) New Revision: 39334 Modified: trunk/eet/src/lib/eet_cipher.c Modified: trunk/eet/src/lib/eet_cipher.c =================================================================== --- trunk/eet/src/lib/eet_cipher.c 2009-03-02 15:32:31 UTC (rev 39333) +++ trunk/eet/src/lib/eet_cipher.c 2009-03-02 15:39:10 UTC (rev 39334) @@ -48,10 +48,6 @@ # endif #endif -#ifdef HAVE_NETINET_IN_H -# include <netinet/in.h> -#endif - #include "Eet.h" #include "Eet_private.h" |
From: Enlightenment S. <no-...@en...> - 2009-03-02 14:44:08
|
Log: eet: Fix memleak during cipher. Author: cedric Date: 2009-03-02 06:43:57 -0800 (Mon, 02 Mar 2009) New Revision: 39331 Modified: trunk/eet/src/lib/eet_cipher.c Modified: trunk/eet/src/lib/eet_cipher.c =================================================================== --- trunk/eet/src/lib/eet_cipher.c 2009-03-02 13:47:50 UTC (rev 39330) +++ trunk/eet/src/lib/eet_cipher.c 2009-03-02 14:43:57 UTC (rev 39331) @@ -938,7 +938,7 @@ HMAC_CTX hctx; # endif - buf = malloc(salt_len + 4); + buf = alloca(salt_len + 4); if (!buf) return 1; for (i = 1; len; len -= tmp_len, p += tmp_len, i++) |
From: Enlightenment S. <no-...@en...> - 2009-03-09 15:52:17
|
Log: * eet/src/lib/eet_cipher.c: Report size as expected by API. Author: cedric Date: 2009-03-09 08:52:14 -0700 (Mon, 09 Mar 2009) New Revision: 39424 Modified: trunk/eet/src/lib/eet_cipher.c Modified: trunk/eet/src/lib/eet_cipher.c =================================================================== --- trunk/eet/src/lib/eet_cipher.c 2009-03-09 00:47:39 UTC (rev 39423) +++ trunk/eet/src/lib/eet_cipher.c 2009-03-09 15:52:14 UTC (rev 39424) @@ -351,12 +351,14 @@ if (!result) return NULL; gcry_md_hash_buffer(GCRY_MD_SHA1, result, data_base, data_length); + if (sha1_length) *sha1_length = gcry_md_get_algo_dlen(GCRY_MD_SHA1); #else # ifdef HAVE_OPENSSL result = malloc(SHA_DIGEST_LENGTH); if (!result) return NULL; SHA1(data_base, data_length, result); + if (sha1_length) *sha1_length = SHA_DIGEST_LENGTH; # else result = NULL; # endif |
From: Enlightenment S. <no-...@en...> - 2009-03-19 19:00:49
|
Log: * eet_data: Make it thread safe and fix some memory leak. Author: cedric Date: 2009-03-19 12:00:46 -0700 (Thu, 19 Mar 2009) New Revision: 39590 Modified: trunk/eet/src/lib/eet_data.c Modified: trunk/eet/src/lib/eet_data.c =================================================================== --- trunk/eet/src/lib/eet_data.c 2009-03-19 18:40:21 UTC (rev 39589) +++ trunk/eet/src/lib/eet_data.c 2009-03-19 19:00:46 UTC (rev 39590) @@ -78,6 +78,8 @@ typedef struct _Eet_Data_Stream Eet_Data_Stream; typedef struct _Eet_Data_Descriptor_Hash Eet_Data_Descriptor_Hash; typedef struct _Eet_Data_Encode_Hash_Info Eet_Data_Encode_Hash_Info; +typedef struct _Eet_Free Eet_Free; +typedef struct _Eet_Free_Context Eet_Free_Context; /*---*/ @@ -95,7 +97,7 @@ struct _Eet_Data_Group_Type_Codec { - int (*get) (const Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Chunk *echnk, int type, int group_type, void *data_in, int level, void (*dumpfunc) (void *data, const char *str), void *dumpdata, char **p, int *size); + int (*get) (Eet_Free_Context *context, const Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Chunk *echnk, int type, int group_type, void *data_in, int level, void (*dumpfunc) (void *data, const char *str), void *dumpdata, char **p, int *size); void (*put) (Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Stream *ds, void *data_in); }; @@ -175,6 +177,24 @@ Eet_Dictionary *ed; }; +struct _Eet_Free +{ + int ref; + int len[256]; + int num[256]; + void **list[256]; +}; + +struct _Eet_Free_Context +{ + Eet_Free freelist; + Eet_Free freeleak; + Eet_Free freelist_list; + Eet_Free freelist_hash; + Eet_Free freelist_str; + Eet_Free freelist_direct_str; +}; + /*---*/ static int eet_data_get_char(const Eet_Dictionary *ed, const void *src, const void *src_end, void *dest); @@ -199,14 +219,14 @@ static int eet_data_get_type(const Eet_Dictionary *ed, int type, const void *src, const void *src_end, void *dest); static void *eet_data_put_type(Eet_Dictionary *ed, int type, const void *src, int *size_ret); -static int eet_data_get_unknown(const Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Chunk *echnk, int type, int group_type, void *data_in, int level, void (*dumpfunc) (void *data, const char *str), void *dumpdata, char **p, int *size); +static int eet_data_get_unknown(Eet_Free_Context *context, const Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Chunk *echnk, int type, int group_type, void *data_in, int level, void (*dumpfunc) (void *data, const char *str), void *dumpdata, char **p, int *size); static void eet_data_put_unknown(Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Stream *ds, void *data_in); static void eet_data_put_array(Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Stream *ds, void *data_in); -static int eet_data_get_array(const Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Chunk *echnk, int type, int group_type, void *data, int level, void (*dumpfunc) (void *data, const char *str), void *dumpdata, char **p, int *size); -static int eet_data_get_list(const Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Chunk *echnk, int type, int group_type, void *data_in, int level, void (*dumpfunc) (void *data, const char *str), void *dumpdata, char **p, int *size); +static int eet_data_get_array(Eet_Free_Context *context, const Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Chunk *echnk, int type, int group_type, void *data, int level, void (*dumpfunc) (void *data, const char *str), void *dumpdata, char **p, int *size); +static int eet_data_get_list(Eet_Free_Context *context, const Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Chunk *echnk, int type, int group_type, void *data_in, int level, void (*dumpfunc) (void *data, const char *str), void *dumpdata, char **p, int *size); static void eet_data_put_list(Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Stream *ds, void *data_in); static void eet_data_put_hash(Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Stream *ds, void *data_in); -static int eet_data_get_hash(const Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Chunk *echnk, int type, int group_type, void *data, int level, void (*dumpfunc) (void *data, const char *str), void *dumpdata, char **p, int *size); +static int eet_data_get_hash(Eet_Free_Context *context, const Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Chunk *echnk, int type, int group_type, void *data, int level, void (*dumpfunc) (void *data, const char *str), void *dumpdata, char **p, int *size); static void eet_data_chunk_get(const Eet_Dictionary *ed, Eet_Data_Chunk *chnk, const void *src, int size); static Eet_Data_Chunk *eet_data_chunk_new(void *data, int size, const char *name, int type, int group_type); @@ -220,7 +240,8 @@ static int eet_data_descriptor_encode_hash_cb(void *hash, const char *key, void *hdata, void *fdata); static void *_eet_data_descriptor_encode(Eet_Dictionary *ed, Eet_Data_Descriptor *edd, const void *data_in, int *size_ret); -static void *_eet_data_descriptor_decode(const Eet_Dictionary *ed, +static void *_eet_data_descriptor_decode(Eet_Free_Context *context, + const Eet_Dictionary *ed, Eet_Data_Descriptor *edd, const void *data_in, int size_in, @@ -1195,6 +1216,7 @@ const Eet_Dictionary *ed = NULL; const void *data = NULL; void *data_dec; + Eet_Free_Context context; int required_free = 0; int size; @@ -1209,7 +1231,8 @@ if (!data) return NULL; } - data_dec = _eet_data_descriptor_decode(ed, edd, data, size, 0, NULL, NULL); + memset(&context, 0, sizeof (context)); + data_dec = _eet_data_descriptor_decode(&context, ed, edd, data, size, 0, NULL, NULL); if (required_free) free((void*)data); @@ -1245,15 +1268,6 @@ return eet_data_write_cipher(ef, edd, name, NULL, data, compress); } -typedef struct _Eet_Free Eet_Free; -struct _Eet_Free -{ - int ref; - int len[256]; - int num[256]; - void **list[256]; -}; - static int _eet_free_hash(void *data) { @@ -1324,129 +1338,164 @@ ef->ref--; } -static Eet_Free freelist = { 0, { 0 }, { 0 }, { NULL } }; +#define _eet_freelist_add(Ctx, Data) _eet_free_add(&Ctx->freelist, Data); +#define _eet_freelist_reset(Ctx) _eet_free_reset(&Ctx->freelist); +#define _eet_freelist_ref(Ctx) _eet_free_ref(&Ctx->freelist); +#define _eet_freelist_unref(Ctx) _eet_free_unref(&Ctx->freelist); -#define _eet_freelist_add(Data) _eet_free_add(&freelist, Data); -#define _eet_freelist_reset() _eet_free_reset(&freelist); -#define _eet_freelist_ref() _eet_free_ref(&freelist); -#define _eet_freelist_unref() _eet_free_unref(&freelist); - static void -_eet_freelist_free(Eet_Data_Descriptor *edd) +_eet_freelist_free(Eet_Free_Context *context, Eet_Data_Descriptor *edd) { int j; int i; - if (freelist.ref > 0) return; + if (context->freelist.ref > 0) return; for (j = 0; j < 256; ++j) - for (i = 0; i < freelist.num[j]; ++i) + for (i = 0; i < context->freelist.num[j]; ++i) { if (edd) - edd->func.mem_free(freelist.list[j][i]); + edd->func.mem_free(context->freelist.list[j][i]); else - free(freelist.list[j][i]); + free(context->freelist.list[j][i]); } - _eet_free_reset(&freelist); + _eet_free_reset(&context->freelist); } -static Eet_Free freeleak = { 0, { 0 }, { 0 }, { NULL } }; +#define _eet_freeleak_add(Ctx, Data) _eet_free_add(&Ctx->freeleak, Data); +#define _eet_freeleak_reset(Ctx) _eet_free_reset(&Ctx->freeleak); +#define _eet_freeleak_ref(Ctx) _eet_free_ref(&Ctx->freeleak); +#define _eet_freeleak_unref(Ctx) _eet_free_unref(&Ctx->freeleak); -#define _eet_freeleak_add(Data) _eet_free_add(&freeleak, Data); -#define _eet_freeleak_reset() _eet_free_reset(&freeleak); -#define _eet_freeleak_ref() _eet_free_ref(&freeleak); -#define _eet_freeleak_unref() _eet_free_unref(&freeleak); - static void -_eet_freeleak_free(Eet_Data_Descriptor *edd) +_eet_freeleak_free(Eet_Free_Context *context, Eet_Data_Descriptor *edd) { int j; int i; - if (freeleak.ref > 0) return; + if (context->freeleak.ref > 0) return; for (j = 0; j < 256; ++j) - for (i = 0; i < freeleak.num[j]; ++i) + for (i = 0; i < context->freeleak.num[j]; ++i) { if (edd) - edd->func.mem_free(freeleak.list[j][i]); + edd->func.mem_free(context->freeleak.list[j][i]); else - free(freeleak.list[j][i]); + free(context->freeleak.list[j][i]); } - _eet_free_reset(&freeleak); + _eet_free_reset(&context->freeleak); } -static Eet_Free freelist_list = { 0, { 0 }, { 0 }, { NULL } }; +#define _eet_freelist_list_add(Ctx, Data) _eet_free_add(&Ctx->freelist_list, Data); +#define _eet_freelist_list_reset(Ctx) _eet_free_reset(&Ctx->freelist_list); +#define _eet_freelist_list_ref(Ctx) _eet_free_ref(&Ctx->freelist_list); +#define _eet_freelist_list_unref(Ctx) _eet_free_unref(&Ctx->freelist_list); -#define _eet_freelist_list_add(Data) _eet_free_add(&freelist_list, Data); -#define _eet_freelist_list_reset() _eet_free_reset(&freelist_list); -#define _eet_freelist_list_ref() _eet_free_ref(&freelist_list); -#define _eet_freelist_list_unref() _eet_free_unref(&freelist_list); +static void +_eet_freelist_list_free(Eet_Free_Context *context, Eet_Data_Descriptor *edd) +{ + int j; + int i; + if (context->freelist_list.ref > 0) return; + for (j = 0; j < 256; ++j) + for (i = 0; i < context->freelist_list.num[j]; ++i) + { + if (edd) + edd->func.list_free(*((void**)(context->freelist_list.list[j][i]))); + } + _eet_free_reset(&context->freelist_list); +} + +#define _eet_freelist_str_add(Ctx, Data) _eet_free_add(&Ctx->freelist_str, Data); +#define _eet_freelist_str_reset(Ctx) _eet_free_reset(&Ctx->freelist_str); +#define _eet_freelist_str_ref(Ctx) _eet_free_ref(&Ctx->freelist_str); +#define _eet_freelist_str_unref(Ctx) _eet_free_unref(&Ctx->freelist_str); + static void -_eet_freelist_list_free(Eet_Data_Descriptor *edd) +_eet_freelist_str_free(Eet_Free_Context *context, Eet_Data_Descriptor *edd) { int j; int i; - if (freelist_list.ref > 0) return; + if (context->freelist_str.ref > 0) return; for (j = 0; j < 256; ++j) - for (i = 0; i < freelist_list.num[j]; ++i) + for (i = 0; i < context->freelist_str.num[j]; ++i) { if (edd) - edd->func.list_free(*((void**)(freelist_list.list[j][i]))); + edd->func.str_free(context->freelist_str.list[j][i]); + else + free(context->freelist_str.list[j][i]); } - _eet_free_reset(&freelist_list); + _eet_free_reset(&context->freelist_str); } -static Eet_Free freelist_str = { 0, { 0 }, { 0 }, { NULL } }; +#define _eet_freelist_direct_str_add(Ctx, Data) _eet_free_add(&Ctx->freelist_direct_str, Data); +#define _eet_freelist_direct_str_reset(Ctx) _eet_free_reset(&Ctx->freelist_direct_str); +#define _eet_freelist_direct_str_ref(Ctx) _eet_free_ref(&Ctx->freelist_direct_str); +#define _eet_freelist_direct_str_unref(Ctx) _eet_free_unref(&Ctx->freelist_direct_str); -#define _eet_freelist_str_add(Data) _eet_free_add(&freelist_str, Data); -#define _eet_freelist_str_reset() _eet_free_reset(&freelist_str); -#define _eet_freelist_str_ref() _eet_free_ref(&freelist_str); -#define _eet_freelist_str_unref() _eet_free_unref(&freelist_str); - static void -_eet_freelist_str_free(Eet_Data_Descriptor *edd) +_eet_freelist_direct_str_free(Eet_Free_Context *context, Eet_Data_Descriptor *edd) { int j; int i; - if (freelist_str.ref > 0) return; + if (context->freelist_direct_str.ref > 0) return; for (j = 0; j < 256; ++j) - for (i = 0; i < freelist_str.num[j]; ++i) + for (i = 0; i < context->freelist_direct_str.num[j]; ++i) { if (edd) - edd->func.str_free(freelist_str.list[j][i]); + edd->func.str_direct_free(context->freelist_direct_str.list[j][i]); else - free(freelist_str.list[j][i]); + free(context->freelist_direct_str.list[j][i]); } - _eet_free_reset(&freelist_str); + _eet_free_reset(&context->freelist_direct_str); } -static Eet_Free freelist_direct_str = { 0, { 0 }, { 0 }, { NULL } }; +#define _eet_freelist_hash_add(Ctx, Data) _eet_free_add(&Ctx->freelist_hash, Data); +#define _eet_freelist_hash_reset(Ctx) _eet_free_reset(&Ctx->freelist_hash); +#define _eet_freelist_hash_ref(Ctx) _eet_free_ref(&Ctx->freelist_hash); +#define _eet_freelist_hash_unref(Ctx) _eet_free_unref(&Ctx->freelist_hash); -#define _eet_freelist_direct_str_add(Data) _eet_free_add(&freelist_direct_str, Data); -#define _eet_freelist_direct_str_reset() _eet_free_reset(&freelist_direct_str); -#define _eet_freelist_direct_str_ref() _eet_free_ref(&freelist_direct_str); -#define _eet_freelist_direct_str_unref() _eet_free_unref(&freelist_direct_str); - static void -_eet_freelist_direct_str_free(Eet_Data_Descriptor *edd) +_eet_freelist_hash_free(Eet_Free_Context *context, Eet_Data_Descriptor *edd) { int j; int i; - if (freelist_str.ref > 0) return; + if (context->freelist_hash.ref > 0) return; for (j = 0; j < 256; ++j) - for (i = 0; i < freelist_str.num[j]; ++i) + for (i = 0; i < context->freelist_hash.num[j]; ++i) { if (edd) - edd->func.str_direct_free(freelist_str.list[j][i]); + edd->func.hash_free(context->freelist_hash.list[j][i]); else - free(freelist_str.list[j][i]); + free(context->freelist_hash.list[j][i]); } - _eet_free_reset(&freelist_str); + _eet_free_reset(&context->freelist_hash); } +static void +_eet_freelist_all_ref(Eet_Free_Context *freelist_context) +{ + _eet_freelist_ref(freelist_context); + _eet_freeleak_ref(freelist_context); + _eet_freelist_str_ref(freelist_context); + _eet_freelist_list_ref(freelist_context); + _eet_freelist_hash_ref(freelist_context); + _eet_freelist_direct_str_ref(freelist_context); +} + +static void +_eet_freelist_all_unref(Eet_Free_Context *freelist_context) +{ + _eet_freelist_unref(freelist_context); + _eet_freeleak_unref(freelist_context); + _eet_freelist_str_unref(freelist_context); + _eet_freelist_list_unref(freelist_context); + _eet_freelist_hash_unref(freelist_context); + _eet_freelist_direct_str_unref(freelist_context); +} + static int eet_data_descriptor_encode_hash_cb(void *hash __UNUSED__, const char *key, void *hdata, void *fdata) { @@ -2187,7 +2236,8 @@ } static void * -_eet_data_descriptor_decode(const Eet_Dictionary *ed, +_eet_data_descriptor_decode(Eet_Free_Context *context, + const Eet_Dictionary *ed, Eet_Data_Descriptor *edd, const void *data_in, int size_in, @@ -2220,11 +2270,8 @@ edd->ed = ed; } } - _eet_freelist_ref(); - _eet_freeleak_ref(); - _eet_freelist_str_ref(); - _eet_freelist_list_ref(); - if (data) _eet_freelist_add(data); + _eet_freelist_all_ref(context); + if (data) _eet_freelist_add(context, data); dump = 0; memset(&chnk, 0, sizeof(Eet_Data_Chunk)); eet_data_chunk_get(ed, &chnk, data_in, size_in); @@ -2311,7 +2358,7 @@ group_type = echnk.group_type; } /* hashes doesnt fit well with the table */ - ret = eet_group_codec[group_type - 100].get(ed, edd, ede, &echnk, type, group_type, ((char *)data) + ede->offset, level, dumpfunc, dumpdata, &p, &size); + ret = eet_group_codec[group_type - 100].get(context, ed, edd, ede, &echnk, type, group_type, ((char *)data) + ede->offset, level, dumpfunc, dumpdata, &p, &size); if (ret <= 0) goto error; } } @@ -2424,7 +2471,8 @@ } else { - data_ret = _eet_data_descriptor_decode(ed, + data_ret = _eet_data_descriptor_decode(context, + ed, NULL, echnk.data, echnk.size, @@ -2493,7 +2541,8 @@ eet_data_chunk_get(ed, &echnk, p, size); if (!echnk.name) goto error; /* get the data */ - data_ret = _eet_data_descriptor_decode(ed, + data_ret = _eet_data_descriptor_decode(context, + ed, NULL, echnk.data, echnk.size, @@ -2510,7 +2559,8 @@ EET_ASSERT(!IS_SIMPLE_TYPE(type), goto error); - data_ret = _eet_data_descriptor_decode(ed, + data_ret = _eet_data_descriptor_decode(context, + ed, NULL, echnk.data, echnk.size, @@ -2555,7 +2605,8 @@ _eet_data_dump_string_escape(dumpdata, dumpfunc, s); dumpfunc(dumpdata, "\";\n"); } - data_ret = _eet_data_descriptor_decode(ed, + data_ret = _eet_data_descriptor_decode(context, + ed, NULL, echnk.data, echnk.size, @@ -2582,26 +2633,24 @@ /* advance to next chunk */ NEXT_CHUNK(p, size, echnk, ed); } - - _eet_freelist_unref(); - _eet_freeleak_unref(); - _eet_freelist_str_unref(); - _eet_freelist_list_unref(); + _eet_freelist_all_unref(context); if (dumpfunc) { - _eet_freelist_str_free(edd); - _eet_freelist_direct_str_free(edd); - _eet_freelist_list_free(edd); - _eet_freelist_free(edd); - _eet_freeleak_reset(); + _eet_freelist_str_free(context, edd); + _eet_freelist_direct_str_free(context, edd); + _eet_freelist_list_free(context, edd); + _eet_freelist_hash_free(context, edd); + _eet_freelist_free(context, edd); + _eet_freeleak_reset(context); } else { - _eet_freelist_reset(); - _eet_freeleak_free(edd); - _eet_freelist_str_reset(); - _eet_freelist_list_reset(); - _eet_freelist_direct_str_reset(); + _eet_freelist_reset(context); + _eet_freeleak_free(context, edd); + _eet_freelist_str_reset(context); + _eet_freelist_list_reset(context); + _eet_freelist_hash_reset(context); + _eet_freelist_direct_str_reset(context); } if (dumpfunc) { @@ -2618,15 +2667,13 @@ return data; error: - _eet_freelist_unref(); - _eet_freeleak_unref(); - _eet_freelist_str_unref(); - _eet_freelist_list_unref(); - _eet_freelist_str_free(edd); - _eet_freelist_direct_str_free(edd); - _eet_freelist_list_free(edd); - _eet_freelist_free(edd); - _eet_freeleak_reset(); + _eet_freelist_all_unref(context); + _eet_freelist_str_free(context, edd); + _eet_freelist_direct_str_free(context, edd); + _eet_freelist_list_free(context, edd); + _eet_freelist_hash_free(context, edd); + _eet_freelist_free(context, edd); + _eet_freeleak_reset(context); if (dumpfunc) { if (dump) @@ -2642,7 +2689,7 @@ } static int -eet_data_get_list(const Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Chunk *echnk, +eet_data_get_list(Eet_Free_Context *context, const Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Chunk *echnk, int type __UNUSED__, int group_type __UNUSED__, void *data, int level, void (*dumpfunc) (void *data, const char *str), void *dumpdata, char **p __UNUSED__, int *size __UNUSED__) @@ -2661,25 +2708,25 @@ { int ret; - ret = eet_data_get_unknown(ed, edd, ede, echnk, ede->type, EET_G_UNKNOWN, + ret = eet_data_get_unknown(context, ed, edd, ede, echnk, ede->type, EET_G_UNKNOWN, &data_ret, level, dumpfunc, dumpdata, p, size); if (!ret) return 0; } else { - data_ret = _eet_data_descriptor_decode(ed, ede->subtype, echnk->data, echnk->size, level + 2, dumpfunc, dumpdata); + data_ret = _eet_data_descriptor_decode(context, ed, ede->subtype, echnk->data, echnk->size, level + 2, dumpfunc, dumpdata); if (!data_ret) return 0; } list = edd->func.list_append(list, data_ret); *ptr = list; - _eet_freelist_list_add(ptr); + _eet_freelist_list_add(context, ptr); return 1; } static int -eet_data_get_hash(const Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Chunk *echnk, +eet_data_get_hash(Eet_Free_Context *context, const Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Chunk *echnk, int type, int group_type __UNUSED__, void *data, int level, void (*dumpfunc) (void *data, const char *str), void *dumpdata, char **p, int *size) @@ -2715,13 +2762,14 @@ { int ret; - ret = eet_data_get_unknown(ed, edd, ede, echnk, ede->type, EET_G_UNKNOWN, + ret = eet_data_get_unknown(context, ed, edd, ede, echnk, ede->type, EET_G_UNKNOWN, &data_ret, level, dumpfunc, dumpdata, p, size); if (!ret) return 0; } else { - data_ret = _eet_data_descriptor_decode(ed, + data_ret = _eet_data_descriptor_decode(context, + ed, ede->subtype, echnk->data, echnk->size, @@ -2733,7 +2781,7 @@ hash = edd->func.hash_add(hash, key, data_ret); *ptr = hash; - _eet_freelist_list_add(ptr); + _eet_freelist_hash_add(context, ptr); return 1; on_error: @@ -2751,7 +2799,7 @@ * each chunk is pointless. */ static int -eet_data_get_array(const Eet_Dictionary *ed, Eet_Data_Descriptor *edd __UNUSED__, +eet_data_get_array(Eet_Free_Context *context, const Eet_Dictionary *ed, Eet_Data_Descriptor *edd __UNUSED__, Eet_Data_Element *ede, Eet_Data_Chunk *echnk, int type, int group_type, void *data, int level, void (*dumpfunc) (void *data, const char *str), void *dumpdata, @@ -2788,11 +2836,13 @@ * on the counter offset */ *(int *)(((char *)data) + ede->count - ede->offset) = count; /* allocate space for the array of elements */ - *(void **)ptr = calloc(count, subsize); + *(void **)ptr = edd->func.mem_alloc(count * subsize); if (!*(void **)ptr) return 0; - _eet_freelist_add(*(void **)ptr); + memset(*(void **)ptr, 0, count * subsize); + + _eet_freelist_add(context, *(void **)ptr); } /* get all array elements */ @@ -2819,7 +2869,8 @@ { int ret; - ret = eet_data_get_unknown(ed, + ret = eet_data_get_unknown(context, + ed, edd, ede, echnk, @@ -2836,7 +2887,8 @@ } else { - data_ret = _eet_data_descriptor_decode(ed, + data_ret = _eet_data_descriptor_decode(context, + ed, ede->subtype, echnk->data, echnk->size, @@ -2845,14 +2897,14 @@ dumpdata); if (!data_ret) return 0; memcpy(dst, data_ret, subsize); - _eet_freeleak_add(data_ret); + _eet_freelist_add(context, data_ret); } } return 1; } static int -eet_data_get_unknown(const Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Chunk *echnk, +eet_data_get_unknown(Eet_Free_Context *context, const Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Chunk *echnk, int type, int group_type __UNUSED__, void *data, int level, void (*dumpfunc) (void *data, const char *str), void *dumpdata, char **p __UNUSED__, int *size __UNUSED__) @@ -2875,12 +2927,12 @@ if ((ed == NULL) || (edd->func.str_direct_alloc == NULL)) { *str = edd->func.str_alloc(*str); - _eet_freelist_str_add(*str); + _eet_freelist_str_add(context, *str); } else { *str = edd->func.str_direct_alloc(*str); - _eet_freelist_direct_str_add(*str); + _eet_freelist_direct_str_add(context, *str); } } } @@ -2892,7 +2944,7 @@ if (*str) { *str = edd->func.str_alloc(*str); - _eet_freelist_str_add(*str); + _eet_freelist_str_add(context, *str); } } } @@ -2900,7 +2952,7 @@ { void **ptr; - data_ret = _eet_data_descriptor_decode(ed, ede->subtype, echnk->data, echnk->size, level + 1, dumpfunc, dumpdata); + data_ret = _eet_data_descriptor_decode(context, ed, ede->subtype, echnk->data, echnk->size, level + 1, dumpfunc, dumpdata); if (!data_ret) return 0; ptr = (void **)(((char *)data)); @@ -3044,6 +3096,7 @@ { const Eet_Dictionary *ed = NULL; const void *data = NULL; + Eet_Free_Context context; int ret = 0; int required_free = 0; int size; @@ -3059,7 +3112,8 @@ if (!data) return 0; } - if (_eet_data_descriptor_decode(ed, NULL, data, size, 0, + memset(&context, 0, sizeof (context)); + if (_eet_data_descriptor_decode(&context, ed, NULL, data, size, 0, dumpfunc, dumpdata)) ret = 1; @@ -3086,6 +3140,7 @@ void *dumpdata) { void *ret = NULL; + Eet_Free_Context context; unsigned int ret_len = 0; if (data_in && key) @@ -3095,7 +3150,8 @@ if (ret) free(ret); return 1; } - if (_eet_data_descriptor_decode(NULL, NULL, ret, ret_len, 0, + memset(&context, 0, sizeof (context)); + if (_eet_data_descriptor_decode(&context, NULL, NULL, ret, ret_len, 0, dumpfunc, dumpdata)) { free(ret); @@ -3104,7 +3160,8 @@ free(ret); return 0; } - if (_eet_data_descriptor_decode(NULL, NULL, data_in, size_in, 0, + memset(&context, 0, sizeof (context)); + if (_eet_data_descriptor_decode(&context, NULL, NULL, data_in, size_in, 0, dumpfunc, dumpdata)) return 1; return 0; @@ -3133,16 +3190,16 @@ void *ciphered = NULL; unsigned int ciphered_len; - if (eet_cipher(ret, *size_ret, key, strlen(key), &ciphered, &ciphered_len)) - { - if (ciphered) free(ciphered); - size_ret = 0; - free(ret); - return NULL; - } - free(ret); - *size_ret = ciphered_len; - ret = ciphered; + if (eet_cipher(ret, *size_ret, key, strlen(key), &ciphered, &ciphered_len)) + { + if (ciphered) free(ciphered); + size_ret = 0; + free(ret); + return NULL; + } + free(ret); + *size_ret = ciphered_len; + ret = ciphered; } return ret; } @@ -3194,8 +3251,9 @@ int size_in) { void *deciphered = NULL; + void *ret; + Eet_Free_Context context; unsigned int deciphered_len = 0; - void *ret; if (key && data_in) { @@ -3204,12 +3262,14 @@ if (deciphered) free(deciphered); return NULL; } - ret = _eet_data_descriptor_decode(NULL, edd, deciphered, deciphered_len, 0, + memset(&context, 0, sizeof (context)); + ret = _eet_data_descriptor_decode(&context, NULL, edd, deciphered, deciphered_len, 0, NULL, NULL); free(deciphered); return ret; } - return _eet_data_descriptor_decode(NULL, edd, data_in, size_in, 0, + memset(&context, 0, sizeof (context)); + return _eet_data_descriptor_decode(&context, NULL, edd, data_in, size_in, 0, NULL, NULL); } |
From: Enlightenment S. <no-...@en...> - 2009-03-25 16:26:56
|
Log: * eet_lib: Prevent double init of gcry. Author: cedric Date: 2009-03-25 09:26:46 -0700 (Wed, 25 Mar 2009) New Revision: 39716 Modified: trunk/eet/src/lib/eet_lib.c Modified: trunk/eet/src/lib/eet_lib.c =================================================================== --- trunk/eet/src/lib/eet_lib.c 2009-03-25 16:09:49 UTC (rev 39715) +++ trunk/eet/src/lib/eet_lib.c 2009-03-25 16:26:46 UTC (rev 39716) @@ -733,26 +733,29 @@ #ifdef HAVE_GNUTLS if (gnutls_global_init()) return --eet_initcount; - /* Before the library can be used, it must initialize itself. */ - gcry_check_version(NULL); - /* Disable warning messages about problems with the secure memory subsystem. - This command should be run right after gcry_check_version. */ - if (gcry_control(GCRYCTL_DISABLE_SECMEM_WARN)) + /* Before the library can be used, it must initialize itself if needed. */ + if (gcry_control (GCRYCTL_ANY_INITIALIZATION_P) == 0) { - gnutls_global_deinit(); - return --eet_initcount; + gcry_check_version(NULL); + /* Disable warning messages about problems with the secure memory subsystem. + This command should be run right after gcry_check_version. */ + if (gcry_control(GCRYCTL_DISABLE_SECMEM_WARN)) + { + gnutls_global_deinit(); + return --eet_initcount; + } + /* This command is used to allocate a pool of secure memory and thus + enabling the use of secure memory. It also drops all extra privileges the + process has (i.e. if it is run as setuid (root)). If the argument nbytes + is 0, secure memory will be disabled. The minimum amount of secure memory + allocated is currently 16384 bytes; you may thus use a value of 1 to + request that default size. */ + if (gcry_control(GCRYCTL_INIT_SECMEM, 16384, 0)) + { + gnutls_global_deinit(); + return --eet_initcount; + } } - /* This command is used to allocate a pool of secure memory and thus - enabling the use of secure memory. It also drops all extra privileges the - process has (i.e. if it is run as setuid (root)). If the argument nbytes - is 0, secure memory will be disabled. The minimum amount of secure memory - allocated is currently 16384 bytes; you may thus use a value of 1 to - request that default size. */ - if (gcry_control(GCRYCTL_INIT_SECMEM, 16384, 0)) - { - gnutls_global_deinit(); - return --eet_initcount; - } #endif #ifdef HAVE_OPENSSL ERR_load_crypto_strings(); |
From: Enlightenment S. <no-...@en...> - 2009-04-14 09:19:04
|
Log: * eet_data: Remove not used pointer. Author: cedric Date: 2009-04-14 02:18:58 -0700 (Tue, 14 Apr 2009) New Revision: 40035 Modified: trunk/eet/src/lib/eet_data.c Modified: trunk/eet/src/lib/eet_data.c =================================================================== --- trunk/eet/src/lib/eet_data.c 2009-04-14 06:27:03 UTC (rev 40034) +++ trunk/eet/src/lib/eet_data.c 2009-04-14 09:18:58 UTC (rev 40035) @@ -1682,7 +1682,6 @@ char *name; char *key; Node *values; - Node *prev; Node *next; Node *parent; union { @@ -2046,7 +2045,6 @@ if (!nn->next) { nn->next = n; - n->prev = nn; break; } } @@ -2100,7 +2098,6 @@ if (!nn->next) { nn->next = n; - n->prev = nn; break; } } |
From: Enlightenment S. <no-...@en...> - 2009-04-16 12:42:19
|
Log: * eet_node.c: Oops, add file to svn. Author: cedric Date: 2009-04-16 05:42:03 -0700 (Thu, 16 Apr 2009) New Revision: 40106 Added: trunk/eet/src/lib/eet_node.c Added: trunk/eet/src/lib/eet_node.c |
From: Enlightenment S. <no-...@en...> - 2009-04-16 12:43:44
|
Log: * eet: Add API to directly store Eet_Node inside and Eet_File. Author: cedric Date: 2009-04-16 05:43:34 -0700 (Thu, 16 Apr 2009) New Revision: 40107 Modified: trunk/eet/src/lib/Eet.h trunk/eet/src/lib/eet_data.c Modified: trunk/eet/src/lib/Eet.h =================================================================== --- trunk/eet/src/lib/Eet.h 2009-04-16 12:42:03 UTC (rev 40106) +++ trunk/eet/src/lib/Eet.h 2009-04-16 12:43:34 UTC (rev 40107) @@ -1378,6 +1378,7 @@ EAPI void eet_node_del(Eet_Node *n); EAPI void *eet_data_node_encode_cipher(Eet_Node *node, const char *key, int *size_ret); + EAPI int eet_data_node_write_cipher(Eet_File *ef, const char *name, const char *key, Eet_Node *node, int compress); /***************************************************************************/ Modified: trunk/eet/src/lib/eet_data.c =================================================================== --- trunk/eet/src/lib/eet_data.c 2009-04-16 12:42:03 UTC (rev 40106) +++ trunk/eet/src/lib/eet_data.c 2009-04-16 12:43:34 UTC (rev 40107) @@ -3260,6 +3260,23 @@ return cdata; } +EAPI int +eet_data_node_write_cipher(Eet_File *ef, const char *name, const char *key, Eet_Node *node, int compress) +{ + Eet_Dictionary *ed; + void *data_enc; + int size; + int val; + + ed = eet_dictionary_get(ef); + + data_enc = _eet_data_dump_encode(ed, node, &size); + if (!data_enc) return 0; + val = eet_write_cipher(ef, name, data_enc, size, compress, key); + free(data_enc); + return val; +} + EAPI void * eet_data_node_encode_cipher(Eet_Node *node, const char *key, |
From: Enlightenment S. <no-...@en...> - 2009-04-16 15:19:18
|
Log: * eet_data: Cleanup a little eet_data_descriptor_decode. Author: cedric Date: 2009-04-16 08:19:14 -0700 (Thu, 16 Apr 2009) New Revision: 40109 Modified: trunk/eet/src/lib/eet_data.c Modified: trunk/eet/src/lib/eet_data.c =================================================================== --- trunk/eet/src/lib/eet_data.c 2009-04-16 14:22:35 UTC (rev 40108) +++ trunk/eet/src/lib/eet_data.c 2009-04-16 15:19:14 UTC (rev 40109) @@ -2164,6 +2164,30 @@ Size -= (4 + Echnk.size + tmp); \ } +static const char *_dump_g_name[6] = { + "struct", + "array", + "var_array", + "list", + "hash", + "???" +}; + +static const char *_dump_t_name[14][2] = { + { "???: ", "???" }, + { "char: ", "%hhi" }, + { "short: ", "%hi" }, + { "int: ", "%i" }, + { "long_long: ", "%lli" }, + { "float: ", "%1.25f" }, + { "double: ", "%1.25f" }, + { "uchar: ", "%hhu" }, + { "ushort: ", "%i" }, + { "uint: ", "%u" }, + { "ulong_long: ", "%llu" }, + { "null", "" } +}; + static void * _eet_data_descriptor_decode(Eet_Free_Context *context, const Eet_Dictionary *ed, @@ -2177,6 +2201,7 @@ void *data = NULL; char *p, tbuf[256]; int size, i, dump; + int chnk_type; Eet_Data_Chunk chnk; if (words_bigendian == -1) @@ -2218,7 +2243,7 @@ { if (!edd->elements.hash.buckets) _eet_descriptor_hash_new(edd); } - if (dumpfunc) + else if (dumpfunc) { dump = 1; if (chnk.type == EET_T_UNKNOW) @@ -2227,27 +2252,11 @@ dumpfunc(dumpdata, "group \""); _eet_data_dump_string_escape(dumpdata, dumpfunc, chnk.name); dumpfunc(dumpdata, "\" "); - switch (chnk.group_type) - { - case EET_G_UNKNOWN: - dumpfunc(dumpdata, "struct"); - break; - case EET_G_ARRAY: - dumpfunc(dumpdata, "array"); - break; - case EET_G_VAR_ARRAY: - dumpfunc(dumpdata, "var_array"); - break; - case EET_G_LIST: - dumpfunc(dumpdata, "list"); - break; - case EET_G_HASH: - dumpfunc(dumpdata, "hash"); - break; - default: - dumpfunc(dumpdata, "???"); - break; - } + + chnk_type = (chnk.group_type >= EET_G_UNKNOWN && chnk.group_type <= EET_G_HASH) ? + chnk.group_type : EET_G_LAST; + + dumpfunc(dumpdata, _dump_g_name[chnk_type - EET_G_UNKNOWN]); dumpfunc(dumpdata, " {\n"); } } @@ -2310,6 +2319,8 @@ if (IS_SIMPLE_TYPE(type)) { + const char *type_name = NULL; + ret = eet_data_get_type(ed, type, echnk.data, @@ -2321,73 +2332,44 @@ dumpfunc(dumpdata, " value \""); _eet_data_dump_string_escape(dumpdata, dumpfunc, echnk.name); dumpfunc(dumpdata, "\" "); + +#define EET_T_TYPE(Eet_Type, Type) \ + case Eet_Type: \ + { \ + dumpfunc(dumpdata, _dump_t_name[Eet_Type][0]); \ + snprintf(tbuf, sizeof (tbuf), _dump_t_name[Eet_Type][1], *((Type *)dd)); \ + dumpfunc(dumpdata, tbuf); \ + break; \ + } + switch (type) { - case EET_T_CHAR: - dumpfunc(dumpdata, "char: "); - snprintf(tbuf, sizeof(tbuf), "%hhi", *((char *)dd)); - dumpfunc(dumpdata, tbuf); break; - case EET_T_SHORT: - dumpfunc(dumpdata, "short: "); - snprintf(tbuf, sizeof(tbuf), "%hi", *((short *)dd)); - dumpfunc(dumpdata, tbuf); break; - case EET_T_INT: - dumpfunc(dumpdata, "int: "); - snprintf(tbuf, sizeof(tbuf), "%i", *((int *)dd)); - dumpfunc(dumpdata, tbuf); break; - case EET_T_LONG_LONG: - dumpfunc(dumpdata, "long_long: "); - snprintf(tbuf, sizeof(tbuf), "%lli", *((long long *)dd)); - dumpfunc(dumpdata, tbuf); break; - case EET_T_FLOAT: - dumpfunc(dumpdata, "float: "); - snprintf(tbuf, sizeof(tbuf), "%1.25f", *((float *)dd)); - dumpfunc(dumpdata, tbuf); break; - case EET_T_DOUBLE: - dumpfunc(dumpdata, "double: "); - snprintf(tbuf, sizeof(tbuf), "%1.25f", *((double *)dd)); - dumpfunc(dumpdata, tbuf); break; - case EET_T_UCHAR: - dumpfunc(dumpdata, "uchar: "); - snprintf(tbuf, sizeof(tbuf), "%hhu", *((unsigned char *)dd)); - dumpfunc(dumpdata, tbuf); break; - case EET_T_USHORT: - dumpfunc(dumpdata, "ushort: "); - snprintf(tbuf, sizeof(tbuf), "%i", *((unsigned short *)dd)); - dumpfunc(dumpdata, tbuf); break; - case EET_T_UINT: - dumpfunc(dumpdata, "uint: "); - snprintf(tbuf, sizeof(tbuf), "%u", *((unsigned int *)dd)); - dumpfunc(dumpdata, tbuf); break; - case EET_T_ULONG_LONG: - dumpfunc(dumpdata, "ulong_long: "); - snprintf(tbuf, sizeof(tbuf), "%llu", *((unsigned long long *)dd)); - dumpfunc(dumpdata, tbuf); break; + EET_T_TYPE(EET_T_CHAR, char); + EET_T_TYPE(EET_T_SHORT, short); + EET_T_TYPE(EET_T_INT, int); + EET_T_TYPE(EET_T_LONG_LONG, long long); + EET_T_TYPE(EET_T_FLOAT, float); + EET_T_TYPE(EET_T_DOUBLE, double); + EET_T_TYPE(EET_T_UCHAR, unsigned char); + EET_T_TYPE(EET_T_USHORT, unsigned short); + EET_T_TYPE(EET_T_UINT, unsigned int); + EET_T_TYPE(EET_T_ULONG_LONG, unsigned long long); 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; + type_name = "inlined: \""; case EET_T_STRING: - { + if (!type_name) type_name = "string: \""; + + { char *s; s = *((char **)dd); if (s) { - dumpfunc(dumpdata, "string: \""); + dumpfunc(dumpdata, type_name); _eet_data_dump_string_escape(dumpdata, dumpfunc, s); dumpfunc(dumpdata, "\""); } - } + } break; case EET_T_NULL: dumpfunc(dumpdata, "null"); @@ -2417,22 +2399,11 @@ dumpfunc(dumpdata, " group \""); _eet_data_dump_string_escape(dumpdata, dumpfunc, echnk.name); dumpfunc(dumpdata, "\" "); - switch (echnk.group_type) - { - case EET_G_UNKNOWN: - dumpfunc(dumpdata, "struct");break; - case EET_G_ARRAY: - dumpfunc(dumpdata, "array");break; - case EET_G_VAR_ARRAY: - dumpfunc(dumpdata, "var_array");break; - case EET_G_LIST: - dumpfunc(dumpdata, "list");break; - case EET_G_HASH: - dumpfunc(dumpdata, "hash");break; - default: - dumpfunc(dumpdata, "???");break; - break; - } + + chnk_type = (echnk.group_type >= EET_G_UNKNOWN && echnk.group_type <= EET_G_HASH) ? + echnk.group_type : EET_G_LAST; + + dumpfunc(dumpdata, _dump_g_name[chnk_type - EET_G_UNKNOWN]); dumpfunc(dumpdata, " {\n"); switch (group_type) { |
From: Enlightenment S. <no-...@en...> - 2009-04-17 14:00:37
|
Log: * eet_cipher: Fix memory leak. Author: cedric Date: 2009-04-17 07:00:31 -0700 (Fri, 17 Apr 2009) New Revision: 40135 Modified: trunk/eet/src/lib/eet_cipher.c Modified: trunk/eet/src/lib/eet_cipher.c =================================================================== --- trunk/eet/src/lib/eet_cipher.c 2009-04-17 10:37:49 UTC (rev 40134) +++ trunk/eet/src/lib/eet_cipher.c 2009-04-17 14:00:31 UTC (rev 40135) @@ -99,6 +99,8 @@ /* Init */ if (!(key = malloc(sizeof(Eet_Key)))) goto on_error; + key->references = 1; + if (gnutls_x509_crt_init(&(key->certificate))) goto on_error; if (gnutls_x509_privkey_init(&(key->private_key))) goto on_error; @@ -604,6 +606,7 @@ *sha1_length = -1; } # endif + gnutls_x509_crt_deinit(cert); # else const unsigned char *tmp; |
From: Enlightenment S. <no-...@en...> - 2009-05-14 15:58:13
|
Log: * Eet: Cleanup eet_data dump code. Author: cedric Date: 2009-05-14 08:58:10 -0700 (Thu, 14 May 2009) New Revision: 40643 Modified: trunk/eet/src/lib/eet_data.c Modified: trunk/eet/src/lib/eet_data.c =================================================================== --- trunk/eet/src/lib/eet_data.c 2009-05-14 14:28:44 UTC (rev 40642) +++ trunk/eet/src/lib/eet_data.c 2009-05-14 15:58:10 UTC (rev 40643) @@ -219,6 +219,13 @@ static int eet_data_get_type(const Eet_Dictionary *ed, int type, const void *src, const void *src_end, void *dest); static void *eet_data_put_type(Eet_Dictionary *ed, int type, const void *src, int *size_ret); +static void eet_data_dump_group_start(int level, void (*dumpfunc) (void *data, const char *str), void *dumpdata, int group_type, const char *name); +static void eet_data_dump_group_end(int level, void (*dumpfunc) (void *data, const char *str), void *dumpdata); +static void eet_data_dump_level(int level, void (*dumpfunc) (void *data, const char *str), void *dumpdata); +static void eet_data_dump_simple_type(int type, const char *name, void *dd, + int level, void (*dumpfunc) (void *data, const char *str), void *dumpdata); + + static int eet_data_get_unknown(Eet_Free_Context *context, const Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Chunk *echnk, int type, int group_type, void *data_in, int level, void (*dumpfunc) (void *data, const char *str), void *dumpdata, char **p, int *size); static void eet_data_put_unknown(Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Stream *ds, void *data_in); static void eet_data_put_array(Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Stream *ds, void *data_in); @@ -732,31 +739,17 @@ const char *s; int ret1, ret2; - if (!src) - { - fprintf(stderr, "stiouf -3\n"); - return; - } - if (size <= 8) - { - fprintf(stderr, "stiouf -2 %i\n", size); - return; - } + if (!src) return; + if (size <= 8) return; - if (!chnk) - { - fprintf(stderr, "stiouf -1\n"); - return; - } + if (!chnk) return; s = src; if (s[2] == 'K') { if ((s[0] != 'C') || (s[1] != 'H') || (s[2] != 'K')) - { - fprintf(stderr, "stiouf 0\n"); - return; - } + return; + chnk->type = (unsigned char)(s[3]); if (chnk->type > EET_T_LAST) { @@ -775,28 +768,13 @@ else { if ((s[0] != 'C') || (s[1] != 'H') || (s[2] != 'n') || (s[3] != 'K')) - { - fprintf(stderr, "stiouf 1\n"); - return; - } + return; } ret1 = eet_data_get_type(ed, EET_T_INT, (s + 4), (s + size), &(chnk->size)); - if (ret1 <= 0) - { - fprintf(stderr, "stiouf 2\n"); - return; - } - if ((chnk->size < 0) || ((chnk->size + 8) > size)) - { - fprintf(stderr, "stiouf 3\n"); - return; - } + if (ret1 <= 0) return; + if ((chnk->size < 0) || ((chnk->size + 8) > size)) return; ret2 = eet_data_get_type(ed, EET_T_STRING, (s + 8), (s + size), &(chnk->name)); - if (ret2 <= 0) - { - fprintf(stderr, "stiouf 4\n"); - return; - } + if (ret2 <= 0) return; chnk->len = ret2; @@ -2199,7 +2177,7 @@ void *dumpdata) { void *data = NULL; - char *p, tbuf[256]; + char *p; int size, i, dump; int chnk_type; Eet_Data_Chunk chnk; @@ -2247,23 +2225,15 @@ { dump = 1; if (chnk.type == EET_T_UNKNOW) - { - for (i = 0; i < level; i++) dumpfunc(dumpdata, " "); - dumpfunc(dumpdata, "group \""); - _eet_data_dump_string_escape(dumpdata, dumpfunc, chnk.name); - dumpfunc(dumpdata, "\" "); - - chnk_type = (chnk.group_type >= EET_G_UNKNOWN && chnk.group_type <= EET_G_HASH) ? - chnk.group_type : EET_G_LAST; - - dumpfunc(dumpdata, _dump_g_name[chnk_type - EET_G_UNKNOWN]); - dumpfunc(dumpdata, " {\n"); - } + eet_data_dump_group_start(level, dumpfunc, dumpdata, chnk.group_type, chnk.name); } while (size > 0) { Eet_Data_Chunk echnk; - Eet_Data_Element *ede; + Eet_Data_Element *ede = NULL; + unsigned char dd[128]; + int group_type = EET_G_UNKNOWN, type = EET_T_UNKNOW; + int ret = 0; /* get next data chunk */ memset(&echnk, 0, sizeof(Eet_Data_Chunk)); @@ -2275,9 +2245,6 @@ ede = _eet_descriptor_hash_find(edd, echnk.name, echnk.hash); if (ede) { - int group_type = EET_G_UNKNOWN, type = EET_T_UNKNOW; - int ret = 0; - group_type = ede->group_type; type = ede->type; if ((echnk.type == 0) && (echnk.group_type == 0)) @@ -2295,241 +2262,39 @@ (echnk.group_type == ede->group_type)) group_type = echnk.group_type; } - /* hashes doesnt fit well with the table */ - ret = eet_group_codec[group_type - 100].get(context, ed, edd, ede, &echnk, type, group_type, ((char *)data) + ede->offset, level, dumpfunc, dumpdata, &p, &size); - if (ret <= 0) goto error; } } /*...... dump func */ else if (dumpfunc) { - unsigned char dd[128]; - int group_type = EET_G_UNKNOWN, type = EET_T_UNKNOW; - if ((echnk.type > EET_T_UNKNOW) && (echnk.type < EET_T_LAST)) type = echnk.type; else if ((echnk.group_type > EET_G_UNKNOWN) && (echnk.group_type < EET_G_LAST)) group_type = echnk.group_type; - if (group_type == EET_G_UNKNOWN) - { - int ret; - void *data_ret; + } - if (IS_SIMPLE_TYPE(type)) - { - const char *type_name = NULL; + if (dumpfunc && group_type == EET_G_UNKNOWN && IS_SIMPLE_TYPE(type)) + { + ret = eet_data_get_type(ed, + type, + echnk.data, + ((char *)echnk.data) + echnk.size, + dd); + if (ret <= 0) goto error; - ret = eet_data_get_type(ed, - type, - echnk.data, - ((char *)echnk.data) + echnk.size, - dd); - if (ret <= 0) goto error; - - for (i = 0; i < level; i++) dumpfunc(dumpdata, " "); - dumpfunc(dumpdata, " value \""); - _eet_data_dump_string_escape(dumpdata, dumpfunc, echnk.name); - dumpfunc(dumpdata, "\" "); - -#define EET_T_TYPE(Eet_Type, Type) \ - case Eet_Type: \ - { \ - dumpfunc(dumpdata, _dump_t_name[Eet_Type][0]); \ - snprintf(tbuf, sizeof (tbuf), _dump_t_name[Eet_Type][1], *((Type *)dd)); \ - dumpfunc(dumpdata, tbuf); \ - break; \ - } - - switch (type) - { - EET_T_TYPE(EET_T_CHAR, char); - EET_T_TYPE(EET_T_SHORT, short); - EET_T_TYPE(EET_T_INT, int); - EET_T_TYPE(EET_T_LONG_LONG, long long); - EET_T_TYPE(EET_T_FLOAT, float); - EET_T_TYPE(EET_T_DOUBLE, double); - EET_T_TYPE(EET_T_UCHAR, unsigned char); - EET_T_TYPE(EET_T_USHORT, unsigned short); - EET_T_TYPE(EET_T_UINT, unsigned int); - EET_T_TYPE(EET_T_ULONG_LONG, unsigned long long); - case EET_T_INLINED_STRING: - type_name = "inlined: \""; - case EET_T_STRING: - if (!type_name) type_name = "string: \""; - - { - char *s; - - s = *((char **)dd); - if (s) - { - dumpfunc(dumpdata, type_name); - _eet_data_dump_string_escape(dumpdata, dumpfunc, s); - dumpfunc(dumpdata, "\""); - } - } - break; - case EET_T_NULL: - dumpfunc(dumpdata, "null"); - break; - default: - dumpfunc(dumpdata, "???: ???"); break; - break; - } - dumpfunc(dumpdata, ";\n"); - } - else - { - data_ret = _eet_data_descriptor_decode(context, - ed, - NULL, - echnk.data, - echnk.size, - level + 1, - dumpfunc, - dumpdata); - if (!data_ret) goto error; - } - } - else - { - for (i = 0; i < level; i++) dumpfunc(dumpdata, " "); - dumpfunc(dumpdata, " group \""); - _eet_data_dump_string_escape(dumpdata, dumpfunc, echnk.name); - dumpfunc(dumpdata, "\" "); - - chnk_type = (echnk.group_type >= EET_G_UNKNOWN && echnk.group_type <= EET_G_HASH) ? - echnk.group_type : EET_G_LAST; - - dumpfunc(dumpdata, _dump_g_name[chnk_type - EET_G_UNKNOWN]); - dumpfunc(dumpdata, " {\n"); - switch (group_type) - { - case EET_G_ARRAY: - case EET_G_VAR_ARRAY: - { - int count; - int ret; - int i; - - EET_ASSERT(!IS_SIMPLE_TYPE(type), goto error); - - ret = eet_data_get_type(ed, - EET_T_INT, - echnk.data, - ((char *)echnk.data) + echnk.size, - &count); - if (ret <= 0) goto error; - - for (i = 0; i < level; i++) dumpfunc(dumpdata, " "); - dumpfunc(dumpdata, " count "); - snprintf(tbuf, sizeof(tbuf), "%i", count); - dumpfunc(dumpdata, tbuf); - dumpfunc(dumpdata, ";\n"); - - /* get all array elements */ - for (i = 0; i < count; i++) - { - void *data_ret = NULL; - - /* Advance to next chunk */ - NEXT_CHUNK(p, size, echnk, ed); - memset(&echnk, 0, sizeof(Eet_Data_Chunk)); - - eet_data_chunk_get(ed, &echnk, p, size); - if (!echnk.name) goto error; - /* get the data */ - data_ret = _eet_data_descriptor_decode(context, - ed, - NULL, - echnk.data, - echnk.size, - level + 2, - dumpfunc, - dumpdata); - if (!data_ret) goto error; - } - } - break; - case EET_G_LIST: - { - void *data_ret = NULL; - - EET_ASSERT(!IS_SIMPLE_TYPE(type), goto error); - - data_ret = _eet_data_descriptor_decode(context, - ed, - NULL, - echnk.data, - echnk.size, - level + 2, - dumpfunc, - dumpdata); - if (!data_ret) goto error; - } - break; - case EET_G_HASH: - { - int ret; - char *key = NULL; - void *data_ret = NULL; - - /* Read key */ - ret = eet_data_get_type(ed, - EET_T_STRING, - echnk.data, - ((char *)echnk.data) + echnk.size, - &key); - if (ret <= 0) goto error; - - /* Advance to next chunk */ - NEXT_CHUNK(p, size, echnk, ed); - memset(&echnk, 0, sizeof(Eet_Data_Chunk)); - - /* Read value */ - eet_data_chunk_get(ed, &echnk, p, size); - if (!echnk.name) goto error; - - EET_ASSERT(!IS_SIMPLE_TYPE(type), goto error); - - { - 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(context, - ed, - NULL, - echnk.data, - echnk.size, - level + 2, - dumpfunc, - dumpdata); - } - if (!data_ret) - { - goto error; - } - } - break; - default: - break; - } - if (dumpfunc) - { - for (i = 0; i < level; i++) dumpfunc(dumpdata, " "); - dumpfunc(dumpdata, " }\n"); - } - } + eet_data_dump_simple_type(type, echnk.name, dd, level, dumpfunc, dumpdata); } + else + { + ret = eet_group_codec[group_type - 100].get(context, + ed, edd, ede, &echnk, + type, group_type, ede ? ((char *)data) + ede->offset : dd, + level, dumpfunc, dumpdata, + &p, &size); + if (ret <= 0) goto error; + } /* advance to next chunk */ NEXT_CHUNK(p, size, echnk, ed); } @@ -2588,39 +2353,91 @@ return NULL; } +static void +eet_data_dump_level(int level, void (*dumpfunc) (void *data, const char *str), void *dumpdata) +{ + int i; + + for (i = 0; i < level; i++) dumpfunc(dumpdata, " "); +} + +static void +eet_data_dump_group_start(int level, void (*dumpfunc) (void *data, const char *str), void *dumpdata, + int group_type, const char *name) +{ + int chnk_type; + + chnk_type = (group_type >= EET_G_UNKNOWN && group_type <= EET_G_HASH) ? + group_type : EET_G_LAST; + + eet_data_dump_level(level, dumpfunc, dumpdata); + dumpfunc(dumpdata, "group \""); + _eet_data_dump_string_escape(dumpdata, dumpfunc, name); + dumpfunc(dumpdata, "\" "); + + dumpfunc(dumpdata, _dump_g_name[chnk_type - EET_G_UNKNOWN]); + dumpfunc(dumpdata, " {\n"); +} + +static void +eet_data_dump_group_end(int level, void (*dumpfunc) (void *data, const char *str), void *dumpdata) +{ + eet_data_dump_level(level, dumpfunc, dumpdata); + dumpfunc(dumpdata, " }\n"); +} + static int eet_data_get_list(Eet_Free_Context *context, const Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Chunk *echnk, - int type __UNUSED__, int group_type __UNUSED__, void *data, + int type, int group_type __UNUSED__, void *data, int level, void (*dumpfunc) (void *data, const char *str), void *dumpdata, - char **p __UNUSED__, int *size __UNUSED__) + char **p, int *size) { + Eet_Data_Descriptor *subtype = NULL; void *list = NULL; void **ptr; void *data_ret; + int et = EET_T_UNKNOW; EET_ASSERT(!((type > EET_T_UNKNOW) && (type < EET_T_STRING)), return 0); + if (edd) + { + subtype = ede->subtype; + et = ede->type; + } + else if (dumpfunc) + { + eet_data_dump_group_start(level + 1, dumpfunc, dumpdata, echnk->group_type, echnk->name); + } + ptr = (void **)data; list = *ptr; data_ret = NULL; - if (ede->type >= EET_T_STRING) + if (et >= EET_T_STRING) { int ret; - ret = eet_data_get_unknown(context, ed, edd, ede, echnk, ede->type, EET_G_UNKNOWN, + ret = eet_data_get_unknown(context, ed, edd, ede, echnk, et, EET_G_UNKNOWN, &data_ret, level, dumpfunc, dumpdata, p, size); if (!ret) return 0; } else { - data_ret = _eet_data_descriptor_decode(context, ed, ede->subtype, echnk->data, echnk->size, level + 2, dumpfunc, dumpdata); + data_ret = _eet_data_descriptor_decode(context, ed, subtype, + echnk->data, echnk->size, + level + 2, dumpfunc, dumpdata); if (!data_ret) return 0; } - list = edd->func.list_append(list, data_ret); - *ptr = list; - _eet_freelist_list_add(context, ptr); + if (edd) + { + list = edd->func.list_append(list, data_ret); + *ptr = list; + _eet_freelist_list_add(context, ptr); + } + else if (dumpfunc) + eet_data_dump_group_end(level, dumpfunc, dumpdata); return 1; } @@ -2658,11 +2475,21 @@ eet_data_chunk_get(ed, echnk, *p, *size); if (!echnk->name) goto on_error; + if (dumpfunc && key) + { + eet_data_dump_group_start(level + 1, dumpfunc, dumpdata, echnk->group_type, echnk->name); + + eet_data_dump_level(level, dumpfunc, dumpdata); + dumpfunc(dumpdata, " key \""); + _eet_data_dump_string_escape(dumpdata, dumpfunc, key); + dumpfunc(dumpdata, "\";\n"); + } + if (type >= EET_T_STRING) { int ret; - ret = eet_data_get_unknown(context, ed, edd, ede, echnk, ede->type, EET_G_UNKNOWN, + ret = eet_data_get_unknown(context, ed, edd, ede, echnk, ede ? ede->type : type, EET_G_UNKNOWN, &data_ret, level, dumpfunc, dumpdata, p, size); if (!ret) return 0; } @@ -2670,7 +2497,7 @@ { data_ret = _eet_data_descriptor_decode(context, ed, - ede->subtype, + ede ? ede->subtype : NULL, echnk->data, echnk->size, level + 2, @@ -2679,9 +2506,15 @@ if (!data_ret) goto on_error; } - hash = edd->func.hash_add(hash, key, data_ret); - *ptr = hash; - _eet_freelist_hash_add(context, ptr); + if (edd) + { + hash = edd->func.hash_add(hash, key, data_ret); + *ptr = hash; + _eet_freelist_hash_add(context, ptr); + } + else if (dumpfunc) + eet_data_dump_group_end(level, dumpfunc, dumpdata); + return 1; on_error: @@ -2709,7 +2542,7 @@ void *ptr; int count; int ret; - int subsize; + int subsize = 0; int i; EET_ASSERT(!((type > EET_T_UNKNOW) && (type < EET_T_STRING)), return 0); @@ -2723,32 +2556,47 @@ &count); if (ret <= 0) return ret; - if (type >= EET_T_STRING) - subsize = eet_basic_codec[ede->type].size; - else - subsize = ede->subtype->size; - name = echnk->name; - if (group_type == EET_G_VAR_ARRAY) + if (ede) { - /* store the number of elements - * on the counter offset */ - *(int *)(((char *)data) + ede->count - ede->offset) = count; - /* allocate space for the array of elements */ - *(void **)ptr = edd->func.mem_alloc(count * subsize); + if (type >= EET_T_STRING) + subsize = eet_basic_codec[ede->type].size; + else + subsize = ede->subtype->size; - if (!*(void **)ptr) return 0; + if (group_type == EET_G_VAR_ARRAY) + { + /* store the number of elements + * on the counter offset */ + *(int *)(((char *)data) + ede->count - ede->offset) = count; + /* allocate space for the array of elements */ + *(void **)ptr = edd->func.mem_alloc(count * subsize); - memset(*(void **)ptr, 0, count * subsize); + if (!*(void **)ptr) return 0; - _eet_freelist_add(context, *(void **)ptr); + memset(*(void **)ptr, 0, count * subsize); + + _eet_freelist_add(context, *(void **)ptr); + } } + else + { + char tbuf[256]; + eet_data_dump_group_start(level + 1, dumpfunc, dumpdata, echnk->group_type, echnk->name); + + eet_data_dump_level(level, dumpfunc, dumpdata); + dumpfunc(dumpdata, " count "); + eina_convert_itoa(count, tbuf); + dumpfunc(dumpdata, tbuf); + dumpfunc(dumpdata, ";\n"); + } + /* get all array elements */ for (i = 0; i < count; i++) { - void *dst; + void *dst = NULL; void *data_ret = NULL; /* Advance to next chunk */ @@ -2760,49 +2608,103 @@ /* get the data */ /* get the destination pointer */ - if (group_type == EET_G_ARRAY) - dst = (char *)ptr + (subsize * i); - else - dst = *(char **)ptr + (subsize * i); + if (ede) + { + if (group_type == EET_G_ARRAY) + dst = (char *)ptr + (subsize * i); + else + dst = *(char **)ptr + (subsize * i); + } if (type >= EET_T_STRING) { int ret; - ret = eet_data_get_unknown(context, - ed, - edd, - ede, - echnk, - ede->type, - EET_G_UNKNOWN, - &data_ret, - level, - dumpfunc, - dumpdata, - p, - size); + ret = eet_data_get_unknown(context, ed, edd, ede, echnk, ede ? ede->type : type, EET_G_UNKNOWN, + &data_ret, level, dumpfunc, dumpdata, p, size); if (!ret) return 0; - memcpy(dst, &data_ret, subsize); + if (dst) memcpy(dst, &data_ret, subsize); } else { - data_ret = _eet_data_descriptor_decode(context, - ed, - ede->subtype, - echnk->data, - echnk->size, - level + 2, - dumpfunc, - dumpdata); + data_ret = _eet_data_descriptor_decode(context, ed, ede ? ede->subtype : NULL, + echnk->data, echnk->size, + level + 2, dumpfunc, dumpdata); if (!data_ret) return 0; - memcpy(dst, data_ret, subsize); - _eet_freelist_add(context, data_ret); + if (dst) + { + memcpy(dst, data_ret, subsize); + _eet_freelist_add(context, data_ret); + } } } + + if (dumpfunc) + eet_data_dump_group_end(level, dumpfunc, dumpdata); + return 1; } +static void +eet_data_dump_simple_type(int type, const char *name, void *dd, + int level, void (*dumpfunc) (void *data, const char *str), void *dumpdata) +{ + const char *type_name = NULL; + char tbuf[256]; + + eet_data_dump_level(level, dumpfunc, dumpdata); + dumpfunc(dumpdata, " value \""); + _eet_data_dump_string_escape(dumpdata, dumpfunc, name); + dumpfunc(dumpdata, "\" "); + +#define EET_T_TYPE(Eet_Type, Type) \ + case Eet_Type: \ + { \ + dumpfunc(dumpdata, _dump_t_name[Eet_Type][0]); \ + snprintf(tbuf, sizeof (tbuf), _dump_t_name[Eet_Type][1], *((Type *)dd)); \ + dumpfunc(dumpdata, tbuf); \ + break; \ + } + + switch (type) + { + EET_T_TYPE(EET_T_CHAR, char); + EET_T_TYPE(EET_T_SHORT, short); + EET_T_TYPE(EET_T_INT, int); + EET_T_TYPE(EET_T_LONG_LONG, long long); + EET_T_TYPE(EET_T_FLOAT, float); + EET_T_TYPE(EET_T_DOUBLE, double); + EET_T_TYPE(EET_T_UCHAR, unsigned char); + EET_T_TYPE(EET_T_USHORT, unsigned short); + EET_T_TYPE(EET_T_UINT, unsigned int); + EET_T_TYPE(EET_T_ULONG_LONG, unsigned long long); + case EET_T_INLINED_STRING: + type_name = "inlined: \""; + case EET_T_STRING: + if (!type_name) type_name = "string: \""; + + { + char *s; + + s = *((char **)dd); + if (s) + { + dumpfunc(dumpdata, type_name); + _eet_data_dump_string_escape(dumpdata, dumpfunc, s); + dumpfunc(dumpdata, "\""); + } + } + break; + case EET_T_NULL: + dumpfunc(dumpdata, "null"); + break; + default: + dumpfunc(dumpdata, "???: ???"); break; + break; + } + dumpfunc(dumpdata, ";\n"); +} + static int eet_data_get_unknown(Eet_Free_Context *context, const Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Chunk *echnk, int type, int group_type __UNUSED__, void *data, @@ -2817,8 +2719,12 @@ ret = eet_data_get_type(ed, type, echnk->data, ((char *)echnk->data) + echnk->size, ((char *)data)); if (ret <= 0) return ret; - if (type == EET_T_STRING) + if (!edd && dumpfunc) { + eet_data_dump_simple_type(type, echnk->name, data, level, dumpfunc, dumpdata); + } + else if (type == EET_T_STRING) + { char **str; str = (char **)(((char *)data)); @@ -2848,15 +2754,22 @@ } } } - else if (ede->subtype) + else { - void **ptr; + Eet_Data_Descriptor *subtype; - data_ret = _eet_data_descriptor_decode(context, ed, ede->subtype, echnk->data, echnk->size, level + 1, dumpfunc, dumpdata); - if (!data_ret) return 0; + subtype = ede ? ede->subtype : NULL; - ptr = (void **)(((char *)data)); - *ptr = (void *)data_ret; + if (subtype || dumpfunc) + { + void **ptr; + + data_ret = _eet_data_descriptor_decode(context, ed, subtype, echnk->data, echnk->size, level + 1, dumpfunc, dumpdata); + if (!data_ret) return 0; + + ptr = (void **)(((char *)data)); + *ptr = (void *)data_ret; + } } return 1; |
From: Enlightenment S. <no-...@en...> - 2009-05-18 14:46:36
|
Log: * eet_data: Remove some warning. Author: cedric Date: 2009-05-18 07:46:32 -0700 (Mon, 18 May 2009) New Revision: 40725 Modified: trunk/eet/src/lib/eet_data.c Modified: trunk/eet/src/lib/eet_data.c =================================================================== --- trunk/eet/src/lib/eet_data.c 2009-05-18 14:14:33 UTC (rev 40724) +++ trunk/eet/src/lib/eet_data.c 2009-05-18 14:46:32 UTC (rev 40725) @@ -2179,7 +2179,6 @@ void *data = NULL; char *p; int size, i, dump; - int chnk_type; Eet_Data_Chunk chnk; if (words_bigendian == -1) @@ -2290,7 +2289,7 @@ { ret = eet_group_codec[group_type - 100].get(context, ed, edd, ede, &echnk, - type, group_type, ede ? ((char *)data) + ede->offset : dd, + type, group_type, ede ? (void*) (((char *)data) + ede->offset) : dd, level, dumpfunc, dumpdata, &p, &size); if (ret <= 0) goto error; @@ -2699,7 +2698,7 @@ dumpfunc(dumpdata, "null"); break; default: - dumpfunc(dumpdata, "???: ???"); break; + dumpfunc(dumpdata, "???: ???"); break; } dumpfunc(dumpdata, ";\n"); |
From: Enlightenment S. <no-...@en...> - 2009-06-02 16:24:35
|
Log: * eet_node: Fix API. Author: cedric Date: 2009-06-02 09:24:28 -0700 (Tue, 02 Jun 2009) New Revision: 40873 Modified: trunk/eet/src/lib/Eet.h trunk/eet/src/lib/eet_data.c trunk/eet/src/lib/eet_node.c Modified: trunk/eet/src/lib/Eet.h =================================================================== --- trunk/eet/src/lib/Eet.h 2009-06-01 15:07:12 UTC (rev 40872) +++ trunk/eet/src/lib/Eet.h 2009-06-02 16:24:28 UTC (rev 40873) @@ -1367,13 +1367,14 @@ EAPI Eet_Node *eet_node_unsigned_char_new(const char *name, unsigned char uc); EAPI Eet_Node *eet_node_unsigned_short_new(const char *name, unsigned short us); EAPI Eet_Node *eet_node_unsigned_int_new(const char *name, unsigned int ui); + EAPI Eet_Node *eet_node_unsigned_long_long_new(const char *name, unsigned long long l); EAPI Eet_Node *eet_node_string_new(const char *name, const char *str); EAPI Eet_Node *eet_node_inlined_string_new(const char *name, const char *str); EAPI Eet_Node *eet_node_null_new(const char *name); EAPI Eet_Node *eet_node_list_new(const char *name, Eina_List *nodes); EAPI Eet_Node *eet_node_array_new(const char *name, int count, Eina_List *nodes); - EAPI Eet_Node *eet_node_var_array_new(const char *name, int count, Eina_List *nodes); - EAPI Eet_Node *eet_node_hash_new(const char *name, const char *key, Eina_List *nodes); + EAPI Eet_Node *eet_node_var_array_new(const char *name, Eina_List *nodes); + EAPI Eet_Node *eet_node_hash_new(const char *name, const char *key, Eet_Node *node); EAPI Eet_Node *eet_node_struct_new(const char *name, Eina_List *nodes); EAPI void eet_node_del(Eet_Node *n); Modified: trunk/eet/src/lib/eet_data.c =================================================================== --- trunk/eet/src/lib/eet_data.c 2009-06-01 15:07:12 UTC (rev 40872) +++ trunk/eet/src/lib/eet_data.c 2009-06-02 16:24:28 UTC (rev 40873) @@ -2297,6 +2297,7 @@ /* advance to next chunk */ NEXT_CHUNK(p, size, echnk, ed); } + _eet_freelist_all_unref(context); if (dumpfunc) { Modified: trunk/eet/src/lib/eet_node.c =================================================================== --- trunk/eet/src/lib/eet_node.c 2009-06-01 15:07:12 UTC (rev 40872) +++ trunk/eet/src/lib/eet_node.c 2009-06-02 16:24:28 UTC (rev 40873) @@ -68,6 +68,7 @@ EET_NODE_NEW(EET_T_UCHAR, unsigned_char, uc, unsigned char); EET_NODE_NEW(EET_T_USHORT, unsigned_short, us, unsigned short); EET_NODE_NEW(EET_T_UINT, unsigned_int, ui, unsigned int); +EET_NODE_NEW(EET_T_ULONG_LONG, unsigned_long_long, ul, unsigned long long); EET_NODE_STR_NEW(EET_T_STRING, string, str, const char *); EET_NODE_STR_NEW(EET_T_INLINED_STRING, inlined_string, str, const char *); @@ -113,14 +114,14 @@ } Eet_Node * -eet_node_var_array_new(const char *name, int count, Eina_List *nodes) +eet_node_var_array_new(const char *name, Eina_List *nodes) { Eet_Node *n; n = _eet_node_new(name, EET_G_VAR_ARRAY); if (!n) return NULL; - n->count = count; + n->count = eina_list_count(nodes); _eet_node_append(n, nodes); @@ -128,14 +129,18 @@ } Eet_Node * -eet_node_hash_new(const char *name, const char *key, Eina_List *nodes) +eet_node_hash_new(const char *name, const char *key, Eet_Node *node) { + Eina_List *nodes; Eet_Node *n; + if (!node) return NULL; + n = _eet_node_new(name, EET_G_HASH); if (!n) return NULL; n->key = eina_stringshare_add(key); + nodes = eina_list_append(NULL, node); _eet_node_append(n, nodes); @@ -195,3 +200,161 @@ eina_stringshare_del(n->name); free(n); } + + +static const char *eet_node_dump_g_name[6] = { + "struct", + "array", + "var_array", + "list", + "hash", + "???" +}; + +static const char *eet_node_dump_t_name[14][2] = { + { "???: ", "???" }, + { "char: ", "%hhi" }, + { "short: ", "%hi" }, + { "int: ", "%i" }, + { "long_long: ", "%lli" }, + { "float: ", "%1.25f" }, + { "double: ", "%1.25f" }, + { "uchar: ", "%hhu" }, + { "ushort: ", "%i" }, + { "uint: ", "%u" }, + { "ulong_long: ", "%llu" }, + { "null", "" } +}; + +static void +eet_node_dump_level(int level, void (*dumpfunc) (void *data, const char *str), void *dumpdata) +{ + int i; + + for (i = 0; i < level; i++) dumpfunc(dumpdata, " "); +} + +static char * +eet_node_string_escape(const char *str) +{ + char *s, *sp; + const char *strp; + int sz = 0; + + for (strp = str; *strp; strp++) + { + if (*strp == '\"') sz += 2; + else if (*strp == '\\') sz += 2; + else sz += 1; + } + s = malloc(sz + 1); + if (!s) return NULL; + for (strp = str, sp = s; *strp; strp++, sp++) + { + if (*strp == '\"') + { + *sp = '\\'; + sp++; + } + else if (*strp == '\\') + { + *sp = '\\'; + sp++; + } + *sp = *strp; + } + *sp = 0; + return s; +} + +static void +eet_node_dump_string_escape(void *dumpdata, void dumpfunc(void *data, const char *str), const char *str) +{ + char *s; + + s = eet_node_string_escape(str); + if (!s) return ; + + dumpfunc(dumpdata, s); + free(s); +} + +static void +eet_node_dump_simple_type(Eet_Node *n, int level, + void (*dumpfunc) (void *data, const char *str), void *dumpdata) +{ + const char *type_name = NULL; + char tbuf[256]; + + eet_node_dump_level(level, dumpfunc, dumpdata); + dumpfunc(dumpdata, " value \""); + eet_node_dump_string_escape(dumpdata, dumpfunc, n->name); + dumpfunc(dumpdata, "\" "); + +#define EET_T_TYPE(Eet_Type, Type) \ + case Eet_Type: \ + { \ + dumpfunc(dumpdata, eet_node_dump_t_name[Eet_Type][0]); \ + snprintf(tbuf, sizeof (tbuf), eet_node_dump_t_name[Eet_Type][1], n->data.Type); \ + dumpfunc(dumpdata, tbuf); \ + break; \ + } + + switch (n->type) + { + EET_T_TYPE(EET_T_CHAR, c); + EET_T_TYPE(EET_T_SHORT, s); + EET_T_TYPE(EET_T_INT, i); + EET_T_TYPE(EET_T_LONG_LONG, l); + EET_T_TYPE(EET_T_FLOAT, f); + EET_T_TYPE(EET_T_DOUBLE, d); + EET_T_TYPE(EET_T_UCHAR, uc); + EET_T_TYPE(EET_T_USHORT, us); + EET_T_TYPE(EET_T_UINT, ui); + EET_T_TYPE(EET_T_ULONG_LONG, ul); + case EET_T_INLINED_STRING: + type_name = "inlined: \""; + case EET_T_STRING: + if (!type_name) type_name = "string: \""; + + dumpfunc(dumpdata, type_name); + eet_node_dump_string_escape(dumpdata, dumpfunc, n->data.str); + dumpfunc(dumpdata, "\""); + break; + case EET_T_NULL: + dumpfunc(dumpdata, "null"); + break; + default: + dumpfunc(dumpdata, "???: ???"); + break; + } + + dumpfunc(dumpdata, ";\n"); +} + +void +eet_node_dump(Eet_Node *n, int dumplevel, void (*dumpfunc) (void *data, const char *str), void *dumpdata) +{ + switch (n->type) + { + case EET_G_HASH: + case EET_G_UNKNOWN: + case EET_G_VAR_ARRAY: + case EET_G_ARRAY: + case EET_G_LIST: + break; + case EET_T_STRING: + case EET_T_INLINED_STRING: + case EET_T_CHAR: + case EET_T_SHORT: + case EET_T_INT: + case EET_T_LONG_LONG: + case EET_T_FLOAT: + case EET_T_DOUBLE: + case EET_T_UCHAR: + case EET_T_USHORT: + case EET_T_UINT: + eet_node_dump_simple_type(n, dumplevel, dumpfunc, dumpdata); + break; + } +} |
From: Enlightenment S. <no-...@en...> - 2009-06-04 09:30:01
|
Log: * eet_node: Fix eet_data_undump segv when Eet_Node == NULL. Author: cedric Date: 2009-06-04 02:29:56 -0700 (Thu, 04 Jun 2009) New Revision: 40894 Modified: trunk/eet/src/lib/eet_data.c Modified: trunk/eet/src/lib/eet_data.c =================================================================== --- trunk/eet/src/lib/eet_data.c 2009-06-04 09:11:20 UTC (rev 40893) +++ trunk/eet/src/lib/eet_data.c 2009-06-04 09:29:56 UTC (rev 40894) @@ -1671,6 +1671,8 @@ else words_bigendian = 0; } + if (node == NULL) return NULL; + ds = eet_data_stream_new(); if (!ds) return NULL; |
From: Enlightenment S. <no-...@en...> - 2009-06-15 16:49:33
|
Log: * Eet: Add a clean way to create struct child. Author: cedric Date: 2009-06-15 09:48:31 -0700 (Mon, 15 Jun 2009) New Revision: 41053 Modified: trunk/eet/src/lib/Eet.h trunk/eet/src/lib/eet_node.c Modified: trunk/eet/src/lib/Eet.h =================================================================== --- trunk/eet/src/lib/Eet.h 2009-06-15 16:22:01 UTC (rev 41052) +++ trunk/eet/src/lib/Eet.h 2009-06-15 16:48:31 UTC (rev 41053) @@ -1376,6 +1376,7 @@ EAPI Eet_Node *eet_node_var_array_new(const char *name, Eina_List *nodes); EAPI Eet_Node *eet_node_hash_new(const char *name, const char *key, Eet_Node *node); EAPI Eet_Node *eet_node_struct_new(const char *name, Eina_List *nodes); + EAPI Eet_Node *eet_node_struct_child_new(const char *parent, Eet_Node *child); EAPI void eet_node_del(Eet_Node *n); EAPI void *eet_data_node_encode_cipher(Eet_Node *node, const char *key, int *size_ret); Modified: trunk/eet/src/lib/eet_node.c =================================================================== --- trunk/eet/src/lib/eet_node.c 2009-06-15 16:22:01 UTC (rev 41052) +++ trunk/eet/src/lib/eet_node.c 2009-06-15 16:48:31 UTC (rev 41053) @@ -160,6 +160,22 @@ return n; } +Eet_Node * +eet_node_struct_child_new(const char *parent, Eet_Node *child) +{ + Eet_Node *n; + + if (child->type != EET_G_UNKNOWN) + return child; + + n = _eet_node_new(parent, EET_G_UNKNOWN); + if (!n) return NULL; + + _eet_node_append(n, eina_list_prepend(NULL, child)); + + return n; +} + void eet_node_del(Eet_Node *n) { |
From: Enlightenment S. <no-...@en...> - 2009-06-24 13:16:28
|
Log: * eet: SUN compiler don't like ; at the end of this macro. Author: cedric Date: 2009-06-24 05:56:16 -0700 (Wed, 24 Jun 2009) New Revision: 41184 Modified: trunk/eet/src/lib/eet_node.c Modified: trunk/eet/src/lib/eet_node.c =================================================================== --- trunk/eet/src/lib/eet_node.c 2009-06-24 12:48:33 UTC (rev 41183) +++ trunk/eet/src/lib/eet_node.c 2009-06-24 12:56:16 UTC (rev 41184) @@ -59,18 +59,18 @@ return n; \ } -EET_NODE_NEW(EET_T_CHAR, char, c, char); -EET_NODE_NEW(EET_T_SHORT, short, s, short); -EET_NODE_NEW(EET_T_INT, int, i, int); -EET_NODE_NEW(EET_T_LONG_LONG, long_long, l, long long); -EET_NODE_NEW(EET_T_FLOAT, float, f, float); -EET_NODE_NEW(EET_T_DOUBLE, double, d, double); -EET_NODE_NEW(EET_T_UCHAR, unsigned_char, uc, unsigned char); -EET_NODE_NEW(EET_T_USHORT, unsigned_short, us, unsigned short); -EET_NODE_NEW(EET_T_UINT, unsigned_int, ui, unsigned int); -EET_NODE_NEW(EET_T_ULONG_LONG, unsigned_long_long, ul, unsigned long long); -EET_NODE_STR_NEW(EET_T_STRING, string, str, const char *); -EET_NODE_STR_NEW(EET_T_INLINED_STRING, inlined_string, str, const char *); +EET_NODE_NEW(EET_T_CHAR, char, c, char) +EET_NODE_NEW(EET_T_SHORT, short, s, short) +EET_NODE_NEW(EET_T_INT, int, i, int) +EET_NODE_NEW(EET_T_LONG_LONG, long_long, l, long long) +EET_NODE_NEW(EET_T_FLOAT, float, f, float) +EET_NODE_NEW(EET_T_DOUBLE, double, d, double) +EET_NODE_NEW(EET_T_UCHAR, unsigned_char, uc, unsigned char) +EET_NODE_NEW(EET_T_USHORT, unsigned_short, us, unsigned short) +EET_NODE_NEW(EET_T_UINT, unsigned_int, ui, unsigned int) +EET_NODE_NEW(EET_T_ULONG_LONG, unsigned_long_long, ul, unsigned long long) +EET_NODE_STR_NEW(EET_T_STRING, string, str, const char *) +EET_NODE_STR_NEW(EET_T_INLINED_STRING, inlined_string, str, const char *) Eet_Node * eet_node_null_new(const char *name) |
From: Enlightenment S. <no-...@en...> - 2009-07-06 13:25:35
|
Log: * eet: Fix compilation when disabling signature, with gnutls enabled. Author: cedric Date: 2009-07-06 06:25:29 -0700 (Mon, 06 Jul 2009) New Revision: 41256 Modified: trunk/eet/src/lib/eet_cipher.c Modified: trunk/eet/src/lib/eet_cipher.c =================================================================== --- trunk/eet/src/lib/eet_cipher.c 2009-07-06 12:32:51 UTC (rev 41255) +++ trunk/eet/src/lib/eet_cipher.c 2009-07-06 13:25:29 UTC (rev 41256) @@ -348,22 +348,26 @@ { void *result; -#ifdef HAVE_GNUTLS +#ifdef HAVE_SIGNATURE +# ifdef HAVE_GNUTLS result = malloc(gcry_md_get_algo_dlen(GCRY_MD_SHA1)); if (!result) return NULL; gcry_md_hash_buffer(GCRY_MD_SHA1, result, data_base, data_length); if (sha1_length) *sha1_length = gcry_md_get_algo_dlen(GCRY_MD_SHA1); -#else -# ifdef HAVE_OPENSSL +# else +# ifdef HAVE_OPENSSL result = malloc(SHA_DIGEST_LENGTH); if (!result) return NULL; SHA1(data_base, data_length, result); if (sha1_length) *sha1_length = SHA_DIGEST_LENGTH; -# else +# else result = NULL; -# endif +# endif +# endif +#else + result = NULL; #endif return result; |
From: Enlightenment S. <no-...@en...> - 2009-07-08 15:02:18
|
Log: * eet: Reorder gcry init so that it's correctly taken into account by gcry. Author: cedric Date: 2009-07-08 07:43:20 -0700 (Wed, 08 Jul 2009) New Revision: 41279 Modified: trunk/eet/src/lib/eet_lib.c Modified: trunk/eet/src/lib/eet_lib.c =================================================================== --- trunk/eet/src/lib/eet_lib.c 2009-07-08 12:03:10 UTC (rev 41278) +++ trunk/eet/src/lib/eet_lib.c 2009-07-08 14:43:20 UTC (rev 41279) @@ -731,8 +731,6 @@ if (eet_initcount > 1) return eet_initcount; #ifdef HAVE_GNUTLS - if (gnutls_global_init()) - return --eet_initcount; /* Before the library can be used, it must initialize itself if needed. */ if (gcry_control (GCRYCTL_ANY_INITIALIZATION_P) == 0) { @@ -740,10 +738,7 @@ /* Disable warning messages about problems with the secure memory subsystem. This command should be run right after gcry_check_version. */ if (gcry_control(GCRYCTL_DISABLE_SECMEM_WARN)) - { - gnutls_global_deinit(); - return --eet_initcount; - } + return --eet_initcount; /* This command is used to allocate a pool of secure memory and thus enabling the use of secure memory. It also drops all extra privileges the process has (i.e. if it is run as setuid (root)). If the argument nbytes @@ -751,11 +746,10 @@ allocated is currently 16384 bytes; you may thus use a value of 1 to request that default size. */ if (gcry_control(GCRYCTL_INIT_SECMEM, 16384, 0)) - { - gnutls_global_deinit(); - return --eet_initcount; - } + return --eet_initcount; } + if (gnutls_global_init()) + return --eet_initcount; #endif #ifdef HAVE_OPENSSL ERR_load_crypto_strings(); |
From: Enlightenment S. <no-...@en...> - 2009-07-23 09:53:51
|
Log: * eet: Fix initialization for system that don't support SECMEN. Note that I don't like this solution, but I didn't see any better one. Author: cedric Date: 2009-07-23 02:53:44 -0700 (Thu, 23 Jul 2009) New Revision: 41481 Modified: trunk/eet/src/lib/eet_lib.c Modified: trunk/eet/src/lib/eet_lib.c =================================================================== --- trunk/eet/src/lib/eet_lib.c 2009-07-23 07:35:50 UTC (rev 41480) +++ trunk/eet/src/lib/eet_lib.c 2009-07-23 09:53:44 UTC (rev 41481) @@ -746,7 +746,7 @@ allocated is currently 16384 bytes; you may thus use a value of 1 to request that default size. */ if (gcry_control(GCRYCTL_INIT_SECMEM, 16384, 0)) - return --eet_initcount; + fprintf(stderr, "BIG FAT WARNING: I AM UNABLE TO REQUEST SECMEM, Cryptographic operation are at risk !"); } if (gnutls_global_init()) return --eet_initcount; |
From: Enlightenment S. <no-...@en...> - 2009-08-13 13:57:41
|
Log: * eet: Oops. Fix init order. Author: cedric Date: 2009-08-13 06:57:22 -0700 (Thu, 13 Aug 2009) New Revision: 41736 Modified: trunk/eet/src/lib/eet_data.c Modified: trunk/eet/src/lib/eet_data.c =================================================================== --- trunk/eet/src/lib/eet_data.c 2009-08-13 13:26:43 UTC (rev 41735) +++ trunk/eet/src/lib/eet_data.c 2009-08-13 13:57:22 UTC (rev 41736) @@ -1129,12 +1129,12 @@ if (!name) return NULL; + memset(&eddc, 0, sizeof (Eet_Data_Descriptor_Class)); + eddc.name = name; eddc.size = size; eddc.version = 0; - memset(&eddc, 0, sizeof (Eet_Data_Descriptor_Class)); - eddc.func.list_next = func_list_next; eddc.func.list_append = func_list_append; eddc.func.list_data = func_list_data; |
From: Enlightenment S. <no-...@en...> - 2009-09-15 11:22:33
|
Log: * eet: Use eina_log. Patch from Mathieu Taillefumier <mat...@fr...>. Author: cedric Date: 2009-09-15 04:22:11 -0700 (Tue, 15 Sep 2009) New Revision: 42492 Modified: trunk/eet/src/lib/Eet_private.h trunk/eet/src/lib/eet_cipher.c trunk/eet/src/lib/eet_data.c trunk/eet/src/lib/eet_lib.c Modified: trunk/eet/src/lib/Eet_private.h =================================================================== --- trunk/eet/src/lib/Eet_private.h 2009-09-15 10:58:35 UTC (rev 42491) +++ trunk/eet/src/lib/Eet_private.h 2009-09-15 11:22:11 UTC (rev 42492) @@ -70,6 +70,80 @@ } data; }; +/** + * variable and macros used for the eina_log module + */ +extern int _eet_log_dom_global; + +#ifdef EET_DEFAULT_MODULE_LOG_DOMAIN +#undef EET_DEFAULT_MODULE_LOG_DOMAIN _eet_log_dom_global +#endif + +/** + * the default module log domain is the eet log domain + */ + +#define EET_DEFAULT_MODULE_LOG_DOMAIN _eet_log_dom_global + +/* Macros that are used everywhere + * + * the first four macros are the general macros for the lib + */ +#ifdef EET_DEFAULT_LOG_COLOR +#undef EET_DEFAULT_LOG_COLOR +#endif +#define EET_DEFAULT_LOG_COLOR "\033[36m" +#ifdef ERROR +#undef ERROR +#endif +#define ERROR(...) EINA_LOG_DOM_ERR(_eet_log_dom_global, __VA_ARGS__) +#ifdef DEBUG +#undef DEBUG +#endif +#define DEBUG(...) EINA_LOG_DOM_DBG(_eet_log_dom_global, __VA_ARGS__) +#ifdef INFO +#undef INFO +#endif +#define INFO(...) EINA_LOG_DOM_INFO(_eet_log_dom_global, __VA_ARGS__) +#ifdef WARN +#undef WARN +#endif +#define WARN(...) EINA_LOG_DOM_WARN(_eet_log_dom_global, __VA_ARGS__) +#ifdef CRITICAL +#undef CRITICAL +#endif +#define CRITICAL(...) EINA_LOG_DOM_CRIT(_eet_log_dom_global, __VA_ARGS__) +/** + * macros that are used all around the code for message processing + * four macros are defined ERR, WRN, DGB, INF. + * EFREET_MODULE_LOG_DOM should be defined individually for each module + */ + +#ifdef _EET_MODULE_LOG_DOM +#undef _EET_MODULE_LOG_DOM +#endif +#define _EET_MODULE_LOG_DOM _eet_log_dom_global /*default log domain for each module. It can redefined inside each module */ +#ifdef ERR +#undef ERR +#endif +#define ERR(...) EINA_LOG_DOM_ERR(_EET_MODULE_LOG_DOM, __VA_ARGS__) +#ifdef DBG +#undef DBG +#endif +#define DBG(...) EINA_LOG_DOM_DBG(_EET_MODULE_LOG_DOM, __VA_ARGS__) +#ifdef INF +#undef INF +#endif +#define INF(...) EINA_LOG_DOM_INFO(_EET_MODULE_LOG_DOM, __VA_ARGS__) +#ifdef WRN +#undef WRN +#endif +#define WRN(...) EINA_LOG_DOM_WARN(_EET_MODULE_LOG_DOM, __VA_ARGS__) +#ifdef CRIT +#undef CRIT +#endif +#define CRIT(...) EINA_LOG_DOM_CRIT(_EET_MODULE_LOG_DOM, __VA_ARGS__) + Eet_Dictionary *eet_dictionary_add(void); void eet_dictionary_free(Eet_Dictionary *ed); int eet_dictionary_string_add(Eet_Dictionary *ed, const char *string); Modified: trunk/eet/src/lib/eet_cipher.c =================================================================== --- trunk/eet/src/lib/eet_cipher.c 2009-09-15 10:58:35 UTC (rev 42491) +++ trunk/eet/src/lib/eet_cipher.c 2009-09-15 11:22:11 UTC (rev 42492) @@ -272,7 +272,7 @@ goto on_error; if (!(res = malloc(size))) goto on_error; - fprintf(out, "Private Key:\n"); + INF("Private Key:\n"); buf[32] = '\0'; for (i = 0; i < 6; i++) @@ -284,11 +284,11 @@ } if (err) goto on_error; - fprintf(out, "\t%s:\n", names[i]); + INF("\t%s:\n", names[i]); for (j = 0; strlen(res) > j; j += 32) { snprintf(buf, 32, "%s", res + j); - fprintf(out, "\t\t%s\n", buf); + INF("\t\t%s\n", buf); } } free(res); @@ -297,9 +297,9 @@ if (key->certificate) { - fprintf(out, "Public certificate:\n"); + INF("Public certificate:\n"); if (gnutls_x509_crt_print(key->certificate, GNUTLS_X509_CRT_FULL, &data)) goto on_error; - fprintf(out, "%s", data.data); + INF("%s", data.data); gnutls_free(data.data); data.data = NULL; } @@ -318,29 +318,29 @@ rsa = EVP_PKEY_get1_RSA(key->private_key); if (rsa) { - fprintf(out, "Private key (RSA):\n"); + INF("Private key (RSA):\n"); RSA_print_fp(out, rsa, 0); } dsa = EVP_PKEY_get1_DSA(key->private_key); if (dsa) { - fprintf(out, "Private key (DSA):\n"); + INF("Private key (DSA):\n"); DSA_print_fp(out, dsa, 0); } dh = EVP_PKEY_get1_DH(key->private_key); if (dh) { - fprintf(out, "Private key (DH):\n"); + INF("Private key (DH):\n"); DHparams_print_fp(out, dh); } - fprintf(out, "Public certificate:\n"); + INF("Public certificate:\n"); X509_print_fp(out, key->certificate); # endif #else - fprintf(out, "You need to compile signature support in EET.\n"); + INF("You need to compile signature support in EET.\n"); #endif } @@ -682,7 +682,7 @@ #ifdef HAVE_SIGNATURE if (!certificate || !out || der_length <= 0) { - fprintf(out, "No certificate provided.\n"); + INFO("No certificate provided.\n"); return ; } # ifdef HAVE_GNUTLS @@ -699,8 +699,8 @@ datum.data = NULL; datum.size = 0; if (gnutls_x509_crt_print(cert, GNUTLS_X509_CRT_FULL, &datum)) goto on_error; - fprintf(out, "Public certificate :\n"); - fprintf(out, "%s", datum.data); + INF("Public certificate :\n"); + INF("%s", datum.data); on_error: if (datum.data) gnutls_free(datum.data); @@ -715,17 +715,17 @@ x509 = d2i_X509(NULL, &tmp, der_length); if (x509 == NULL) { - fprintf(out, "Not a valid certificate.\n"); + INF("Not a valid certificate.\n"); return ; } - fprintf(out, "Public certificate :\n"); + INF("Public certificate :\n"); X509_print_fp(out, x509); X509_free(x509); # endif #else - fprintf(out, "You need to compile signature support in EET.\n"); + INF("You need to compile signature support in EET.\n"); #endif } Modified: trunk/eet/src/lib/eet_data.c =================================================================== --- trunk/eet/src/lib/eet_data.c 2009-09-15 10:58:35 UTC (rev 42491) +++ trunk/eet/src/lib/eet_data.c 2009-09-15 11:22:11 UTC (rev 42492) @@ -2020,7 +2020,7 @@ else if (!strcmp(tok3, "hash")) n->type = EET_G_HASH; else { - printf("ERROR: group type '%s' invalid.\n", tok3); + ERR("ERROR: group type '%s' invalid.\n", tok3); } node = n; } @@ -2132,7 +2132,7 @@ } else { - printf("ERROR: value type '%s' invalid.\n", tok4); + ERR("ERROR: value type '%s' invalid.\n", tok4); } } } Modified: trunk/eet/src/lib/eet_lib.c =================================================================== --- trunk/eet/src/lib/eet_lib.c 2009-09-15 10:58:35 UTC (rev 42491) +++ trunk/eet/src/lib/eet_lib.c 2009-09-15 11:22:11 UTC (rev 42492) @@ -142,6 +142,7 @@ unsigned char ciphered : 1; }; + #if 0 /* Version 2 */ /* NB: all int's are stored in network byte order on disk */ @@ -223,6 +224,9 @@ static Eet_File **eet_readers = NULL; static int eet_initcount = 0; +/* log domain variable */ +int _eet_log_dom_global=-1; + /* Check to see its' an eet file pointer */ static inline int eet_check_pointer(const Eet_File *ef) @@ -315,7 +319,7 @@ new_cache = realloc(new_cache, new_cache_alloc * sizeof(Eet_File *)); if (!new_cache) { - fprintf(stderr, "BAD ERROR! Eet realloc of cache list failed. Abort\n"); + CRITICAL("BAD ERROR! Eet realloc of cache list failed. Abort\n"); abort(); } } @@ -360,7 +364,7 @@ new_cache = realloc(new_cache, new_cache_alloc * sizeof(Eet_File *)); if (!new_cache) { - fprintf(stderr, "BAD ERROR! Eet realloc of cache list failed. Abort\n"); + CRITICAL("BAD ERROR! Eet realloc of cache list failed. Abort\n"); abort(); } } @@ -758,17 +762,27 @@ if (!eina_init()) { + fprintf(stderr,"Eet: Eina init failed"); + goto erro_eet_eina_init; + } + _eet_log_dom_global = eina_log_domain_register("Eet",EET_DEFAULT_LOG_COLOR); + if(_eet_log_dom_global < 0) + { + fprintf(stderr,"Eet Can not create a general log domain"); + goto error_eet_eina_log; + } + return eet_initcount; + error_eet_eina_log: + eina_shutdown(); + erro_eet_eina_init: #ifdef HAVE_GNUTLS - gnutls_global_deinit(); + gnutls_global_deinit(); #endif #ifdef HAVE_OPENSSL - EVP_cleanup(); - ERR_free_strings(); + EVP_cleanup(); + ERR_free_strings(); #endif - return 0; - } - - return eet_initcount; + return 0; } EAPI int @@ -779,7 +793,7 @@ if (eet_initcount > 0) return eet_initcount; eet_clearcache(); - + eina_log_domain_unregister(_eet_log_dom_global); eina_shutdown(); #ifdef HAVE_GNUTLS gnutls_global_deinit(); @@ -1060,7 +1074,7 @@ if (eet_test_close(ef->x509_der == NULL, ef)) return NULL; #else - fprintf(stderr, "This file could be signed but you didn't compile the necessary code to check the signature.\n"); + ERROR("This file could be signed but you didn't compile the necessary code to check the signature.\n"); #endif } @@ -1078,7 +1092,7 @@ 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); + WARN("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 */ @@ -1205,7 +1219,7 @@ strncpy(efn->name, (char *)p + HEADER_SIZE, name_size); efn->name[name_size] = 0; - printf("File: %s is not up to date for key \"%s\" - needs rebuilding sometime\n", ef->path, efn->name); + WARN("File: %s is not up to date for key \"%s\" - needs rebuilding sometime\n", ef->path, efn->name); } else /* The only really usefull peace of code for efn->name (no backward compatibility) */ |
From: Enlightenment S. <no-...@en...> - 2009-09-15 14:48:54
|
Log: * eet_data: Remove unused freeleak. Author: cedric Date: 2009-09-15 07:48:42 -0700 (Tue, 15 Sep 2009) New Revision: 42495 Modified: trunk/eet/src/lib/eet_data.c Modified: trunk/eet/src/lib/eet_data.c =================================================================== --- trunk/eet/src/lib/eet_data.c 2009-09-15 13:34:12 UTC (rev 42494) +++ trunk/eet/src/lib/eet_data.c 2009-09-15 14:48:42 UTC (rev 42495) @@ -188,7 +188,6 @@ struct _Eet_Free_Context { Eet_Free freelist; - Eet_Free freeleak; Eet_Free freelist_list; Eet_Free freelist_hash; Eet_Free freelist_str; @@ -1389,29 +1388,6 @@ _eet_free_reset(&context->freelist); } -#define _eet_freeleak_add(Ctx, Data) _eet_free_add(&Ctx->freeleak, Data); -#define _eet_freeleak_reset(Ctx) _eet_free_reset(&Ctx->freeleak); -#define _eet_freeleak_ref(Ctx) _eet_free_ref(&Ctx->freeleak); -#define _eet_freeleak_unref(Ctx) _eet_free_unref(&Ctx->freeleak); - -static void -_eet_freeleak_free(Eet_Free_Context *context, Eet_Data_Descriptor *edd) -{ - int j; - int i; - - if (context->freeleak.ref > 0) return; - for (j = 0; j < 256; ++j) - for (i = 0; i < context->freeleak.num[j]; ++i) - { - if (edd) - edd->func.mem_free(context->freeleak.list[j][i]); - else - free(context->freeleak.list[j][i]); - } - _eet_free_reset(&context->freeleak); -} - #define _eet_freelist_list_add(Ctx, Data) _eet_free_add(&Ctx->freelist_list, Data); #define _eet_freelist_list_reset(Ctx) _eet_free_reset(&Ctx->freelist_list); #define _eet_freelist_list_ref(Ctx) _eet_free_ref(&Ctx->freelist_list); @@ -1506,7 +1482,6 @@ _eet_freelist_all_ref(Eet_Free_Context *freelist_context) { _eet_freelist_ref(freelist_context); - _eet_freeleak_ref(freelist_context); _eet_freelist_str_ref(freelist_context); _eet_freelist_list_ref(freelist_context); _eet_freelist_hash_ref(freelist_context); @@ -1517,7 +1492,6 @@ _eet_freelist_all_unref(Eet_Free_Context *freelist_context) { _eet_freelist_unref(freelist_context); - _eet_freeleak_unref(freelist_context); _eet_freelist_str_unref(freelist_context); _eet_freelist_list_unref(freelist_context); _eet_freelist_hash_unref(freelist_context); @@ -2358,12 +2332,10 @@ _eet_freelist_list_free(context, edd); _eet_freelist_hash_free(context, edd); _eet_freelist_free(context, edd); - _eet_freeleak_reset(context); } else { _eet_freelist_reset(context); - _eet_freeleak_free(context, edd); _eet_freelist_str_reset(context); _eet_freelist_list_reset(context); _eet_freelist_hash_reset(context); @@ -2390,7 +2362,6 @@ _eet_freelist_list_free(context, edd); _eet_freelist_hash_free(context, edd); _eet_freelist_free(context, edd); - _eet_freeleak_reset(context); if (dumpfunc) { if (dump) |