forked from enlightenment/efl
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
329 lines
8.6 KiB
329 lines
8.6 KiB
#ifndef _EET_PRIVATE_H |
|
#define _EET_PRIVATE_H |
|
|
|
#include <Eina.h> |
|
|
|
typedef enum _Eet_Convert_Type Eet_Convert_Type; |
|
|
|
enum _Eet_Convert_Type |
|
{ |
|
EET_D_NOTHING = 0, |
|
EET_D_FLOAT = 1 << 1, |
|
EET_D_DOUBLE = 1 << 2, |
|
EET_D_FIXED_POINT = 1 << 4 |
|
}; |
|
|
|
typedef struct _Eet_String Eet_String; |
|
typedef struct _Eet_Convert Eet_Convert; |
|
|
|
struct _Eet_Convert |
|
{ |
|
float f; |
|
double d; |
|
Eina_F32p32 fp; |
|
|
|
Eet_Convert_Type type; |
|
}; |
|
|
|
struct _Eet_String |
|
{ |
|
const char *str; |
|
|
|
int len; |
|
|
|
int next; |
|
int prev; |
|
|
|
unsigned char hash; |
|
unsigned char allocated : 1; |
|
}; |
|
struct _Eet_Dictionary |
|
{ |
|
Eet_String *all; |
|
Eina_Hash *converts; |
|
Eina_Lock mutex; |
|
|
|
int size; |
|
int offset; |
|
|
|
int hash[256]; |
|
|
|
int count; |
|
int total; |
|
|
|
const char *start; |
|
const char *end; |
|
}; |
|
|
|
struct _Eet_Node |
|
{ |
|
int type; |
|
int count; |
|
const char *name; |
|
const char *key; |
|
Eet_Node *values; |
|
Eet_Node *next; |
|
Eet_Node *parent; |
|
Eet_Node_Data data; |
|
}; |
|
|
|
typedef struct _Eet_File_Header Eet_File_Header; |
|
typedef struct _Eet_File_Node Eet_File_Node; |
|
typedef struct _Eet_File_Directory Eet_File_Directory; |
|
|
|
struct _Eet_File |
|
{ |
|
const char *path; |
|
Eina_File *readfp; |
|
Eet_File_Header *header; |
|
Eet_Dictionary *ed; |
|
Eet_Key *key; |
|
const unsigned char *data; |
|
const void *x509_der; |
|
const void *signature; |
|
void *sha1; |
|
|
|
Eet_File_Mode mode; |
|
|
|
int magic; |
|
int references; |
|
|
|
unsigned long int data_size; |
|
int x509_length; |
|
unsigned int signature_length; |
|
int sha1_length; |
|
|
|
Eina_Lock file_lock; |
|
|
|
unsigned char writes_pending : 1; |
|
unsigned char delete_me_now : 1; |
|
}; |
|
|
|
struct _Eet_File_Header |
|
{ |
|
int magic; |
|
Eet_File_Directory *directory; |
|
}; |
|
|
|
struct _Eet_File_Directory |
|
{ |
|
int size; |
|
Eet_File_Node **nodes; |
|
}; |
|
|
|
struct _Eet_File_Node |
|
{ |
|
char *name; |
|
void *data; |
|
Eet_File_Node *next; /* FIXME: make buckets linked lists */ |
|
|
|
unsigned long int offset; |
|
unsigned long int dictionary_offset; |
|
unsigned long int name_offset; |
|
|
|
unsigned int name_size; |
|
unsigned int size; |
|
unsigned int data_size; |
|
|
|
unsigned char compression_type; |
|
|
|
unsigned char free_name : 1; |
|
unsigned char compression : 1; |
|
unsigned char ciphered : 1; |
|
unsigned char alias : 1; |
|
}; |
|
|
|
#if 0 |
|
/* Version 2 */ |
|
/* NB: all int's are stored in network byte order on disk */ |
|
/* file format: */ |
|
int magic; /* magic number ie 0x1ee7ff00 */ |
|
int num_directory_entries; /* number of directory entries to follow */ |
|
int bytes_directory_entries; /* bytes of directory entries to follow */ |
|
struct |
|
{ |
|
int offset; /* bytes offset into file for data chunk */ |
|
int flags; /* flags - for now 0 = uncompressed and clear, 1 = compressed and clear, 2 = uncompressed and ciphered, 3 = compressed and ciphered */ |
|
int size; /* size of the data chunk */ |
|
int data_size; /* size of the (uncompressed) data chunk */ |
|
int name_size; /* length in bytes of the name field */ |
|
char name[name_size]; /* name string (variable length) and \0 terminated */ |
|
} directory[num_directory_entries]; |
|
/* and now startes the data stream... */ |
|
#endif /* if 0 */ |
|
|
|
#if 0 |
|
/* Version 3 */ |
|
/* NB: all int's are stored in network byte order on disk */ |
|
/* file format: */ |
|
int magic; /* magic number ie 0x1ee70f42 */ |
|
int num_directory_entries; /* number of directory entries to follow */ |
|
int num_dictionary_entries; /* number of dictionary entries to follow */ |
|
struct |
|
{ |
|
int data_offset; /* bytes offset into file for data chunk */ |
|
int size; /* size of the data chunk */ |
|
int data_size; /* size of the (uncompressed) data chunk */ |
|
int name_offset; /* bytes offset into file for name string */ |
|
int name_size; /* length in bytes of the name field */ |
|
int flags; /* bit flags - for now: |
|
bit 0 => compresion on/off |
|
bit 1 => ciphered on/off |
|
bit 2 => alias |
|
*/ |
|
} directory[num_directory_entries]; |
|
struct |
|
{ |
|
int hash; |
|
int offset; |
|
int size; |
|
int prev; |
|
int next; |
|
} dictionary[num_dictionary_entries]; |
|
/* now start the string stream. */ |
|
/* and right after them the data stream. */ |
|
int magic_sign; /* Optional, only if the eet file is signed. */ |
|
int signature_length; /* Signature length. */ |
|
int x509_length; /* Public certificate that signed the file. */ |
|
char signature[signature_length]; /* The signature. */ |
|
char x509[x509_length]; /* The public certificate. */ |
|
#endif /* if 0 */ |
|
|
|
/* |
|
* variable and macros used for the eina_log module |
|
*/ |
|
extern int _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 /* ifdef EET_DEFAULT_LOG_COLOR */ |
|
#define EET_DEFAULT_LOG_COLOR EINA_COLOR_CYAN |
|
#ifdef ERR |
|
# undef ERR |
|
#endif /* ifdef ERR */ |
|
#define ERR(...) EINA_LOG_DOM_ERR(_eet_log_dom_global, __VA_ARGS__) |
|
#ifdef DBG |
|
# undef DBG |
|
#endif /* ifdef DBG */ |
|
#define DBG(...) EINA_LOG_DOM_DBG(_eet_log_dom_global, __VA_ARGS__) |
|
#ifdef INF |
|
# undef INF |
|
#endif /* ifdef INF */ |
|
#define INF(...) EINA_LOG_DOM_INFO(_eet_log_dom_global, __VA_ARGS__) |
|
#ifdef WRN |
|
# undef WRN |
|
#endif /* ifdef WRN */ |
|
#define WRN(...) EINA_LOG_DOM_WARN(_eet_log_dom_global, __VA_ARGS__) |
|
#ifdef CRIT |
|
# undef CRIT |
|
#endif /* ifdef CRIT */ |
|
#define CRIT(...) EINA_LOG_DOM_CRIT(_eet_log_dom_global, __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); |
|
int |
|
eet_dictionary_string_get_size(const Eet_Dictionary *ed, |
|
int index); |
|
const char * |
|
eet_dictionary_string_get_char(const Eet_Dictionary *ed, |
|
int index); |
|
Eina_Bool |
|
eet_dictionary_string_get_float(const Eet_Dictionary *ed, |
|
int index, |
|
float *result); |
|
Eina_Bool |
|
eet_dictionary_string_get_double(const Eet_Dictionary *ed, |
|
int index, |
|
double *result); |
|
Eina_Bool |
|
eet_dictionary_string_get_fp(const Eet_Dictionary *ed, |
|
int index, |
|
Eina_F32p32 *result); |
|
int |
|
eet_dictionary_string_get_hash(const Eet_Dictionary *ed, |
|
int index); |
|
|
|
int _eet_hash_gen(const char *key, |
|
int hash_size); |
|
|
|
const void * |
|
eet_identity_check(const void *data_base, |
|
unsigned int data_length, |
|
void **sha1, |
|
int *sha1_length, |
|
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); |
|
void |
|
eet_identity_unref(Eet_Key *key); |
|
void |
|
eet_identity_ref(Eet_Key *key); |
|
|
|
void |
|
eet_node_shutdown(void); |
|
int |
|
eet_node_init(void); |
|
Eet_Node * |
|
eet_node_new(void); |
|
void |
|
eet_node_free(Eet_Node *node); |
|
|
|
|
|
#define GENERIC_ALLOC_FREE_HEADER(TYPE, Type) \ |
|
TYPE *Type##_malloc(unsigned int); \ |
|
TYPE *Type##_calloc(unsigned int); \ |
|
void Type##_mp_free(TYPE *e); |
|
|
|
GENERIC_ALLOC_FREE_HEADER(Eet_File_Directory, eet_file_directory); |
|
GENERIC_ALLOC_FREE_HEADER(Eet_File_Node, eet_file_node); |
|
GENERIC_ALLOC_FREE_HEADER(Eet_File_Header, eet_file_header); |
|
GENERIC_ALLOC_FREE_HEADER(Eet_Dictionary, eet_dictionary); |
|
GENERIC_ALLOC_FREE_HEADER(Eet_File, eet_file); |
|
|
|
Eina_Bool eet_mempool_init(void); |
|
void eet_mempool_shutdown(void); |
|
|
|
#ifndef PATH_MAX |
|
# define PATH_MAX 4096 |
|
#endif /* ifndef PATH_MAX */ |
|
|
|
#ifdef DNDEBUG |
|
# define EET_ASSERT(Test, Do) if (Test == 0) {Do; } |
|
#else /* ifdef DNDEBUG */ |
|
# define EET_ASSERT(Test, Do) if (Test == 0) {abort(); } |
|
#endif /* ifdef DNDEBUG */ |
|
|
|
#endif /* ifndef _EET_PRIVATE_H */
|
|
|