From dc759dc4e903a25713e79dddbda8d700dfa40c0e Mon Sep 17 00:00:00 2001 From: Alexander Aksenov Date: Thu, 21 Jan 2016 22:29:02 +0300 Subject: [PATCH] [FIX] UIHV: Writing data to file Issue: Previously, there was a dynamically allocated buffer of a constant size that have been used for all of the UI elements regardless of their count and used data size. Sometimes this have led to buffer overflow. Solution: Now buffer is not used at all, the whole data is written directly to a file. Change-Id: I847321db086f1c8e667d2ba7d12572fb29a6897f Signed-off-by: Alexander Aksenov --- ui_viewer/ui_viewer_data.c | 1021 ++++++++++++++++++++----------------------- ui_viewer/ui_viewer_data.h | 48 +- ui_viewer/ui_viewer_utils.c | 58 ++- 3 files changed, 537 insertions(+), 590 deletions(-) diff --git a/ui_viewer/ui_viewer_data.c b/ui_viewer/ui_viewer_data.c index 3d5cac7..e6dbba1 100644 --- a/ui_viewer/ui_viewer_data.c +++ b/ui_viewer/ui_viewer_data.c @@ -41,7 +41,7 @@ static pthread_mutex_t hierarchy_lock = PTHREAD_MUTEX_INITIALIZER; enum hierarchy_status_t hierarchy_status = HIERARCHY_NOT_RUNNING; static Eina_List *_get_obj(Eina_List *obj_list, Evas_Object *obj); -static char *pack_ui_obj_prop(char *to, Evas_Object *obj, const char *type_name); +static void pack_ui_obj_prop(FILE *file, Evas_Object *obj, const char *type_name); static Eina_List *ui_viewer_get_all_objs(void); static enum ui_obj_category_t _get_object_category(const char *type_name) @@ -291,7 +291,7 @@ static Evas_Object *_get_win_id(Evas *evas) return win_id; } -static char *_pack_ui_obj_info(char *to, Evas_Object *obj, +static void _pack_ui_obj_info(FILE *file, Evas_Object *obj, enum rendering_option_t rendering) { ui_obj_info_t info; @@ -301,7 +301,7 @@ static char *_pack_ui_obj_info(char *to, Evas_Object *obj, ui_viewer_log("object %p doesn't exist\n", obj); set_hierarchy_status(HIERARCHY_CANCELLED); print_log_ui_viewer_hierarchy_error(); - return to; + return; } evas = evas_object_evas_get(obj); @@ -325,26 +325,26 @@ static char *_pack_ui_obj_info(char *to, Evas_Object *obj, (unsigned long)info.parent_id); - to = pack_ptr(to, info.id); - to = pack_int8(to, info.category); - to = pack_int32(to, info.code); - to = pack_string(to, info.name); - to = pack_timeval(to, info.rendering_tv); - to = pack_ptr(to, info.parent_id); - to = pack_ui_obj_prop(to, info.id, info.name); + write_ptr(file, info.id); + write_int8(file, info.category); + write_int32(file, info.code); + write_string(file, info.name); + write_timeval(file, info.rendering_tv); + write_ptr(file, info.parent_id); + pack_ui_obj_prop(file, info.id, info.name); evas_object_unref(obj); - return to; + return; } -char *pack_ui_obj_info_list(char *to, enum rendering_option_t rendering, +void pack_ui_obj_info_list(FILE *file, enum rendering_option_t rendering, Eina_Bool *cancelled) { Eina_List *obj_list; Evas_Object *obj; unsigned int info_cnt; - char *start_ptr = to; +// char *start_ptr = to; Eina_List *ee_list = NULL, *ee_list_tmp = NULL; Ecore_Evas *ee; @@ -358,8 +358,8 @@ char *pack_ui_obj_info_list(char *to, enum rendering_option_t rendering, pthread_mutex_lock(&request_lock); obj_list = ui_viewer_get_all_objs(); info_cnt = eina_list_count(obj_list); - to = pack_int8(to, rendering); - to = pack_int32(to, info_cnt); + write_int8(file, rendering); + write_int32(file, info_cnt); pthread_mutex_unlock(&request_lock); *cancelled = EINA_FALSE; @@ -367,7 +367,6 @@ char *pack_ui_obj_info_list(char *to, enum rendering_option_t rendering, if (info_cnt == 0) { ui_viewer_log("no objects exist\n"); set_hierarchy_status(HIERARCHY_CANCELLED); - to = start_ptr; *cancelled = EINA_TRUE; print_log_ui_viewer_hierarchy_error(); } @@ -377,11 +376,10 @@ char *pack_ui_obj_info_list(char *to, enum rendering_option_t rendering, pthread_mutex_lock(&request_lock); // check if hierarchy request is active if (get_hierarchy_status() == HIERARCHY_RUNNING) { - to = _pack_ui_obj_info(to, obj, rendering); + _pack_ui_obj_info(file, obj, rendering); } else { ui_viewer_log("break packing hierarchy info\n"); // don't save any data if request was cancelled - to = start_ptr; *cancelled = EINA_TRUE; pthread_mutex_unlock(&request_lock); break; @@ -407,7 +405,7 @@ char *pack_ui_obj_info_list(char *to, enum rendering_option_t rendering, pthread_mutex_unlock(&request_lock); - return to; + return; } enum hierarchy_status_t get_hierarchy_status(void) @@ -468,10 +466,10 @@ static Eina_List *ui_viewer_get_all_objs(void) EINA_TRUE, EINA_TRUE); } -static char *_pack_ui_obj_evas_prop(char *to, ui_obj_prop_t *prop) +static void _pack_ui_obj_evas_prop(FILE *file, ui_obj_prop_t *prop) { if (!prop) - return to; + return; ui_viewer_log("evas prop: geometry : [%d,%d,%d,%d], " "focus : %d, name : %s, visible : %d, \n\t" @@ -494,58 +492,56 @@ static char *_pack_ui_obj_evas_prop(char *to, ui_obj_prop_t *prop) prop->size_padding[2], prop->size_padding[3], prop->render_op); - to = pack_int32(to, prop->geometry[0]); - to = pack_int32(to, prop->geometry[1]); - to = pack_int32(to, prop->geometry[2]); - to = pack_int32(to, prop->geometry[3]); - to = pack_int8(to, prop->focus); - to = pack_string(to, prop->name); - to = pack_int8(to, prop->visible); - to = pack_int32(to, prop->color[0]); - to = pack_int32(to, prop->color[1]); - to = pack_int32(to, prop->color[2]); - to = pack_int32(to, prop->color[3]); - to = pack_int8(to, prop->anti_alias); - to = pack_float(to, prop->scale); - to = pack_int32(to, prop->size_min[0]); - to = pack_int32(to, prop->size_min[1]); - to = pack_int32(to, prop->size_max[0]); - to = pack_int32(to, prop->size_max[1]); - to = pack_int32(to, prop->size_request[0]); - to = pack_int32(to, prop->size_request[1]); - to = pack_float(to, prop->size_align[0]); - to = pack_float(to, prop->size_align[1]); - to = pack_float(to, prop->size_weight[0]); - to = pack_float(to, prop->size_weight[1]); - to = pack_int32(to, prop->size_padding[0]); - to = pack_int32(to, prop->size_padding[1]); - to = pack_int32(to, prop->size_padding[2]); - to = pack_int32(to, prop->size_padding[3]); - to = pack_int8(to, prop->render_op); - - return to; + write_int32(file, prop->geometry[0]); + write_int32(file, prop->geometry[1]); + write_int32(file, prop->geometry[2]); + write_int32(file, prop->geometry[3]); + write_int8(file, prop->focus); + write_string(file, prop->name); + write_int8(file, prop->visible); + write_int32(file, prop->color[0]); + write_int32(file, prop->color[1]); + write_int32(file, prop->color[2]); + write_int32(file, prop->color[3]); + write_int8(file, prop->anti_alias); + write_float(file, prop->scale); + write_int32(file, prop->size_min[0]); + write_int32(file, prop->size_min[1]); + write_int32(file, prop->size_max[0]); + write_int32(file, prop->size_max[1]); + write_int32(file, prop->size_request[0]); + write_int32(file, prop->size_request[1]); + write_float(file, prop->size_align[0]); + write_float(file, prop->size_align[1]); + write_float(file, prop->size_weight[0]); + write_float(file, prop->size_weight[1]); + write_int32(file, prop->size_padding[0]); + write_int32(file, prop->size_padding[1]); + write_int32(file, prop->size_padding[2]); + write_int32(file, prop->size_padding[3]); + write_int8(file, prop->render_op); } -static char *_pack_ui_obj_elm_prop(char *to, ui_obj_elm_prop_t *prop) +static void _pack_ui_obj_elm_prop(FILE *file, ui_obj_elm_prop_t *prop) { if (!prop) - return to; + return; ui_viewer_log("elm prop: text : %s, style : %s, disabled : %d, type : %s\n", prop->text, prop->style, prop->disabled, prop->type); - to = pack_string(to, prop->text); - to = pack_string(to, prop->style); - to = pack_int8(to, prop->disabled); - to = pack_string(to, prop->type); + write_string(file, prop->text); + write_string(file, prop->style); + write_int8(file, prop->disabled); + write_string(file, prop->type); - return to; + return; } -static char *_pack_ui_obj_edje_prop(char *to, ui_obj_edje_prop_t *prop) +static void _pack_ui_obj_edje_prop(FILE *file, ui_obj_edje_prop_t *prop) { if (!prop) - return to; + return; ui_viewer_log("edje prop: animation : %d, play : %d, scale : %f, base_scale : %f, " "size_min : [%d,%d], size_max : [%d,%d]\n", @@ -553,22 +549,20 @@ static char *_pack_ui_obj_edje_prop(char *to, ui_obj_edje_prop_t *prop) prop->size_min[0], prop->size_min[1], prop->size_max[0], prop->size_max[1]); - to = pack_int8(to, prop->animation); - to = pack_int8(to, prop->play); - to = pack_float(to, prop->scale); - to = pack_float(to, prop->base_scale); - to = pack_int32(to, prop->size_min[0]); - to = pack_int32(to, prop->size_min[1]); - to = pack_int32(to, prop->size_max[0]); - to = pack_int32(to, prop->size_max[1]); - - return to; + write_int8(file, prop->animation); + write_int8(file, prop->play); + write_float(file, prop->scale); + write_float(file, prop->base_scale); + write_int32(file, prop->size_min[0]); + write_int32(file, prop->size_min[1]); + write_int32(file, prop->size_max[0]); + write_int32(file, prop->size_max[1]); } -static char *_pack_image_prop(char *to, image_prop_t *prop) +static void _pack_image_prop(FILE *file, image_prop_t *prop) { if (!prop) - return to; + return; ui_viewer_log("image prop: load_dpi : %f, source_clip : %d, filled : %d, content_hint : %d, " "alpha : %d, border : [%d,%d,%d,%d], border_scale : %f, pixels_dirty : %d,\n\t" @@ -582,55 +576,51 @@ static char *_pack_image_prop(char *to, image_prop_t *prop) prop->fill[0], prop->fill[1], prop->fill[2], prop->fill[3], prop->load_scale_down, prop->scale_hint, prop->source_events, prop->frame_count, prop->evas_image_stride); - to = pack_float(to, prop->load_dpi); - to = pack_int8(to, prop->source_clip); - to = pack_int8(to, prop->filled); - to = pack_int8(to, prop->content_hint); - to = pack_int8(to, prop->alpha); - to = pack_int32(to, prop->border[0]); - to = pack_int32(to, prop->border[1]); - to = pack_int32(to, prop->border[2]); - to = pack_int32(to, prop->border[3]); - to = pack_float(to, prop->border_scale); - to = pack_int8(to, prop->pixels_dirty); - to = pack_int8(to, prop->load_orientation); - to = pack_int8(to, prop->border_center_fill); - to = pack_int32(to, prop->size[0]); - to = pack_int32(to, prop->size[1]); - to = pack_int8(to, prop->source_visible); - to = pack_int32(to, prop->fill[0]); - to = pack_int32(to, prop->fill[1]); - to = pack_int32(to, prop->fill[2]); - to = pack_int32(to, prop->fill[3]); - to = pack_int32(to, prop->load_scale_down); - to = pack_int8(to, prop->scale_hint); - to = pack_int8(to, prop->source_events); - to = pack_int32(to, prop->frame_count); - to = pack_int32(to, prop->evas_image_stride); - - return to; + write_float(file, prop->load_dpi); + write_int8(file, prop->source_clip); + write_int8(file, prop->filled); + write_int8(file, prop->content_hint); + write_int8(file, prop->alpha); + write_int32(file, prop->border[0]); + write_int32(file, prop->border[1]); + write_int32(file, prop->border[2]); + write_int32(file, prop->border[3]); + write_float(file, prop->border_scale); + write_int8(file, prop->pixels_dirty); + write_int8(file, prop->load_orientation); + write_int8(file, prop->border_center_fill); + write_int32(file, prop->size[0]); + write_int32(file, prop->size[1]); + write_int8(file, prop->source_visible); + write_int32(file, prop->fill[0]); + write_int32(file, prop->fill[1]); + write_int32(file, prop->fill[2]); + write_int32(file, prop->fill[3]); + write_int32(file, prop->load_scale_down); + write_int8(file, prop->scale_hint); + write_int8(file, prop->source_events); + write_int32(file, prop->frame_count); + write_int32(file, prop->evas_image_stride); } -static char *_pack_line_prop(char *to, line_prop_t *prop) +static void _pack_line_prop(FILE *file, line_prop_t *prop) { if (!prop) - return to; + return; ui_viewer_log("line prop: xy : [%d,%d,%d,%d]\n", prop->xy[0], prop->xy[1], prop->xy[2], prop->xy[3]); - to = pack_int32(to, prop->xy[0]); - to = pack_int32(to, prop->xy[1]); - to = pack_int32(to, prop->xy[2]); - to = pack_int32(to, prop->xy[3]); - - return to; + write_int32(file, prop->xy[0]); + write_int32(file, prop->xy[1]); + write_int32(file, prop->xy[2]); + write_int32(file, prop->xy[3]); } -static char *_pack_text_prop(char *to, text_prop_t *prop) +static void _pack_text_prop(FILE *file, text_prop_t *prop) { if (!prop) - return to; + return; ui_viewer_log("text prop: font : %s, size : %d, text : %s, delim : %s, " "ellipsis : %s, style : %d, shadow_color : [%d,%d,%d,%d], glow_color : [%d,%d,%d,%d],\n\t" @@ -644,226 +634,202 @@ static char *_pack_text_prop(char *to, text_prop_t *prop) prop->style_pad[0], prop->style_pad[1], prop->style_pad[2], prop->style_pad[3], prop->direction); - to = pack_string(to, prop->font); - to = pack_int32(to, prop->size); - to = pack_string(to, prop->text); - to = pack_string(to, prop->delim); - to = pack_float(to, prop->ellipsis); - to = pack_int8(to, prop->style); - to = pack_int32(to, prop->shadow_color[0]); - to = pack_int32(to, prop->shadow_color[1]); - to = pack_int32(to, prop->shadow_color[2]); - to = pack_int32(to, prop->shadow_color[3]); - to = pack_int32(to, prop->glow_color[0]); - to = pack_int32(to, prop->glow_color[1]); - to = pack_int32(to, prop->glow_color[2]); - to = pack_int32(to, prop->glow_color[3]); - to = pack_int32(to, prop->glow2_color[0]); - to = pack_int32(to, prop->glow2_color[1]); - to = pack_int32(to, prop->glow2_color[2]); - to = pack_int32(to, prop->glow2_color[3]); - to = pack_int32(to, prop->outline_color[0]); - to = pack_int32(to, prop->outline_color[1]); - to = pack_int32(to, prop->outline_color[2]); - to = pack_int32(to, prop->outline_color[3]); - to = pack_int32(to, prop->style_pad[0]); - to = pack_int32(to, prop->style_pad[1]); - to = pack_int32(to, prop->style_pad[2]); - to = pack_int32(to, prop->style_pad[3]); - to = pack_int8(to, prop->direction); - - return to; + write_string(file, prop->font); + write_int32(file, prop->size); + write_string(file, prop->text); + write_string(file, prop->delim); + write_float(file, prop->ellipsis); + write_int8(file, prop->style); + write_int32(file, prop->shadow_color[0]); + write_int32(file, prop->shadow_color[1]); + write_int32(file, prop->shadow_color[2]); + write_int32(file, prop->shadow_color[3]); + write_int32(file, prop->glow_color[0]); + write_int32(file, prop->glow_color[1]); + write_int32(file, prop->glow_color[2]); + write_int32(file, prop->glow_color[3]); + write_int32(file, prop->glow2_color[0]); + write_int32(file, prop->glow2_color[1]); + write_int32(file, prop->glow2_color[2]); + write_int32(file, prop->glow2_color[3]); + write_int32(file, prop->outline_color[0]); + write_int32(file, prop->outline_color[1]); + write_int32(file, prop->outline_color[2]); + write_int32(file, prop->outline_color[3]); + write_int32(file, prop->style_pad[0]); + write_int32(file, prop->style_pad[1]); + write_int32(file, prop->style_pad[2]); + write_int32(file, prop->style_pad[3]); + write_int8(file, prop->direction); } -static char *_pack_textblock_prop(char *to, textblock_prop_t *prop) +static void _pack_textblock_prop(FILE *file, textblock_prop_t *prop) { if (!prop) - return to; + return; ui_viewer_log("textblock prop: replace_char : %s, valign : %f, delim : %s, newline : %d, " "markup : %s\n", prop->replace_char, prop->valign, prop->delim, prop->newline, prop->markup); - to = pack_string(to, prop->replace_char); - to = pack_float(to, prop->valign); - to = pack_string(to, prop->delim); - to = pack_int8(to, prop->newline); - to = pack_string(to, prop->markup); - - return to; + write_string(file, prop->replace_char); + write_float(file, prop->valign); + write_string(file, prop->delim); + write_int8(file, prop->newline); + write_string(file, prop->markup); } -static char *_pack_table_prop(char *to, table_prop_t *prop) +static void _pack_table_prop(FILE *file, table_prop_t *prop) { if (!prop) - return to; + return; ui_viewer_log("table prop: homogeneous : %d, align : [%f,%f], padding : [%d,%d], mirrored : %d, " "col_row_size : [%d,%d]\n", prop->homogeneous, prop->align[0], prop->align[1], prop->padding[0], prop->padding[1], prop->mirrored, prop->col_row_size[0], prop->col_row_size[1]); - to = pack_int8(to, prop->homogeneous); - to = pack_float(to, prop->align[0]); - to = pack_float(to, prop->align[1]); - to = pack_int32(to, prop->padding[0]); - to = pack_int32(to, prop->padding[1]); - to = pack_int8(to, prop->mirrored); - to = pack_int32(to, prop->col_row_size[0]); - to = pack_int32(to, prop->col_row_size[1]); - - return to; + write_int8(file, prop->homogeneous); + write_float(file, prop->align[0]); + write_float(file, prop->align[1]); + write_int32(file, prop->padding[0]); + write_int32(file, prop->padding[1]); + write_int8(file, prop->mirrored); + write_int32(file, prop->col_row_size[0]); + write_int32(file, prop->col_row_size[1]); } -static char *_pack_box_prop(char *to, box_prop_t *prop) +static void _pack_box_prop(FILE *file, box_prop_t *prop) { if (!prop) - return to; + return; ui_viewer_log("box prop: align : [%f,%f]\n", prop->align[0], prop->align[1]); - to = pack_float(to, prop->align[0]); - to = pack_float(to, prop->align[1]); - - return to; + write_float(file, prop->align[0]); + write_float(file, prop->align[1]); } -static char *_pack_grid_prop(char *to, grid_prop_t *prop) +static void _pack_grid_prop(FILE *file, grid_prop_t *prop) { if (!prop) - return to; + return ; ui_viewer_log("grid prop: mirrored : %d\n", prop->mirrored); - to = pack_int8(to, prop->mirrored); - - return to; + write_int8(file, prop->mirrored); } -static char *_pack_textgrid_prop(char *to, textgrid_prop_t *prop) +static void _pack_textgrid_prop(FILE *file, textgrid_prop_t *prop) { if (!prop) - return to; + return; ui_viewer_log("textgrid prop: size : [%d,%d], cell_size : [%d,%d]\n", prop->size[0], prop->size[1], prop->cell_size[0], prop->cell_size[1]); - to = pack_int32(to, prop->size[0]); - to = pack_int32(to, prop->size[1]); - to = pack_int32(to, prop->cell_size[0]); - to = pack_int32(to, prop->cell_size[1]); - - return to; + write_int32(file, prop->size[0]); + write_int32(file, prop->size[1]); + write_int32(file, prop->cell_size[0]); + write_int32(file, prop->cell_size[1]); } -static char *_pack_bg_prop(char *to, bg_prop_t *prop) +static void _pack_bg_prop(FILE *file, bg_prop_t *prop) { if (!prop) - return to; + return; ui_viewer_log("bg prop: color : [%d,%d,%d], option : %d\n", prop->color[0], prop->color[1], prop->color[2], prop->option); - to = pack_int32(to, prop->color[0]); - to = pack_int32(to, prop->color[1]); - to = pack_int32(to, prop->color[2]); - to = pack_int8(to, prop->option); - - return to; + write_int32(file, prop->color[0]); + write_int32(file, prop->color[1]); + write_int32(file, prop->color[2]); + write_int8(file, prop->option); } -static char *_pack_button_prop(char *to, button_prop_t *prop) +static void _pack_button_prop(FILE *file, button_prop_t *prop) { if (!prop) - return to; + return; ui_viewer_log("button prop: initial_timeout : %f, gap_timeout : %f, autorepeat : %d\n", prop->initial_timeout, prop->gap_timeout, prop->autorepeat); - to = pack_float(to, prop->initial_timeout); - to = pack_float(to, prop->gap_timeout); - to = pack_int8(to, prop->autorepeat); - - return to; + write_float(file, prop->initial_timeout); + write_float(file, prop->gap_timeout); + write_int8(file, prop->autorepeat); } -static char *_pack_check_prop(char *to, check_prop_t *prop) +static void _pack_check_prop(FILE *file, check_prop_t *prop) { if (!prop) - return to; + return; ui_viewer_log("check prop: state : %d\n", prop->state); - to = pack_int8(to, prop->state); - - return to; + write_int8(file, prop->state); } -static char *_pack_colorselector_prop(char *to, colorselector_prop_t *prop) +static void _pack_colorselector_prop(FILE *file, colorselector_prop_t *prop) { if (!prop) - return to; + return; ui_viewer_log("colorselector prop: color : [%d,%d,%d,%d], palette_name : %s, " "mode : %d\n", prop->color[0], prop->color[1], prop->color[2], prop->color[3], prop->palette_name, prop->mode); - to = pack_int32(to, prop->color[0]); - to = pack_int32(to, prop->color[1]); - to = pack_int32(to, prop->color[2]); - to = pack_int32(to, prop->color[3]); - to = pack_string(to, prop->palette_name); - to = pack_int8(to, prop->mode); - - return to; + write_int32(file, prop->color[0]); + write_int32(file, prop->color[1]); + write_int32(file, prop->color[2]); + write_int32(file, prop->color[3]); + write_string(file, prop->palette_name); + write_int8(file, prop->mode); } -static char *_pack_ctxpopup_prop(char *to, ctxpopup_prop_t *prop) +static void _pack_ctxpopup_prop(FILE *file, ctxpopup_prop_t *prop) { if (!prop) - return to; + return; ui_viewer_log("ctxpopup prop: horizontal : %d\n", prop->horizontal); - to = pack_int8(to, prop->horizontal); - - return to; + write_int8(file, prop->horizontal); } -static char *_pack_datetime_prop(char *to, datetime_prop_t *prop) +static void _pack_datetime_prop(FILE *file, datetime_prop_t *prop) { if (!prop) - return to; + return; ui_viewer_log("datetime prop: format : %s, value : [%d,%d,%d,%d,%d,%d,%d,%d]\n", prop->format, prop->value[0], prop->value[1], prop->value[2], prop->value[3], prop->value[4], prop->value[5], prop->value[6], prop->value[7]); - to = pack_string(to, prop->format); - to = pack_int32(to, prop->value[0]); - to = pack_int32(to, prop->value[1]); - to = pack_int32(to, prop->value[2]); - to = pack_int32(to, prop->value[3]); - to = pack_int32(to, prop->value[4]); - to = pack_int32(to, prop->value[5]); - to = pack_int32(to, prop->value[6]); - to = pack_int32(to, prop->value[7]); - - return to; + write_string(file, prop->format); + write_int32(file, prop->value[0]); + write_int32(file, prop->value[1]); + write_int32(file, prop->value[2]); + write_int32(file, prop->value[3]); + write_int32(file, prop->value[4]); + write_int32(file, prop->value[5]); + write_int32(file, prop->value[6]); + write_int32(file, prop->value[7]); } -static char *_pack_entry_prop(char *to, entry_prop_t *prop) +static void _pack_entry_prop(FILE *file, entry_prop_t *prop) { if (!prop) - return to; + return; ui_viewer_log("entry prop: entry : %s, scrollable : %d, panel_show_on_demand : %d, menu_disabled : %d, " "cnp_mode : %d, editable : %d, hover_style : %s, single_line : %d,\n\t" @@ -876,46 +842,42 @@ static char *_pack_entry_prop(char *to, entry_prop_t *prop) prop->cursor_pos, prop->cursor_is_format, prop->cursor_content, prop->selection, prop->is_visible_format); - to = pack_string(to, prop->entry); - to = pack_int8(to, prop->scrollable); - to = pack_int8(to, prop->panel_show_on_demand); - to = pack_int8(to, prop->menu_disabled); - to = pack_int8(to, prop->cnp_mode); - to = pack_int8(to, prop->editable); - to = pack_string(to, prop->hover_style); - to = pack_int8(to, prop->single_line); - to = pack_int8(to, prop->password); - to = pack_int8(to, prop->autosave); - to = pack_int8(to, prop->prediction_allow); - to = pack_int8(to, prop->panel_enabled); - to = pack_int32(to, prop->cursor_pos); - to = pack_int8(to, prop->cursor_is_format); - to = pack_string(to, prop->cursor_content); + write_string(file, prop->entry); + write_int8(file, prop->scrollable); + write_int8(file, prop->panel_show_on_demand); + write_int8(file, prop->menu_disabled); + write_int8(file, prop->cnp_mode); + write_int8(file, prop->editable); + write_string(file, prop->hover_style); + write_int8(file, prop->single_line); + write_int8(file, prop->password); + write_int8(file, prop->autosave); + write_int8(file, prop->prediction_allow); + write_int8(file, prop->panel_enabled); + write_int32(file, prop->cursor_pos); + write_int8(file, prop->cursor_is_format); + write_string(file, prop->cursor_content); free(prop->cursor_content); // we need free it according to efl docs - to = pack_string(to, prop->selection); - to = pack_int8(to, prop->is_visible_format); - - return to; + write_string(file, prop->selection); + write_int8(file, prop->is_visible_format); } -static char *_pack_flip_prop(char *to, flip_prop_t *prop) +static void _pack_flip_prop(FILE *file, flip_prop_t *prop) { if (!prop) - return to; + return; ui_viewer_log("flip prop: interaction : %d, front_visible : %d\n", prop->interaction, prop->front_visible); - to = pack_int8(to, prop->interaction); - to = pack_int8(to, prop->front_visible); - - return to; + write_int8(file, prop->interaction); + write_int8(file, prop->front_visible); } -static char *_pack_gengrid_prop(char *to, gengrid_prop_t *prop) +static void _pack_gengrid_prop(FILE *file, gengrid_prop_t *prop) { if (!prop) - return to; + return; ui_viewer_log("gengrid prop: align : [%f,%f], filled : %d, relative : [%f,%f], " "multi_select : %d, group_item_size : [%d,%d], select_mode : %d, render_mode : %d,\n\t" @@ -927,31 +889,29 @@ static char *_pack_gengrid_prop(char *to, gengrid_prop_t *prop) prop->item_size[1], prop->multi_select_mode, prop->horizontal, prop->wheel_disabled, prop->items_count); - to = pack_float(to, prop->align[0]); - to = pack_float(to, prop->align[1]); - to = pack_int8(to, prop->filled); - to = pack_float(to, prop->relative[0]); - to = pack_float(to, prop->relative[1]); - to = pack_int8(to, prop->multi_select); - to = pack_int32(to, prop->group_item_size[0]); - to = pack_int32(to, prop->group_item_size[1]); - to = pack_int8(to, prop->select_mode); - to = pack_int8(to, prop->render_mode); - to = pack_int8(to, prop->highlight_mode); - to = pack_int32(to, prop->item_size[0]); - to = pack_int32(to, prop->item_size[1]); - to = pack_int8(to, prop->multi_select_mode); - to = pack_int8(to, prop->horizontal); - to = pack_int8(to, prop->wheel_disabled); - to = pack_int32(to, prop->items_count); - - return to; + write_float(file, prop->align[0]); + write_float(file, prop->align[1]); + write_int8(file, prop->filled); + write_float(file, prop->relative[0]); + write_float(file, prop->relative[1]); + write_int8(file, prop->multi_select); + write_int32(file, prop->group_item_size[0]); + write_int32(file, prop->group_item_size[1]); + write_int8(file, prop->select_mode); + write_int8(file, prop->render_mode); + write_int8(file, prop->highlight_mode); + write_int32(file, prop->item_size[0]); + write_int32(file, prop->item_size[1]); + write_int8(file, prop->multi_select_mode); + write_int8(file, prop->horizontal); + write_int8(file, prop->wheel_disabled); + write_int32(file, prop->items_count); } -static char *_pack_genlist_prop(char *to, genlist_prop_t *prop) +static void _pack_genlist_prop(FILE *file, genlist_prop_t *prop) { if (!prop) - return to; + return; ui_viewer_log("genlist prop: multi_select : %d, genlist_mode : %d, items_count : %d, homogeneous : %d, " "block_count : %d, timeout : %f, reorder_mode : %d,\n\t" @@ -961,55 +921,49 @@ static char *_pack_genlist_prop(char *to, genlist_prop_t *prop) prop->block_count, prop->timeout, prop->reorder_mode, prop->decorate_mode, prop->effect_enabled, prop->select_mode, prop->highlight_mode, prop->realization_mode); - to = pack_int8(to, prop->multi_select); - to = pack_int8(to, prop->genlist_mode); - to = pack_int32(to, prop->items_count); - to = pack_int8(to, prop->homogeneous); - to = pack_int32(to, prop->block_count); - to = pack_float(to, prop->timeout); - to = pack_int8(to, prop->reorder_mode); - to = pack_int8(to, prop->decorate_mode); - to = pack_int8(to, prop->effect_enabled); - to = pack_int8(to, prop->select_mode); - to = pack_int8(to, prop->highlight_mode); - to = pack_int8(to, prop->realization_mode); - - return to; + write_int8(file, prop->multi_select); + write_int8(file, prop->genlist_mode); + write_int32(file, prop->items_count); + write_int8(file, prop->homogeneous); + write_int32(file, prop->block_count); + write_float(file, prop->timeout); + write_int8(file, prop->reorder_mode); + write_int8(file, prop->decorate_mode); + write_int8(file, prop->effect_enabled); + write_int8(file, prop->select_mode); + write_int8(file, prop->highlight_mode); + write_int8(file, prop->realization_mode); } -static char *_pack_glview_prop(char *to, glview_prop_t *prop) +static void _pack_glview_prop(FILE *file, glview_prop_t *prop) { if (!prop) - return to; + return; ui_viewer_log("glview prop: size : [%d,%d], rotation: %d\n", prop->size[0], prop->size[1], prop->rotation); - to = pack_int32(to, prop->size[0]); - to = pack_int32(to, prop->size[1]); - to = pack_int32(to, prop->rotation); - - return to; + write_int32(file, prop->size[0]); + write_int32(file, prop->size[1]); + write_int32(file, prop->rotation); } -static char *_pack_icon_prop(char *to, icon_prop_t *prop) +static void _pack_icon_prop(FILE *file, icon_prop_t *prop) { if (!prop) - return to; + return; ui_viewer_log("icon prop: lookup : %d, standard : %s\n", prop->lookup, prop->standard); - to = pack_int8(to, prop->lookup); - to = pack_string(to, prop->standard); - - return to; + write_int8(file, prop->lookup); + write_string(file, prop->standard); } -static char *_pack_elm_image_prop(char *to, elm_image_prop_t *prop) +static void _pack_elm_image_prop(FILE *file, elm_image_prop_t *prop) { if (!prop) - return to; + return; ui_viewer_log("elm_image prop: editable : %d, play : %d, smooth : %d, no_scale : %d, " "animated : %d, aspect_fixed : %d, orient : %d,\n\t" @@ -1020,83 +974,75 @@ static char *_pack_elm_image_prop(char *to, elm_image_prop_t *prop) prop->resizable[0], prop->resizable[1], prop->animated_available, prop->size[0], prop->size[1]); - to = pack_int8(to, prop->editable); - to = pack_int8(to, prop->play); - to = pack_int8(to, prop->smooth); - to = pack_int8(to, prop->no_scale); - to = pack_int8(to, prop->animated); - to = pack_int8(to, prop->aspect_fixed); - to = pack_int8(to, prop->orient); - to = pack_int8(to, prop->fill_outside); - to = pack_int8(to, prop->resizable[0]); - to = pack_int8(to, prop->resizable[1]); - to = pack_int8(to, prop->animated_available); - to = pack_int32(to, prop->size[0]); - to = pack_int32(to, prop->size[1]); - - return to; + write_int8(file, prop->editable); + write_int8(file, prop->play); + write_int8(file, prop->smooth); + write_int8(file, prop->no_scale); + write_int8(file, prop->animated); + write_int8(file, prop->aspect_fixed); + write_int8(file, prop->orient); + write_int8(file, prop->fill_outside); + write_int8(file, prop->resizable[0]); + write_int8(file, prop->resizable[1]); + write_int8(file, prop->animated_available); + write_int32(file, prop->size[0]); + write_int32(file, prop->size[1]); } -static char *_pack_index_prop(char *to, index_prop_t *prop) +static void _pack_index_prop(FILE *file, index_prop_t *prop) { if (!prop) - return to; + return; ui_viewer_log("index prop: autohide_disabled : %d, omit_enabled : %d, priority : %d, horizontal : %d, " "change_time : %f,\n\tindicator_disabled : %d, item_level : %d\n", prop->autohide_disabled, prop->omit_enabled, prop->priority, prop->horizontal, prop->change_time, prop->indicator_disabled, prop->item_level); - to = pack_int8(to, prop->autohide_disabled); - to = pack_int8(to, prop->omit_enabled); - to = pack_int32(to, prop->priority); - to = pack_int8(to, prop->horizontal); - to = pack_float(to, prop->change_time); - to = pack_int8(to, prop->indicator_disabled); - to = pack_int32(to, prop->item_level); - - return to; + write_int8(file, prop->autohide_disabled); + write_int8(file, prop->omit_enabled); + write_int32(file, prop->priority); + write_int8(file, prop->horizontal); + write_float(file, prop->change_time); + write_int8(file, prop->indicator_disabled); + write_int32(file, prop->item_level); } -static char *_pack_label_prop(char *to, label_prop_t *prop) +static void _pack_label_prop(FILE *file, label_prop_t *prop) { if (!prop) - return to; + return; ui_viewer_log("label prop: wrap_width : %d, speed : %f, mode : %d\n", prop->wrap_width, prop->speed, prop->mode); - to = pack_int32(to, prop->wrap_width); - to = pack_float(to, prop->speed); - to = pack_int8(to, prop->mode); - - return to; + write_int32(file, prop->wrap_width); + write_float(file, prop->speed); + write_int8(file, prop->mode); } -static char *_pack_list_prop(char *to, list_prop_t *prop) +static void _pack_list_prop(FILE *file, list_prop_t *prop) { if (!prop) - return to; + return; ui_viewer_log("list prop: horizontal : %d, select_mode : %d, focus_on_selection : %d, multi_select : %d, " "multi_select_mode : %d, mode : %d\n", prop->horizontal, prop->select_mode, prop->focus_on_selection, prop->multi_select, prop->multi_select_mode, prop->mode); - to = pack_int8(to, prop->horizontal); - to = pack_int8(to, prop->select_mode); - to = pack_int8(to, prop->focus_on_selection); - to = pack_int8(to, prop->multi_select); - to = pack_int8(to, prop->multi_select_mode); - to = pack_int8(to, prop->mode); - - return to; + write_int8(file, prop->horizontal); + write_int8(file, prop->select_mode); + write_int8(file, prop->focus_on_selection); + write_int8(file, prop->multi_select); + write_int8(file, prop->multi_select_mode); + write_int8(file, prop->mode); } -static char *_pack_map_prop(char *to, map_prop_t *prop) +static void _pack_map_prop(FILE *file, map_prop_t *prop) { if (!prop) - return to; + return; ui_viewer_log("map prop: zoom : %d, paused : %d, wheel_disabled : %d, zoom_min : %d, " "rotate_degree : %f, rotate : [%d,%d],\n\tagent : %s, zoom_max : %d, " @@ -1105,178 +1051,158 @@ static char *_pack_map_prop(char *to, map_prop_t *prop) prop->rotate_degree, prop->rotate[0], prop->rotate[1], prop->agent, prop->zoom_max, prop->zoom_mode, prop->region[0], prop->region[1]); - to = pack_int32(to, prop->zoom); - to = pack_int8(to, prop->paused); - to = pack_int8(to, prop->wheel_disabled); - to = pack_int32(to, prop->zoom_min); - to = pack_float(to, prop->rotate_degree); - to = pack_int32(to, prop->rotate[0]); - to = pack_int32(to, prop->rotate[1]); - to = pack_string(to, prop->agent); - to = pack_int32(to, prop->zoom_max); - to = pack_int8(to, prop->zoom_mode); - to = pack_float(to, prop->region[0]); - to = pack_float(to, prop->region[1]); - - return to; + write_int32(file, prop->zoom); + write_int8(file, prop->paused); + write_int8(file, prop->wheel_disabled); + write_int32(file, prop->zoom_min); + write_float(file, prop->rotate_degree); + write_int32(file, prop->rotate[0]); + write_int32(file, prop->rotate[1]); + write_string(file, prop->agent); + write_int32(file, prop->zoom_max); + write_int8(file, prop->zoom_mode); + write_float(file, prop->region[0]); + write_float(file, prop->region[1]); } -static char *_pack_notify_prop(char *to, notify_prop_t *prop) +static void _pack_notify_prop(FILE *file, notify_prop_t *prop) { if (!prop) - return to; + return; ui_viewer_log("notify prop: align : [%f,%f], allow_events: %d, " "timeout : %f\n", prop->align[0], prop->align[1], prop->allow_events, prop->timeout); - to = pack_float(to, prop->align[0]); - to = pack_float(to, prop->align[1]); - to = pack_int8(to, prop->allow_events); - to = pack_float(to, prop->timeout); - - return to; + write_float(file, prop->align[0]); + write_float(file, prop->align[1]); + write_int8(file, prop->allow_events); + write_float(file, prop->timeout); } -static char *_pack_panel_prop(char *to, panel_prop_t *prop) +static void _pack_panel_prop(FILE *file, panel_prop_t *prop) { if (!prop) - return to; + return; ui_viewer_log("panel prop: orient : %d, hidden : %d, scrollable : %d\n", prop->orient, prop->hidden, prop->scrollable); - to = pack_int8(to, prop->orient); - to = pack_int8(to, prop->hidden); - to = pack_int8(to, prop->scrollable); - - return to; + write_int8(file, prop->orient); + write_int8(file, prop->hidden); + write_int8(file, prop->scrollable); } -static char *_pack_photo_prop(char *to, photo_prop_t *prop) +static void _pack_photo_prop(FILE *file, photo_prop_t *prop) { if (!prop) - return to; + return; ui_viewer_log("photo prop: editable : %d, fill_inside : %d, aspect_fixed : %d, size : %d\n", prop->editable, prop->fill_inside, prop->aspect_fixed, prop->size); - to = pack_int8(to, prop->editable); - to = pack_int8(to, prop->fill_inside); - to = pack_int8(to, prop->aspect_fixed); - to = pack_int32(to, prop->size); - - return to; + write_int8(file, prop->editable); + write_int8(file, prop->fill_inside); + write_int8(file, prop->aspect_fixed); + write_int32(file, prop->size); } -static char *_pack_photocam_prop(char *to, photocam_prop_t *prop) +static void _pack_photocam_prop(FILE *file, photocam_prop_t *prop) { if (!prop) - return to; + return; ui_viewer_log("photocam prop: paused : %d, file : %f, gesture_enabled : %d, zoom : %f, " "zoom_mode : %d, image_size : [%d,%d]\n", prop->paused, prop->file, prop->gesture_enabled, prop->zoom, prop->zoom_mode, prop->image_size[0], prop->image_size[1]); - to = pack_int8(to, prop->paused); - to = pack_string(to, prop->file); - to = pack_int8(to, prop->gesture_enabled); - to = pack_float(to, prop->zoom); - to = pack_int8(to, prop->zoom_mode); - to = pack_int32(to, prop->image_size[0]); - to = pack_int32(to, prop->image_size[1]); - - return to; + write_int8(file, prop->paused); + write_string(file, prop->file); + write_int8(file, prop->gesture_enabled); + write_float(file, prop->zoom); + write_int8(file, prop->zoom_mode); + write_int32(file, prop->image_size[0]); + write_int32(file, prop->image_size[1]); } -static char *_pack_popup_prop(char *to, popup_prop_t *prop) +static void _pack_popup_prop(FILE *file, popup_prop_t *prop) { if (!prop) - return to; + return; ui_viewer_log("popup prop: align : [%f,%f], allow_events : %d, wrap_type : %d, orient : %d, " "timeout : %f\n", prop->align[0], prop->align[1], prop->allow_events, prop->wrap_type, prop->orient, prop->timeout); - to = pack_float(to, prop->align[0]); - to = pack_float(to, prop->align[1]); - to = pack_int8(to, prop->allow_events); - to = pack_int8(to, prop->wrap_type); - to = pack_int8(to, prop->orient); - to = pack_float(to, prop->timeout); - - return to; + write_float(file, prop->align[0]); + write_float(file, prop->align[1]); + write_int8(file, prop->allow_events); + write_int8(file, prop->wrap_type); + write_int8(file, prop->orient); + write_float(file, prop->timeout); } -static char *_pack_progressbar_prop(char *to, progressbar_prop_t *prop) +static void _pack_progressbar_prop(FILE *file, progressbar_prop_t *prop) { if (!prop) - return to; + return; ui_viewer_log("progressbar prop: span_size : %d, pulse : %d, value : %f, inverted : %d, " "horizontal : %d, unit_format : %s\n", prop->span_size, prop->pulse, prop->value, prop->inverted, prop->horizontal, prop->unit_format); - to = pack_int32(to, prop->span_size); - to = pack_int8(to, prop->pulse); - to = pack_float(to, prop->value); - to = pack_int8(to, prop->inverted); - to = pack_int8(to, prop->horizontal); - to = pack_string(to, prop->unit_format); - - return to; + write_int32(file, prop->span_size); + write_int8(file, prop->pulse); + write_float(file, prop->value); + write_int8(file, prop->inverted); + write_int8(file, prop->horizontal); + write_string(file, prop->unit_format); } -static char *_pack_radio_prop(char *to, radio_prop_t *prop) +static void _pack_radio_prop(FILE *file, radio_prop_t *prop) { if (!prop) - return to; + return; ui_viewer_log("radio prop: state_value : %d, value : %d\n", prop->state_value, prop->value); - to = pack_int32(to, prop->state_value); - to = pack_int32(to, prop->value); - - return to; + write_int32(file, prop->state_value); + write_int32(file, prop->value); } -static char *_pack_segmencontrol_prop(char *to, segmencontrol_prop_t *prop) +static void _pack_segmencontrol_prop(FILE *file, segmencontrol_prop_t *prop) { if (!prop) - return to; + return; ui_viewer_log("segmencontrol prop: item_count : %d\n", prop->item_count); - to = pack_int32(to, prop->item_count); - - return to; + write_int32(file, prop->item_count); } -static char *_pack_slider_prop(char *to, slider_prop_t *prop) +static void _pack_slider_prop(FILE *file, slider_prop_t *prop) { if (!prop) - return to; + return; ui_viewer_log("slider prop: horizontal : %d, value : %f, format : %s\n", prop->horizontal, prop->value, prop->format); - to = pack_int8(to, prop->horizontal); - to = pack_float(to, prop->value); - to = pack_string(to, prop->format); - - return to; + write_int8(file, prop->horizontal); + write_float(file, prop->value); + write_string(file, prop->format); } -static char *_pack_spinner_prop(char *to, spinner_prop_t *prop) +static void _pack_spinner_prop(FILE *file, spinner_prop_t *prop) { if (!prop) - return to; + return; ui_viewer_log("spinner prop: min : %f, max : %f, step : %f, wrap : %d, " "interval : %f, round : %d, editable : %d, " @@ -1285,24 +1211,22 @@ static char *_pack_spinner_prop(char *to, spinner_prop_t *prop) prop->interval, prop->round, prop->editable, prop->base, prop->value, prop->format); - to = pack_float(to, prop->min_max[0]); - to = pack_float(to, prop->min_max[1]); - to = pack_float(to, prop->step); - to = pack_int8(to, prop->wrap); - to = pack_float(to, prop->interval); - to = pack_int32(to, prop->round); - to = pack_int8(to, prop->editable); - to = pack_float(to, prop->base); - to = pack_float(to, prop->value); - to = pack_string(to, prop->format); - - return to; + write_float(file, prop->min_max[0]); + write_float(file, prop->min_max[1]); + write_float(file, prop->step); + write_int8(file, prop->wrap); + write_float(file, prop->interval); + write_int32(file, prop->round); + write_int8(file, prop->editable); + write_float(file, prop->base); + write_float(file, prop->value); + write_string(file, prop->format); } -static char *_pack_toolbar_prop(char *to, toolbar_prop_t *prop) +static void _pack_toolbar_prop(FILE *file, toolbar_prop_t *prop) { if (!prop) - return to; + return; ui_viewer_log("toolbar prop: reorder_mode : %d, transverse_expanded : %d, homogeneous : %d, align : %f, " "select_mode : %d, icon_size : %d, horizontal : %d,\n\tstandard_priority : %d, " @@ -1311,37 +1235,33 @@ static char *_pack_toolbar_prop(char *to, toolbar_prop_t *prop) prop->select_mode, prop->icon_size, prop->horizontal, prop->standard_priority, prop->items_count); - to = pack_int8(to, prop->reorder_mode); - to = pack_int8(to, prop->transverse_expanded); - to = pack_int8(to, prop->homogeneous); - to = pack_float(to, prop->align); - to = pack_int8(to, prop->select_mode); - to = pack_int32(to, prop->icon_size); - to = pack_int8(to, prop->horizontal); - to = pack_int32(to, prop->standard_priority); - to = pack_int32(to, prop->items_count); - - return to; + write_int8(file, prop->reorder_mode); + write_int8(file, prop->transverse_expanded); + write_int8(file, prop->homogeneous); + write_float(file, prop->align); + write_int8(file, prop->select_mode); + write_int32(file, prop->icon_size); + write_int8(file, prop->horizontal); + write_int32(file, prop->standard_priority); + write_int32(file, prop->items_count); } -static char *_pack_tooltip_prop(char *to, tooltip_prop_t *prop) +static void _pack_tooltip_prop(FILE *file, tooltip_prop_t *prop) { if (!prop) - return to; + return; ui_viewer_log("tooltip prop: style : %s, window_mode : %d\n", prop->style, prop->window_mode); - to = pack_string(to, prop->style); - to = pack_int8(to, prop->window_mode); - - return to; + write_string(file, prop->style); + write_int8(file, prop->window_mode); } -static char *_pack_win_prop(char *to, win_prop_t *prop) +static void _pack_win_prop(FILE *file, win_prop_t *prop) { if (!prop) - return to; + return; ui_viewer_log("win prop: iconfield : %d, maximized : %d, modal : %d, icon_name : %s, " "withdrawn : %d, role : %s, size_step : [%d,%d], highlight_style : %s,\n\t" @@ -1360,44 +1280,42 @@ static char *_pack_win_prop(char *to, win_prop_t *prop) prop->size_base[0], prop->size_base[1], prop->quickpanel, prop->rotation_supported, prop->screen_dpi[0], prop->screen_dpi[1], prop->win_type); - to = pack_int8(to, prop->iconfield); - to = pack_int8(to, prop->maximized); - to = pack_int8(to, prop->modal); - to = pack_string(to, prop->icon_name); - to = pack_int8(to, prop->withdrawn); - to = pack_string(to, prop->role); - to = pack_int32(to, prop->size_step[0]); - to = pack_int32(to, prop->size_step[1]); - to = pack_string(to, prop->highlight_style); - to = pack_int8(to, prop->borderless); - to = pack_int8(to, prop->highlight_enabled); - to = pack_string(to, prop->title); - to = pack_int8(to, prop->alpha); - to = pack_int8(to, prop->urgent); - to = pack_int32(to, prop->rotation); - to = pack_int8(to, prop->sticky); - to = pack_int8(to, prop->highlight_animate); - to = pack_float(to, prop->aspect); - to = pack_int8(to, prop->indicator_opacity); - to = pack_int8(to, prop->demand_attention); - to = pack_int32(to, prop->layer); - to = pack_string(to, prop->profile); - to = pack_int8(to, prop->shaped); - to = pack_int8(to, prop->fullscreen); - to = pack_int8(to, prop->indicator_mode); - to = pack_int8(to, prop->conformant); - to = pack_int32(to, prop->size_base[0]); - to = pack_int32(to, prop->size_base[1]); - to = pack_int8(to, prop->quickpanel); - to = pack_int8(to, prop->rotation_supported); - to = pack_int32(to, prop->screen_dpi[0]); - to = pack_int32(to, prop->screen_dpi[1]); - to = pack_int8(to, prop->win_type); - - return to; + write_int8(file, prop->iconfield); + write_int8(file, prop->maximized); + write_int8(file, prop->modal); + write_string(file, prop->icon_name); + write_int8(file, prop->withdrawn); + write_string(file, prop->role); + write_int32(file, prop->size_step[0]); + write_int32(file, prop->size_step[1]); + write_string(file, prop->highlight_style); + write_int8(file, prop->borderless); + write_int8(file, prop->highlight_enabled); + write_string(file, prop->title); + write_int8(file, prop->alpha); + write_int8(file, prop->urgent); + write_int32(file, prop->rotation); + write_int8(file, prop->sticky); + write_int8(file, prop->highlight_animate); + write_float(file, prop->aspect); + write_int8(file, prop->indicator_opacity); + write_int8(file, prop->demand_attention); + write_int32(file, prop->layer); + write_string(file, prop->profile); + write_int8(file, prop->shaped); + write_int8(file, prop->fullscreen); + write_int8(file, prop->indicator_mode); + write_int8(file, prop->conformant); + write_int32(file, prop->size_base[0]); + write_int32(file, prop->size_base[1]); + write_int8(file, prop->quickpanel); + write_int8(file, prop->rotation_supported); + write_int32(file, prop->screen_dpi[0]); + write_int32(file, prop->screen_dpi[1]); + write_int8(file, prop->win_type); } -static char *pack_ui_obj_prop(char *to, Evas_Object *obj, const char *type_name) +static void pack_ui_obj_prop(FILE *file, Evas_Object *obj, const char *type_name) { ui_obj_prop_t obj_prop; enum ui_obj_category_t category; @@ -1421,11 +1339,11 @@ static char *pack_ui_obj_prop(char *to, Evas_Object *obj, const char *type_name) &obj_prop.size_padding[2], &obj_prop.size_padding[3]); obj_prop.render_op = evas_object_render_op_get(obj); - to = _pack_ui_obj_evas_prop(to, &obj_prop); + _pack_ui_obj_evas_prop(file, &obj_prop); category = _get_object_category(type_name); if (category == UI_UNDEFINED) { - return to; + return; } else if (category == UI_ELM) { ui_obj_elm_prop_t elm_prop; @@ -1440,7 +1358,7 @@ static char *pack_ui_obj_prop(char *to, Evas_Object *obj, const char *type_name) } _strncpy(elm_prop.type, elm_object_widget_type_get(obj), MAX_PATH_LENGTH); - to = _pack_ui_obj_elm_prop(to, &elm_prop); + _pack_ui_obj_elm_prop(file, &elm_prop); } else if (category == UI_EDJE) { ui_obj_edje_prop_t edje_prop; @@ -1451,13 +1369,13 @@ static char *pack_ui_obj_prop(char *to, Evas_Object *obj, const char *type_name) edje_object_size_min_get(obj, &edje_prop.size_min[0], &edje_prop.size_min[1]); edje_object_size_max_get(obj, &edje_prop.size_max[0], &edje_prop.size_max[1]); - to = _pack_ui_obj_edje_prop(to, &edje_prop); + _pack_ui_obj_edje_prop(file, &edje_prop); } code = _get_object_type_code(type_name); if (code == 0) { - return to; + return; } else if (code == UI_EVAS_IMAGE) { image_prop_t image_prop; @@ -1487,7 +1405,7 @@ static char *pack_ui_obj_prop(char *to, Evas_Object *obj, const char *type_name) image_prop.frame_count = 0; image_prop.evas_image_stride = evas_object_image_stride_get(obj); - to = _pack_image_prop(to, &image_prop); + _pack_image_prop(file, &image_prop); } else if (code == UI_EVAS_LINE) { line_prop_t line_prop; @@ -1496,7 +1414,7 @@ static char *pack_ui_obj_prop(char *to, Evas_Object *obj, const char *type_name) &(line_prop.xy[2]), &(line_prop.xy[3])); - to = _pack_line_prop(to, &line_prop); + _pack_line_prop(file, &line_prop); } else if (code == UI_EVAS_TEXT) { text_prop_t text_prop; const char *text_font; @@ -1529,7 +1447,7 @@ static char *pack_ui_obj_prop(char *to, Evas_Object *obj, const char *type_name) &(text_prop.style_pad[3])); text_prop.direction = evas_object_text_direction_get(obj); - to = _pack_text_prop(to, &text_prop); + _pack_text_prop(file, &text_prop); } else if (code == UI_EVAS_TEXTBLOCK) { textblock_prop_t textblock_prop; @@ -1539,7 +1457,7 @@ static char *pack_ui_obj_prop(char *to, Evas_Object *obj, const char *type_name) textblock_prop.newline = evas_object_textblock_legacy_newline_get(obj); _strncpy(textblock_prop.markup, evas_object_textblock_text_markup_get(obj), MAX_PATH_LENGTH); - to = _pack_textblock_prop(to, &textblock_prop); + _pack_textblock_prop(file, &textblock_prop); } else if (code == UI_EVAS_TABLE) { table_prop_t table_prop; @@ -1552,20 +1470,20 @@ static char *pack_ui_obj_prop(char *to, Evas_Object *obj, const char *type_name) evas_object_table_col_row_size_get(obj, &(table_prop.col_row_size[0]), &(table_prop.col_row_size[1])); - to = _pack_table_prop(to, &table_prop); + _pack_table_prop(file, &table_prop); } else if (code == UI_EVAS_BOX) { box_prop_t box_prop; evas_object_box_align_get(obj, &(box_prop.align[0]), &(box_prop.align[1])); - to = _pack_box_prop(to, &box_prop); + _pack_box_prop(file, &box_prop); } else if (code == UI_EVAS_GRID) { grid_prop_t grid_prop; grid_prop.mirrored = evas_object_grid_mirrored_get(obj); - to = _pack_grid_prop(to, &grid_prop); + _pack_grid_prop(file, &grid_prop); } else if (code == UI_EVAS_TEXTGRID) { textgrid_prop_t textgrid_prop; @@ -1574,7 +1492,7 @@ static char *pack_ui_obj_prop(char *to, Evas_Object *obj, const char *type_name) evas_object_textgrid_cell_size_get(obj, &(textgrid_prop.cell_size[0]), &(textgrid_prop.cell_size[1])); - to = _pack_textgrid_prop(to, &textgrid_prop); + _pack_textgrid_prop(file, &textgrid_prop); } else if (code == UI_ELM_BACKGROUND) { bg_prop_t bg_prop; @@ -1583,7 +1501,7 @@ static char *pack_ui_obj_prop(char *to, Evas_Object *obj, const char *type_name) &(bg_prop.color[2])); bg_prop.option = elm_bg_option_get(obj); - to = _pack_bg_prop(to, &bg_prop); + _pack_bg_prop(file, &bg_prop); } else if (code == UI_ELM_BUTTON) { button_prop_t button_prop; @@ -1591,13 +1509,13 @@ static char *pack_ui_obj_prop(char *to, Evas_Object *obj, const char *type_name) button_prop.gap_timeout = elm_button_autorepeat_gap_timeout_get(obj); button_prop.autorepeat = elm_button_autorepeat_get(obj); - to = _pack_button_prop(to, &button_prop); + _pack_button_prop(file, &button_prop); } else if (code == UI_ELM_CHECK) { check_prop_t check_prop; check_prop.state = elm_check_state_get(obj); - to = _pack_check_prop(to, &check_prop); + _pack_check_prop(file, &check_prop); } else if (code == UI_ELM_COLORSELECTOR) { colorselector_prop_t colorselector_prop; @@ -1608,13 +1526,13 @@ static char *pack_ui_obj_prop(char *to, Evas_Object *obj, const char *type_name) _strncpy(colorselector_prop.palette_name, elm_colorselector_palette_name_get(obj), MAX_PATH_LENGTH); colorselector_prop.mode = elm_colorselector_mode_get(obj); - to = _pack_colorselector_prop(to, &colorselector_prop); + _pack_colorselector_prop(file, &colorselector_prop); } else if (code == UI_ELM_CTXPOPUP) { ctxpopup_prop_t ctxpopup_prop; ctxpopup_prop.horizontal = elm_ctxpopup_horizontal_get(obj); - to = _pack_ctxpopup_prop(to, &ctxpopup_prop); + _pack_ctxpopup_prop(file, &ctxpopup_prop); } else if (code == UI_ELM_DATETIME) { datetime_prop_t datetime_prop; struct tm currtime; @@ -1630,7 +1548,7 @@ static char *pack_ui_obj_prop(char *to, Evas_Object *obj, const char *type_name) datetime_prop.value[6] = currtime.tm_wday; datetime_prop.value[7] = currtime.tm_yday; - to = _pack_datetime_prop(to, &datetime_prop); + _pack_datetime_prop(file, &datetime_prop); } else if (code == UI_ELM_ENTRY) { entry_prop_t entry_prop; @@ -1652,14 +1570,14 @@ static char *pack_ui_obj_prop(char *to, Evas_Object *obj, const char *type_name) _strncpy(entry_prop.selection, elm_entry_selection_get(obj), MAX_PATH_LENGTH); entry_prop.is_visible_format = elm_entry_cursor_is_visible_format_get(obj); - to = _pack_entry_prop(to, &entry_prop); + _pack_entry_prop(file, &entry_prop); } else if (code == UI_ELM_FLIP) { flip_prop_t flip_prop; flip_prop.interaction = elm_flip_interaction_get(obj); flip_prop.front_visible = elm_flip_front_visible_get(obj); - to = _pack_flip_prop(to, &flip_prop); + _pack_flip_prop(file, &flip_prop); } else if (code == UI_ELM_GENGRID) { gengrid_prop_t gengrid_prop; @@ -1681,7 +1599,7 @@ static char *pack_ui_obj_prop(char *to, Evas_Object *obj, const char *type_name) gengrid_prop.wheel_disabled = elm_gengrid_wheel_disabled_get(obj); gengrid_prop.items_count = elm_gengrid_items_count(obj); - to = _pack_gengrid_prop(to, &gengrid_prop); + _pack_gengrid_prop(file, &gengrid_prop); } else if (code == UI_ELM_GENLIST) { genlist_prop_t genlist_prop; @@ -1698,7 +1616,7 @@ static char *pack_ui_obj_prop(char *to, Evas_Object *obj, const char *type_name) genlist_prop.highlight_mode = elm_genlist_highlight_mode_get(obj); genlist_prop.realization_mode = elm_genlist_realization_mode_get(obj); - to = _pack_genlist_prop(to, &genlist_prop); + _pack_genlist_prop(file, &genlist_prop); } else if (code == UI_ELM_GLVIEW) { glview_prop_t glview_prop; @@ -1706,14 +1624,14 @@ static char *pack_ui_obj_prop(char *to, Evas_Object *obj, const char *type_name) &(glview_prop.size[1])); glview_prop.rotation = elm_glview_rotation_get(obj); - to = _pack_glview_prop(to, &glview_prop); + _pack_glview_prop(file, &glview_prop); } else if (code == UI_ELM_ICON) { icon_prop_t icon_prop; icon_prop.lookup = elm_icon_order_lookup_get(obj); _strncpy(icon_prop.standard, elm_icon_standard_get(obj), MAX_PATH_LENGTH); - to = _pack_icon_prop(to, &icon_prop); + _pack_icon_prop(file, &icon_prop); } else if (code == UI_ELM_IMAGE) { elm_image_prop_t elm_image_prop; @@ -1733,7 +1651,7 @@ static char *pack_ui_obj_prop(char *to, Evas_Object *obj, const char *type_name) elm_image_object_size_get(obj, &(elm_image_prop.size[0]), &(elm_image_prop.size[1])); - to = _pack_elm_image_prop(to, &elm_image_prop); + _pack_elm_image_prop(file, &elm_image_prop); } else if (code == UI_ELM_INDEX) { index_prop_t index_prop; @@ -1745,7 +1663,7 @@ static char *pack_ui_obj_prop(char *to, Evas_Object *obj, const char *type_name) index_prop.indicator_disabled = elm_index_indicator_disabled_get(obj); index_prop.item_level = elm_index_item_level_get(obj); - to = _pack_index_prop(to, &index_prop); + _pack_index_prop(file, &index_prop); } else if (code == UI_ELM_LABEL) { label_prop_t label_prop; @@ -1753,7 +1671,7 @@ static char *pack_ui_obj_prop(char *to, Evas_Object *obj, const char *type_name) label_prop.speed = elm_label_slide_speed_get(obj); label_prop.mode = elm_label_slide_mode_get(obj); - to = _pack_label_prop(to, &label_prop); + _pack_label_prop(file, &label_prop); } else if (code == UI_ELM_LIST) { list_prop_t list_prop; @@ -1764,7 +1682,7 @@ static char *pack_ui_obj_prop(char *to, Evas_Object *obj, const char *type_name) list_prop.multi_select_mode = elm_list_multi_select_mode_get(obj); list_prop.mode = elm_list_mode_get(obj); - to = _pack_list_prop(to, &list_prop); + _pack_list_prop(file, &list_prop); } else if (code == UI_ELM_MAP) { map_prop_t map_prop; @@ -1781,7 +1699,7 @@ static char *pack_ui_obj_prop(char *to, Evas_Object *obj, const char *type_name) elm_map_region_get(obj, &(map_prop.region[0]), &(map_prop.region[1])); - to = _pack_map_prop(to, &map_prop); + _pack_map_prop(file, &map_prop); } else if (code == UI_ELM_NOTIFY) { notify_prop_t notify_prop; @@ -1790,7 +1708,7 @@ static char *pack_ui_obj_prop(char *to, Evas_Object *obj, const char *type_name) notify_prop.allow_events = elm_notify_allow_events_get(obj); notify_prop.timeout = elm_notify_timeout_get(obj); - to = _pack_notify_prop(to, ¬ify_prop); + _pack_notify_prop(file, ¬ify_prop); } else if (code == UI_ELM_PANEL) { panel_prop_t panel_prop; @@ -1798,7 +1716,7 @@ static char *pack_ui_obj_prop(char *to, Evas_Object *obj, const char *type_name) panel_prop.hidden = elm_panel_hidden_get(obj); panel_prop.scrollable = elm_panel_scrollable_get(obj); - to = _pack_panel_prop(to, &panel_prop); + _pack_panel_prop(file, &panel_prop); } else if (code == UI_ELM_PHOTO) { photo_prop_t photo_prop; @@ -1807,7 +1725,7 @@ static char *pack_ui_obj_prop(char *to, Evas_Object *obj, const char *type_name) photo_prop.aspect_fixed = elm_photo_aspect_fixed_get(obj); photo_prop.size = elm_photo_size_get(obj); - to = _pack_photo_prop(to, &photo_prop); + _pack_photo_prop(file, &photo_prop); } else if (code == UI_ELM_PHOTOCAM) { photocam_prop_t photocam_prop; @@ -1819,7 +1737,7 @@ static char *pack_ui_obj_prop(char *to, Evas_Object *obj, const char *type_name) elm_photocam_image_size_get(obj, &(photocam_prop.image_size[0]), &(photocam_prop.image_size[1])); - to = _pack_photocam_prop(to, &photocam_prop); + _pack_photocam_prop(file, &photocam_prop); } else if (code == UI_ELM_POPUP) { popup_prop_t popup_prop; @@ -1830,7 +1748,7 @@ static char *pack_ui_obj_prop(char *to, Evas_Object *obj, const char *type_name) popup_prop.orient = elm_popup_orient_get(obj); popup_prop.timeout = elm_popup_timeout_get(obj); - to = _pack_popup_prop(to, &popup_prop); + _pack_popup_prop(file, &popup_prop); } else if (code == UI_ELM_PROGRESSBAR) { progressbar_prop_t progressbar_prop; @@ -1841,20 +1759,20 @@ static char *pack_ui_obj_prop(char *to, Evas_Object *obj, const char *type_name) progressbar_prop.horizontal = elm_progressbar_horizontal_get(obj); _strncpy(progressbar_prop.unit_format, elm_progressbar_unit_format_get(obj), MAX_PATH_LENGTH); - to = _pack_progressbar_prop(to, &progressbar_prop); + _pack_progressbar_prop(file, &progressbar_prop); } else if (code == UI_ELM_RADIO) { radio_prop_t radio_prop; radio_prop.state_value = elm_radio_state_value_get(obj); radio_prop.value = elm_radio_value_get(obj); - to = _pack_radio_prop(to, &radio_prop); + _pack_radio_prop(file, &radio_prop); } else if (code == UI_ELM_SEGMENTCONTROL) { segmencontrol_prop_t segmencontrol_prop; segmencontrol_prop.item_count = elm_segment_control_item_count_get(obj); - to = _pack_segmencontrol_prop(to, &segmencontrol_prop); + _pack_segmencontrol_prop(file, &segmencontrol_prop); } else if (code == UI_ELM_SLIDER) { slider_prop_t slider_prop; @@ -1862,7 +1780,7 @@ static char *pack_ui_obj_prop(char *to, Evas_Object *obj, const char *type_name) slider_prop.value = elm_slider_value_get(obj); _strncpy(slider_prop.format, elm_slider_indicator_format_get(obj), MAX_PATH_LENGTH); - to = _pack_slider_prop(to, &slider_prop); + _pack_slider_prop(file, &slider_prop); } else if (code == UI_ELM_SPINNER) { spinner_prop_t spinner_prop; @@ -1877,7 +1795,7 @@ static char *pack_ui_obj_prop(char *to, Evas_Object *obj, const char *type_name) spinner_prop.value = elm_spinner_value_get(obj); _strncpy(spinner_prop.format, elm_spinner_label_format_get(obj), MAX_PATH_LENGTH); - to = _pack_spinner_prop(to, &spinner_prop); + _pack_spinner_prop(file, &spinner_prop); } else if (code == UI_ELM_TOOLBAR) { toolbar_prop_t toolbar_prop; @@ -1891,14 +1809,14 @@ static char *pack_ui_obj_prop(char *to, Evas_Object *obj, const char *type_name) toolbar_prop.standard_priority = elm_toolbar_standard_priority_get(obj); toolbar_prop.items_count = elm_toolbar_items_count(obj); - to = _pack_toolbar_prop(to, &toolbar_prop); + _pack_toolbar_prop(file, &toolbar_prop); } else if (code == UI_ELM_TOOLTIP) { tooltip_prop_t tooltip_prop; _strncpy(tooltip_prop.style, elm_object_tooltip_style_get(obj), MAX_PATH_LENGTH); tooltip_prop.window_mode = elm_object_tooltip_window_mode_get(obj); - to = _pack_tooltip_prop(to, &tooltip_prop); + _pack_tooltip_prop(file, &tooltip_prop); } else if (code == UI_ELM_WIN) { win_prop_t win_prop; @@ -1935,11 +1853,8 @@ static char *pack_ui_obj_prop(char *to, Evas_Object *obj, const char *type_name) elm_win_screen_dpi_get(obj, &(win_prop.screen_dpi[0]), &(win_prop.screen_dpi[1])); win_prop.win_type = elm_win_type_get(obj); - to = _pack_win_prop(to, &win_prop); - + _pack_win_prop(file, &win_prop); } - - return to; } Eina_Bool _get_shot_in_bg(Evas_Object *obj) diff --git a/ui_viewer/ui_viewer_data.h b/ui_viewer/ui_viewer_data.h index a16ef41..3dfb0ba 100644 --- a/ui_viewer/ui_viewer_data.h +++ b/ui_viewer/ui_viewer_data.h @@ -505,47 +505,55 @@ typedef struct _win_prop_t { } win_prop_t; char *pack_string(char *to, const char *str); -char *pack_ui_obj_info_list(char *to, enum rendering_option_t rendering, +void pack_ui_obj_info_list(FILE *file, enum rendering_option_t rendering, Eina_Bool *cancelled); char *pack_ui_obj_screenshot(char *to, Evas_Object *obj); enum hierarchy_status_t get_hierarchy_status(void); void set_hierarchy_status(enum hierarchy_status_t status); -static inline char *pack_int8(char *to, uint8_t val) -{ - *(uint8_t *)to = val; - return to + sizeof(uint8_t); -} - static inline char *pack_int32(char *to, uint32_t val) { *(uint32_t *)to = val; return to + sizeof(uint32_t); } -static inline char *pack_int64(char *to, uint64_t val) +static inline void write_int8(FILE *file, uint8_t val) { - *(uint64_t *)to = val; - return to + sizeof(uint64_t); + fwrite(&val, sizeof(val), 1, file); } -static inline char *pack_float(char *to, float val) +static inline void write_int32(FILE *file, uint32_t val) { - *(float *)to = val; - return to + sizeof(float); + fwrite(&val, sizeof(val), 1, file); } -static inline char *pack_ptr(char *to, const void *val) + +static inline void write_int64(FILE *file, uint64_t val) +{ + fwrite(&val, sizeof(val), 1, file); +} + +static inline void write_float(FILE *file, float val) +{ + fwrite(&val, sizeof(val), 1, file); +} +static inline void write_ptr(FILE *file, const void *val) +{ + uint64_t ptr = (uint64_t)(uintptr_t)val; + + fwrite(&ptr, sizeof(ptr), 1, file); +} + +static inline void write_timeval(FILE *file, struct timeval tv) { - *(uint64_t *)to = (uint64_t)(uintptr_t)val; - return to + sizeof(uint64_t); + write_int32(file, tv.tv_sec); + write_int32(file, tv.tv_usec * 1000); } -static inline char *pack_timeval(char *to, struct timeval tv) +static inline void write_string(FILE *file, const char *str) { - to = pack_int32(to, tv.tv_sec); - to = pack_int32(to, tv.tv_usec * 1000); + size_t len = strlen(str) + 1; - return to; + fwrite(str, len, 1, file); } #endif /* _UI_VIEWER_DATA_ */ diff --git a/ui_viewer/ui_viewer_utils.c b/ui_viewer/ui_viewer_utils.c index c3da116..18f8e78 100644 --- a/ui_viewer/ui_viewer_utils.c +++ b/ui_viewer/ui_viewer_utils.c @@ -43,6 +43,11 @@ #include "ui_viewer_utils.h" #include "ui_viewer_data.h" +struct temp_file_t { + FILE *file; + char *name; +}; + static const ssize_t TMP_BUF_SIZE = 262144; static const char log_filename[] = "/tmp/uilib.log"; static pthread_mutex_t log_lock = PTHREAD_MUTEX_INITIALIZER; @@ -177,21 +182,42 @@ bool print_log_fmt(int msgType, const char *func_name, int line, ...) return (res == len); } -static char *pack_string_to_file(char *to, char *st, ssize_t data_len) +static int tmp_file_open(struct temp_file_t *tmp_file) { char template_name[] = TMP_DIR"/swap_ui_viewer_XXXXXX"; FILE *file; + mktemp(template_name); file = fopen(template_name, "w"); - if (file != NULL) { - fwrite(st, data_len, 1, file); - fclose(file); - } - to = pack_string(to, template_name); + if (file == NULL) + return -1; + + if (tmp_file->name != NULL) + free(tmp_file->name); + + tmp_file->name = malloc(strlen(template_name) + 1); + if (tmp_file->name == NULL) + goto tmp_file_open_no_mem; + + strcpy(tmp_file->name, template_name); + + tmp_file->file = file; - return to; + return 0; + +tmp_file_open_no_mem: + fclose(file); + + return -ENOMEM; +} + +static void tmp_file_close(struct temp_file_t *tmp_file) +{ + free(tmp_file->name); + fclose(tmp_file->file); } + bool print_log_ui_viewer_hierarchy_status(enum ErrorCode *err_code) { log_t log; @@ -249,7 +275,7 @@ void* print_log_ui_viewer_info_list(void *prendering) log_t log; ssize_t res, len; char *log_ptr, *tmp_ptr; - char *tmp_buf; + struct temp_file_t tmp_f; struct timeval start_tv, finish_tv, tv; Eina_Bool rendering, cancelled = EINA_FALSE; @@ -263,14 +289,11 @@ void* print_log_ui_viewer_info_list(void *prendering) rendering = *(Eina_Bool*)prendering; - tmp_buf = malloc(TMP_BUF_SIZE); - if (!tmp_buf) { - ui_viewer_log("Cannot alloc buffer: %d bytes\n", TMP_BUF_SIZE); + if (tmp_file_open(&tmp_f) != 0) return NULL; - } gettimeofday(&start_tv, NULL); - tmp_ptr = pack_ui_obj_info_list(tmp_buf, rendering, &cancelled); + pack_ui_obj_info_list(tmp_f.file, rendering, &cancelled); gettimeofday(&finish_tv, NULL); timersub(&finish_tv, &start_tv, &tv); ui_viewer_log("getting hierarchy time : %d sec, %d usec\n", @@ -278,7 +301,7 @@ void* print_log_ui_viewer_info_list(void *prendering) if (!cancelled) { log.type = APP_MSG_GET_UI_HIERARCHY_DATA; - log_ptr = pack_string_to_file(log.data, tmp_buf, tmp_ptr - tmp_buf); + log_ptr = pack_string(log.data, tmp_f.name); log.length = log_ptr - log.data; len = sizeof(log.type) + sizeof(log.length) + log.length; @@ -286,14 +309,15 @@ void* print_log_ui_viewer_info_list(void *prendering) res = send(gTraceInfo.socket.daemonSock, &log, len, 0); pthread_mutex_unlock(&(gTraceInfo.socket.sockMutex)); - ui_viewer_log("getting hierarchy filename: %s filesize: %d\n", - log.data, tmp_ptr - tmp_buf); + ui_viewer_log("getting hierarchy filename: %s\n", + log.data); if (res != len) ui_viewer_log("can't send hierarchy info\n"); set_hierarchy_status(HIERARCHY_NOT_RUNNING); } - free(tmp_buf); + + tmp_file_close(&tmp_f); return NULL; } -- 2.7.4