From 374d09d00b7ac071a9f985f9f5721a1fc4a8032d Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Fri, 22 Apr 2005 04:25:51 +0000 Subject: [PATCH] shorne's cleanups SVN revision: 14288 --- src/bin/e_font.c | 105 ++++++------ src/bin/e_font.h | 8 +- src/bin/e_ipc.c | 356 ++++++++++++++++++++-------------------- src/bin/e_remote_main.c | 191 ++++++++++----------- 4 files changed, 333 insertions(+), 327 deletions(-) diff --git a/src/bin/e_font.c b/src/bin/e_font.c index 53debbb84..4860ef15b 100644 --- a/src/bin/e_font.c +++ b/src/bin/e_font.c @@ -8,17 +8,12 @@ * - use e_path to search for available fonts */ -static Evas_List *_e_font_defaults = NULL; /* MRU */ -static Evas_List *_e_font_fallbacks = NULL; /* */ - static Evas_List *_e_font_font_dir_available_get (Evas_List * available_fonts, const char *font_dir); int e_font_init(void) { - /* just get the pointers into the config */ - _e_font_defaults = e_config->font_defaults; - _e_font_fallbacks = e_config->font_fallbacks; + /* all init stuff is in e_config */ return 1; } @@ -38,7 +33,7 @@ e_font_apply(void) E_Font_Default *efd; /* setup edje fallback list */ - next = _e_font_fallbacks; + next = e_config->font_fallbacks; if (next) { eff = evas_list_data(next); @@ -62,12 +57,10 @@ e_font_apply(void) edje_fontset_append_set(buf); /* setup edje text classes */ - next = _e_font_defaults; - while (next) + for(next = e_config->font_defaults; next; next = evas_list_next(next)) { efd = evas_list_data(next); edje_text_class_set(efd->text_class, efd->font, efd->size); - next = evas_list_next(next); } } @@ -86,32 +79,30 @@ e_font_available_list(void) void e_font_available_list_free(Evas_List * available) { - char *font_name; - Evas_List *l; + E_Font_Available *efa; - for (l = available; l; l = l->next) + while(available) { - font_name = evas_list_data(l); - available = evas_list_remove(available, l); - free(font_name); + efa = available->data; + available = evas_list_remove_list(available, available); + E_FREE(efa->name); + E_FREE(efa); } } void e_font_fallback_clear(void) { - Evas_List *next; + E_Font_Fallback *eff; - next = _e_font_fallbacks; - while (next) - { - E_Font_Fallback *eff; - - eff = evas_list_data(next); - _e_font_fallbacks = evas_list_remove_list(_e_font_fallbacks, next); + while(e_config->font_fallbacks) + { + eff = e_config->font_fallbacks->data; + e_config->font_fallbacks = evas_list_remove_list( + e_config->font_fallbacks, + e_config->font_fallbacks); E_FREE(eff->name); E_FREE(eff); - next = evas_list_next(next); } } @@ -124,7 +115,7 @@ e_font_fallback_append(const char *font) eff = E_NEW(E_Font_Fallback, 1); eff->name = strdup(font); - _e_font_fallbacks = evas_list_append(_e_font_fallbacks, eff); + e_config->font_fallbacks = evas_list_append(e_config->font_fallbacks, eff); } void @@ -136,35 +127,34 @@ e_font_fallback_prepend(const char *font) eff = E_NEW(E_Font_Fallback, 1); eff->name = strdup(font); - _e_font_fallbacks = evas_list_prepend(_e_font_fallbacks, eff); + e_config->font_fallbacks = evas_list_prepend(e_config->font_fallbacks, eff); } void e_font_fallback_remove(const char *font) { Evas_List *next; - - next = _e_font_fallbacks; - while (next) + + for(next = e_config->font_fallbacks; next; next = evas_list_next(next)) { E_Font_Fallback *eff; eff = evas_list_data(next); if (!strcmp(eff->name, font)) { - _e_font_fallbacks = evas_list_remove_list(_e_font_fallbacks, next); + e_config->font_fallbacks = evas_list_remove_list( + e_config->font_fallbacks, next); E_FREE(eff->name); E_FREE(eff); break; } - next = evas_list_next(next); } } Evas_List * e_font_fallback_list(void) { - return _e_font_fallbacks; + return e_config->font_fallbacks; } void @@ -174,8 +164,7 @@ e_font_default_set(const char *text_class, const char *font, int size) Evas_List *next; /* search for the text class */ - next = _e_font_defaults; - while (next) + for(next = e_config->font_defaults; next; next = evas_list_next(next)) { efd = evas_list_data(next); if (!strcmp(efd->text_class, text_class)) @@ -184,11 +173,12 @@ e_font_default_set(const char *text_class, const char *font, int size) efd->font = strdup(font); efd->size = size; /* move to the front of the list */ - _e_font_defaults = evas_list_remove_list(_e_font_defaults, next); - _e_font_defaults = evas_list_prepend(_e_font_defaults, efd); + e_config->font_defaults = evas_list_remove_list( + e_config->font_defaults, next); + e_config->font_defaults = evas_list_prepend( + e_config->font_defaults, efd); return; } - next = evas_list_next(next); } /* the text class doesnt exist */ @@ -197,7 +187,7 @@ e_font_default_set(const char *text_class, const char *font, int size) efd->font = strdup(font); efd->size = size; - _e_font_defaults = evas_list_prepend(_e_font_defaults, efd); + e_config->font_defaults = evas_list_prepend(e_config->font_defaults, efd); } /* @@ -210,18 +200,18 @@ e_font_default_get(const char *text_class) Evas_List *next; /* search for the text class */ - next = _e_font_defaults; - while (next) + for(next = e_config->font_defaults; next; next = evas_list_next(next)) { efd = evas_list_data(next); if (!strcmp(efd->text_class, text_class)) { /* move to the front of the list */ - _e_font_defaults = evas_list_remove_list(_e_font_defaults, next); - _e_font_defaults = evas_list_prepend(_e_font_defaults, efd); + e_config->font_defaults = evas_list_remove_list( + e_config->font_defaults, next); + e_config->font_defaults = evas_list_prepend( + e_config->font_defaults, efd); return efd; } - next = evas_list_next(next); } return NULL; } @@ -233,26 +223,25 @@ e_font_default_remove(const char *text_class) Evas_List *next; /* search for the text class */ - next = _e_font_defaults; - while (next) + for(next = e_config->font_defaults; next; next = evas_list_next(next)) { efd = evas_list_data(next); if (!strcmp(efd->text_class, text_class)) { - _e_font_defaults = evas_list_remove_list(_e_font_defaults, next); + e_config->font_defaults = evas_list_remove_list( + e_config->font_defaults, next); E_FREE(efd->text_class); E_FREE(efd->font); E_FREE(efd); return; } - next = evas_list_next(next); } } Evas_List * e_font_default_list(void) { - return _e_font_defaults; + return e_config->font_defaults; } static Evas_List * @@ -271,19 +260,25 @@ _e_font_font_dir_available_get(Evas_List * available_fonts, const char *font_dir /* read font alias lines */ while (fscanf(f, "%4090s %[^\n]\n", fname, fdef) == 2) { + E_Font_Available *efa; + /* skip comments */ if ((fdef[0] == '!') || (fdef[0] == '#')) continue; /* skip duplicates */ - next = available_fonts; - while (next) + + for (next = available_fonts; next; next = evas_list_next(next)) { - if (!strcmp((char *)evas_list_data(next), fname)) - continue; - next = evas_list_next(next); + efa = (E_Font_Available *)evas_list_data(next); + + if (!strcmp(efa->name, fname)) + continue; } - available_fonts = evas_list_append(available_fonts, strdup(fname)); + + efa = malloc(sizeof(E_Font_Available)); + efa->name = strdup(fname); + available_fonts = evas_list_append(available_fonts, efa); } fclose (f); } diff --git a/src/bin/e_font.h b/src/bin/e_font.h index 435c256d5..64eaffbda 100644 --- a/src/bin/e_font.h +++ b/src/bin/e_font.h @@ -5,6 +5,7 @@ typedef struct _E_Font_Default E_Font_Default; typedef struct _E_Font_Fallback E_Font_Fallback; +typedef struct _E_Font_Fallback E_Font_Available; #else #ifndef E_FONT_H @@ -14,7 +15,7 @@ struct _E_Font_Default { char * text_class; char * font; - int size; + int size; }; struct _E_Font_Fallback @@ -22,6 +23,11 @@ struct _E_Font_Fallback char * name; }; +struct _E_Font_Available +{ + char * name; +}; + EAPI int e_font_init(void); EAPI int e_font_shutdown(void); EAPI void e_font_apply(void); diff --git a/src/bin/e_ipc.c b/src/bin/e_ipc.c index 253f8a77d..d0b11803e 100644 --- a/src/bin/e_ipc.c +++ b/src/bin/e_ipc.c @@ -5,6 +5,15 @@ static int _e_ipc_cb_client_add(void *data, int type, void *event); static int _e_ipc_cb_client_del(void *data, int type, void *event); static int _e_ipc_cb_client_data(void *data, int type, void *event); static char *_e_ipc_path_str_get(char **paths, int *bytes); +static char *_e_ipc_simple_str_dec(char *data, int bytes); +static char **_e_ipc_multi_str_dec(char *data, int bytes, int str_count); + +/* encode functions, Should these be global? */ +ECORE_IPC_ENC_EVAS_LIST_PROTO(_e_ipc_module_list_enc); +ECORE_IPC_ENC_EVAS_LIST_PROTO(_e_ipc_font_available_list_enc); +ECORE_IPC_ENC_EVAS_LIST_PROTO(_e_ipc_font_fallback_list_enc); +ECORE_IPC_ENC_EVAS_LIST_PROTO(_e_ipc_font_default_list_enc); +ECORE_IPC_ENC_STRUCT_PROTO(_e_ipc_font_default_enc); /* local subsystem globals */ static Ecore_Ipc_Server *_e_ipc_server = NULL; @@ -76,9 +85,8 @@ _e_ipc_cb_client_data(void *data __UNUSED__, int type __UNUSED__, void *event) { char *name; - name = malloc(e->size + 1); - name[e->size] = 0; - memcpy(name, e->data, e->size); + name = _e_ipc_simple_str_dec(e->data, e->size); + if (!e_module_find(name)) { e_module_new(name); @@ -92,9 +100,8 @@ _e_ipc_cb_client_data(void *data __UNUSED__, int type __UNUSED__, void *event) char *name; E_Module *m; - name = malloc(e->size + 1); - name[e->size] = 0; - memcpy(name, e->data, e->size); + name = _e_ipc_simple_str_dec(e->data, e->size); + if ((m = e_module_find(name))) { if (e_module_enabled_get(m)) @@ -109,9 +116,8 @@ _e_ipc_cb_client_data(void *data __UNUSED__, int type __UNUSED__, void *event) char *name; E_Module *m; - name = malloc(e->size + 1); - name[e->size] = 0; - memcpy(name, e->data, e->size); + name = _e_ipc_simple_str_dec(e->data, e->size); + if ((m = e_module_find(name))) { if (!e_module_enabled_get(m)) @@ -121,13 +127,12 @@ _e_ipc_cb_client_data(void *data __UNUSED__, int type __UNUSED__, void *event) } break; case E_IPC_OP_MODULE_DISABLE: - { + { char *name; E_Module *m; - name = malloc(e->size + 1); - name[e->size] = 0; - memcpy(name, e->data, e->size); + name = _e_ipc_simple_str_dec(e->data, e->size); + if ((m = e_module_find(name))) { if (e_module_enabled_get(m)) @@ -138,30 +143,15 @@ _e_ipc_cb_client_data(void *data __UNUSED__, int type __UNUSED__, void *event) break; case E_IPC_OP_MODULE_LIST: { - Evas_List *modules, *l; + /* encode module list (str,8-bit) */ + Evas_List *modules; + char * data; int bytes; - E_Module *m; - char *data, *p; - - bytes = 0; - modules = e_module_list(); - for (l = modules; l; l = l->next) - { - m = l->data; - bytes += strlen(m->name) + 1 + 1; - } - data = malloc(bytes); - p = data; - for (l = modules; l; l = l->next) - { - m = l->data; - strcpy(p, m->name); - p += strlen(m->name); - *p = 0; - p++; - *p = e_module_enabled_get(m); - p++; - } + + modules = e_module_list(); + data = _e_ipc_module_list_enc(modules, &bytes); + + /* send reply data */ ecore_ipc_client_send(e->client, E_IPC_DOMAIN_REPLY, E_IPC_OP_MODULE_LIST_REPLY, @@ -194,10 +184,9 @@ _e_ipc_cb_client_data(void *data __UNUSED__, int type __UNUSED__, void *event) { char *file; Evas_List *managers, *l; + + file = _e_ipc_simple_str_dec(e->data, e->size); - file = malloc(e->size + 1); - file[e->size] = 0; - memcpy(file, e->data, e->size); E_FREE(e_config->desktop_default_background); e_config->desktop_default_background = file; @@ -236,29 +225,13 @@ _e_ipc_cb_client_data(void *data __UNUSED__, int type __UNUSED__, void *event) break; case E_IPC_OP_FONT_AVAILABLE_LIST: { - Evas_List *fonts_available, *l; + /* encode font available list (str) */ + Evas_List *fonts_available; int bytes; - char *font_name, *data, *p; + char *data; - bytes = 0; - fonts_available = e_font_available_list(); - printf("ipc font av: %d\n", fonts_available); - for (l = fonts_available; l; l = l->next) - { - font_name = evas_list_data(l); - bytes += strlen(font_name) + 1; - } - - data = malloc(bytes); - p = data; - for (l = fonts_available; l; l = l->next) - { - font_name = evas_list_data(l); - strcpy(p, font_name); - p += strlen(font_name); - *p = 0; - p++; - } + fonts_available = e_font_available_list(); + data = _e_ipc_font_available_list_enc(fonts_available, &bytes); ecore_ipc_client_send(e->client, E_IPC_DOMAIN_REPLY, E_IPC_OP_FONT_AVAILABLE_LIST_REPLY, @@ -282,9 +255,8 @@ _e_ipc_cb_client_data(void *data __UNUSED__, int type __UNUSED__, void *event) case E_IPC_OP_FONT_FALLBACK_APPEND: { char * font_name; - font_name = malloc(e->size + 1); - font_name[e->size] = 0; - memcpy(font_name, e->data, e->size); + + font_name = _e_ipc_simple_str_dec(e->data, e->size); e_font_fallback_append(font_name); free(font_name); @@ -294,9 +266,8 @@ _e_ipc_cb_client_data(void *data __UNUSED__, int type __UNUSED__, void *event) case E_IPC_OP_FONT_FALLBACK_PREPEND: { char * font_name; - font_name = malloc(e->size + 1); - font_name[e->size] = 0; - memcpy(font_name, e->data, e->size); + + font_name = _e_ipc_simple_str_dec(e->data, e->size); e_font_fallback_prepend(font_name); free(font_name); @@ -305,28 +276,15 @@ _e_ipc_cb_client_data(void *data __UNUSED__, int type __UNUSED__, void *event) break; case E_IPC_OP_FONT_FALLBACK_LIST: { - Evas_List *fallbacks, *l; + + /* encode font fallback list (str) */ + Evas_List *fallbacks; int bytes; - E_Font_Fallback *eff; - char *data, *p; - - bytes = 0; + char *data; + fallbacks = e_font_fallback_list(); - for (l = fallbacks; l; l = l->next) - { - eff = evas_list_data(l); - bytes += strlen(eff->name) + 1; - } - data = malloc(bytes); - p = data; - for (l = fallbacks; l; l = l->next) - { - eff = evas_list_data(l); - strcpy(p, eff->name); - p += strlen(eff->name); - *p = 0; - p++; - } + + data = _e_ipc_font_fallback_list_enc(fallbacks, &bytes); ecore_ipc_client_send(e->client, E_IPC_DOMAIN_REPLY, E_IPC_OP_FONT_FALLBACK_LIST_REPLY, @@ -339,9 +297,8 @@ _e_ipc_cb_client_data(void *data __UNUSED__, int type __UNUSED__, void *event) case E_IPC_OP_FONT_FALLBACK_REMOVE: { char * font_name; - font_name = malloc(e->size + 1); - font_name[e->size] = 0; - memcpy(font_name, e->data, e->size); + + font_name = _e_ipc_simple_str_dec(e->data, e->size); e_font_fallback_remove(font_name); free(font_name); @@ -350,75 +307,30 @@ _e_ipc_cb_client_data(void *data __UNUSED__, int type __UNUSED__, void *event) break; case E_IPC_OP_FONT_DEFAULT_SET: { - char * p; - char * font_name; - char * text_class; - int font_size; - + char ** argv; + int i, argc; - p = e->data; + argc = 3; + + argv = _e_ipc_multi_str_dec(e->data, e->size, argc); + e_font_default_set(argv[0], argv[1], atoi(argv[2])); + free(argv); - /* Make sure our data is packed for us 00 */ - if( p[e->size - 1] != 0) { - break; - } - - text_class = strdup(p); - - p += strlen(text_class) + 1; - font_name = strdup(p); - - p += strlen(font_name) + 1; - font_size = atoi(p); - - e_font_default_set(text_class, font_name, font_size); - - free(font_name); - free(text_class); - e_config_save_queue(); } break; case E_IPC_OP_FONT_DEFAULT_GET: { - int bytes; + + /* encode font default struct (str,str,32-bits)(E_Font_Default) */ E_Font_Default *efd; - char *data, *p, *text_class; - - text_class = malloc(e->size + 1); - text_class[e->size] = 0; - memcpy(text_class, e->data, e->size); - - efd = e_font_default_get (text_class); + char *data, *text_class; + int bytes; + text_class = _e_ipc_simple_str_dec(e->data, e->size); + efd = e_font_default_get (text_class); free(text_class); - - bytes = 0; - if (efd) { - bytes += strlen(efd->text_class) + 1; - bytes += strlen(efd->font) + 1; - bytes++; /* efd->size */ - } - - data = malloc(bytes); - p = data; - - if (efd) { - strcpy(p, efd->text_class); - p += strlen(efd->text_class); - *p = 0; - p++; - - strcpy(p, efd->font); - p += strlen(efd->font); - *p = 0; - p++; - - /* FIXME: should this be packed like this (int to char) ? */ - *p = (char) efd->size; - p++; - } - + data = _e_ipc_font_default_enc(efd, &bytes); ecore_ipc_client_send(e->client, E_IPC_DOMAIN_REPLY, E_IPC_OP_FONT_DEFAULT_GET_REPLY, @@ -430,9 +342,8 @@ _e_ipc_cb_client_data(void *data __UNUSED__, int type __UNUSED__, void *event) case E_IPC_OP_FONT_DEFAULT_REMOVE: { char * text_class; - text_class = malloc(e->size + 1); - text_class[e->size] = 0; - memcpy(text_class, e->data, e->size); + + text_class = _e_ipc_simple_str_dec(e->data, e->size); e_font_default_remove(text_class); free(text_class); @@ -441,37 +352,13 @@ _e_ipc_cb_client_data(void *data __UNUSED__, int type __UNUSED__, void *event) break; case E_IPC_OP_FONT_DEFAULT_LIST: { - Evas_List *defaults, *l; + /* encode font default struct list (str,str,32-bits)(E_Font_Default) */ + Evas_List *defaults; int bytes; - E_Font_Default *efd; - char *data, *p; + char *data; - bytes = 0; defaults = e_font_default_list(); - for (l = defaults; l; l = l->next) - { - efd = l->data; - bytes += strlen(efd->text_class) + 1; - bytes += strlen(efd->font) + 1; - bytes++; /* efd->size */ - } - data = malloc(bytes); - p = data; - for (l =defaults; l; l = l->next) - { - efd = l->data; - strcpy(p, efd->text_class); - p += strlen(efd->text_class); - *p = 0; - p++; - strcpy(p, efd->font); - p += strlen(efd->font); - *p = 0; - p++; - /* FIXME: should this be packed like this (int to char) ? */ - *p = (char) efd->size; - p++; - } + data = _e_ipc_font_default_list_enc(defaults, &bytes); ecore_ipc_client_send(e->client, E_IPC_DOMAIN_REPLY, E_IPC_OP_FONT_DEFAULT_LIST_REPLY, @@ -557,4 +444,115 @@ _e_ipc_path_str_get(char **paths, int *bytes) return data; } +/** + * Decode a simple string that was passed by an IPC client + * + * The returned string must be freed + */ +static char * +_e_ipc_simple_str_dec(char *data, int bytes) +{ + char *str; + + str = malloc(bytes + 1); + str[bytes] = 0; + memcpy(str, data, bytes); + + return str; +} +/** + * Decode a list of strings and return an array, you need to pass + * the string count that you are expecting back. + * + * Strings are encoded 00... + * + * free up the array that you get back + */ +static char ** +_e_ipc_multi_str_dec(char *data, int bytes, int str_count) +{ + char ** str_array; + int i; + + /* Make sure our data is packed for us 00 */ + if( data[bytes - 1] != 0) { + return NULL; + } + + str_array = malloc(sizeof(char *)*str_count); + + for(i = 0; i < str_count; i++) + { + str_array[i] = data; + data += strlen(str_array[i]) + 1; + } + + return str_array; +} + + +/* list/struct encoding functions */ +ECORE_IPC_ENC_EVAS_LIST_PROTO(_e_ipc_module_list_enc) +{ + ECORE_IPC_ENC_EVAS_LIST_HEAD_START(E_Module); + ECORE_IPC_CNTS(name); + ECORE_IPC_CNT8(); + ECORE_IPC_ENC_EVAS_LIST_HEAD_FINISH(); + int l1; + ECORE_IPC_SLEN(l1, name); + ECORE_IPC_PUTS(name, l1); + ECORE_IPC_PUT8(enabled); + ECORE_IPC_ENC_EVAS_LIST_FOOT(); +} + +ECORE_IPC_ENC_EVAS_LIST_PROTO(_e_ipc_font_available_list_enc) +{ + ECORE_IPC_ENC_EVAS_LIST_HEAD_START(E_Font_Available); + ECORE_IPC_CNTS(name); + ECORE_IPC_ENC_EVAS_LIST_HEAD_FINISH(); + int l1; + ECORE_IPC_SLEN(l1, name); + ECORE_IPC_PUTS(name, l1); + ECORE_IPC_ENC_EVAS_LIST_FOOT(); +} + +ECORE_IPC_ENC_EVAS_LIST_PROTO(_e_ipc_font_fallback_list_enc) +{ + ECORE_IPC_ENC_EVAS_LIST_HEAD_START(E_Font_Fallback); + ECORE_IPC_CNTS(name); + ECORE_IPC_ENC_EVAS_LIST_HEAD_FINISH(); + int l1; + ECORE_IPC_SLEN(l1, name); + ECORE_IPC_PUTS(name, l1); + ECORE_IPC_ENC_EVAS_LIST_FOOT(); +} + +ECORE_IPC_ENC_EVAS_LIST_PROTO(_e_ipc_font_default_list_enc) +{ + ECORE_IPC_ENC_EVAS_LIST_HEAD_START(E_Font_Default); + ECORE_IPC_CNTS(text_class); + ECORE_IPC_CNTS(font); + ECORE_IPC_CNT32(); + ECORE_IPC_ENC_EVAS_LIST_HEAD_FINISH(); + int l1, l2; + ECORE_IPC_SLEN(l1, text_class); + ECORE_IPC_SLEN(l2, font); + ECORE_IPC_PUTS(text_class, l1); + ECORE_IPC_PUTS(font, l2); + ECORE_IPC_PUT32(size); + ECORE_IPC_ENC_EVAS_LIST_FOOT(); +} + +ECORE_IPC_ENC_STRUCT_PROTO(_e_ipc_font_default_enc) +{ + int l1, l2; + ECORE_IPC_ENC_STRUCT_HEAD(E_Font_Default, + ECORE_IPC_SLEN(l1, text_class) + + ECORE_IPC_SLEN(l2, font) + + 4); + ECORE_IPC_PUTS(text_class, l1); + ECORE_IPC_PUTS(font, l2); + ECORE_IPC_PUT32(size); + ECORE_IPC_ENC_STRUCT_FOOT(); +} diff --git a/src/bin/e_remote_main.c b/src/bin/e_remote_main.c index a2c88b614..d27505a5e 100644 --- a/src/bin/e_remote_main.c +++ b/src/bin/e_remote_main.c @@ -27,6 +27,12 @@ static int _e_ipc_cb_server_data(void *data, int type, void *event); static void _e_help(void); +ECORE_IPC_DEC_EVAS_LIST_PROTO(_e_ipc_module_list_dec); +ECORE_IPC_DEC_EVAS_LIST_PROTO(_e_ipc_font_available_list_dec); +ECORE_IPC_DEC_EVAS_LIST_PROTO(_e_ipc_font_fallback_list_dec); +ECORE_IPC_DEC_EVAS_LIST_PROTO(_e_ipc_font_default_list_dec); +ECORE_IPC_DEC_STRUCT_PROTO(_e_ipc_font_default_dec); + /* local subsystem globals */ static Ecore_Ipc_Server *_e_ipc_server = NULL; static const char *display_name = NULL; @@ -316,33 +322,23 @@ _e_ipc_cb_server_data(void *data, int type, void *event) case E_IPC_OP_MODULE_LIST_REPLY: if (e->data) { - char *p; + Evas_List *modules; + E_Module *m; - p = e->data; - while (p < (char *)(e->data + e->size)) + modules = _e_ipc_module_list_dec(e->data, e->size); + while(modules) { - char *name; - char enabled; - - name = p; - p += strlen(name); - if (p < (char *)(e->data + e->size)) - { - p++; - if (p < (char *)(e->data + e->size)) - { - enabled = *p; - p++; - printf("REPLY: MODULE NAME=\"%s\" ENABLED=%i\n", - name, (int)enabled); - } - } + m = modules->data; + printf("REPLY: MODULE NAME=\"%s\" ENABLED=%i\n", + m->name, m->enabled); + modules = evas_list_remove_list(modules, modules); + E_FREE(m); } } else printf("REPLY: MODULE NONE\n"); break; - case E_IPC_OP_MODULE_DIRS_LIST_REPLY: + case E_IPC_OP_MODULE_DIRS_LIST_REPLY: if (e->data) { char *p; @@ -366,7 +362,7 @@ _e_ipc_cb_server_data(void *data, int type, void *event) break; case E_IPC_OP_BG_DIRS_LIST_REPLY: if (e->data) - { + { char *p; p = e->data; @@ -383,21 +379,17 @@ _e_ipc_cb_server_data(void *data, int type, void *event) case E_IPC_OP_FONT_FALLBACK_LIST_REPLY: if (e->data) { - char *p; + Evas_List *fallbacks; + E_Font_Fallback *eff; - p = e->data; - while (p < (char *)(e->data + e->size)) - { - char *name; - - name = p; - p += strlen(name); - if (p < (char *)(e->data + e->size)) - { - printf("REPLY: FALLBACK NAME=\"%s\"\n", name); - } - p++; - } + fallbacks = _e_ipc_font_fallback_list_dec(e->data, e->size); + while(fallbacks) + { + eff = fallbacks->data; + printf("REPLY: FALLBACK NAME=\"%s\"\n", eff->name); + fallbacks = evas_list_remove_list(fallbacks, fallbacks); + E_FREE(eff); + } } else printf("REPLY: FALLBACK NONE\n"); @@ -405,20 +397,17 @@ _e_ipc_cb_server_data(void *data, int type, void *event) case E_IPC_OP_FONT_AVAILABLE_LIST_REPLY: if (e->data) { - char *p; - - p = e->data; - while (p < (char *)(e->data + e->size)) - { - char *name; - name = p; - p += strlen(name); - if (p < (char *)(e->data + e->size)) - { - printf("REPLY: AVAILABLE NAME=\"%s\"\n", name); - } - p++; - } + Evas_List *available; + E_Font_Available *fa; + + available = _e_ipc_font_available_list_dec(e->data, e->size); + while(available) + { + fa = available->data; + printf("REPLY: AVAILABLE NAME=\"%s\"\n", fa->name); + available = evas_list_remove_list(available, available); + E_FREE(fa); + } } else printf("REPLY: AVAILABLE NONE\n"); @@ -426,27 +415,10 @@ _e_ipc_cb_server_data(void *data, int type, void *event) case E_IPC_OP_FONT_DEFAULT_GET_REPLY: if (e->data) { - char *text_class, *name; - char *p; - char size; - - p = e->data; - - text_class = p; - p += strlen(text_class) + 1; - if (p < (char *)(e->data + e->size)) - { - name = p; - p += strlen(name) + 1; - if (p < (char *)(e->data + e->size)) - { - size = *p; - printf("REPLY: DEFAULT TEXT_CLASS=\"%s\" NAME=\"%s\" SIZE=%i\n", - text_class, name, (int)size); - p++; - - } - } + E_Font_Default efd; + _e_ipc_font_default_dec(e->data, e->size, &efd); + printf("REPLY: DEFAULT TEXT_CLASS=\"%s\" NAME=\"%s\" SIZE=%d\n", + efd.text_class, efd.font, efd.size); } else printf("REPLY: DEFAULT NONE\n"); @@ -454,29 +426,18 @@ _e_ipc_cb_server_data(void *data, int type, void *event) case E_IPC_OP_FONT_DEFAULT_LIST_REPLY: if (e->data) { - char *text_class, *name; - char *p; - char size; - - p = e->data; - - while (p < (char *)(e->data + e->size)) - { - text_class = p; - p += strlen(text_class) + 1; - if (p < (char *)(e->data + e->size)) - { - name = p; - p += strlen(name) + 1; - if (p < (char *)(e->data + e->size)) - { - size = *p; - printf("REPLY: DEFAULT TEXT_CLASS=\"%s\" NAME=\"%s\" SIZE=%i\n", - text_class, name, (int)size); - p++; - } + Evas_List *defaults; + E_Font_Default *efd; + + defaults = _e_ipc_font_default_list_dec(e->data, e->size); + while(defaults) + { + efd = defaults->data; + printf("REPLY: DEFAULT TEXT_CLASS=\"%s\" NAME=\"%s\" SIZE=%d\n", + efd->text_class, efd->font, efd->size); + defaults = evas_list_remove_list(defaults, defaults); + E_FREE(efd); } - } } else printf("REPLY: DEFAULT NONE\n"); @@ -532,3 +493,49 @@ _e_help(void) printf(" - %s\n", handler->desc); } } + + +/* list/struct encoding functions */ +ECORE_IPC_DEC_EVAS_LIST_PROTO(_e_ipc_module_list_dec) +{ + ECORE_IPC_DEC_EVAS_LIST_HEAD(E_Module); + ECORE_IPC_GETS(name); + ECORE_IPC_GET8(enabled); + ECORE_IPC_DEC_EVAS_LIST_FOOT(); +} + +ECORE_IPC_DEC_EVAS_LIST_PROTO(_e_ipc_font_available_list_dec) +{ + ECORE_IPC_DEC_EVAS_LIST_HEAD(E_Font_Available); + ECORE_IPC_GETS(name); + ECORE_IPC_DEC_EVAS_LIST_FOOT(); +} + +ECORE_IPC_DEC_EVAS_LIST_PROTO(_e_ipc_font_fallback_list_dec) +{ + ECORE_IPC_DEC_EVAS_LIST_HEAD(E_Font_Fallback); + ECORE_IPC_GETS(name); + ECORE_IPC_DEC_EVAS_LIST_FOOT(); +} + +ECORE_IPC_DEC_EVAS_LIST_PROTO(_e_ipc_font_default_list_dec) +{ + ECORE_IPC_DEC_EVAS_LIST_HEAD(E_Font_Default); + ECORE_IPC_GETS(text_class); + ECORE_IPC_GETS(font); + ECORE_IPC_GET32(size); + ECORE_IPC_DEC_EVAS_LIST_FOOT(); +} + +ECORE_IPC_DEC_STRUCT_PROTO(_e_ipc_font_default_dec) +{ + ECORE_IPC_DEC_STRUCT_HEAD_MIN(E_Font_Default, + 1 + + 1 + + 4); + ECORE_IPC_CHEKS(); + ECORE_IPC_GETS(text_class); + ECORE_IPC_GETS(font); + ECORE_IPC_GET32(size); + ECORE_IPC_DEC_STRUCT_FOOT(); +}