enlightenment/src/bin/e_randr_11_serialization.c

140 lines
4.4 KiB
C
Raw Normal View History

#include "e_randr_private.h"
#include "e_randr.h"
/**********************************************************************
*
* Storage/Restorage of setups
*
**********************************************************************
*/
//New helper functions
2012-03-08 03:37:54 -08:00
E_Randr_Serialized_Setup_11 *
_serialized_setup_11_new(void)
{
E_Randr_Serialized_Setup_11 *ss;
Ecore_X_Randr_Screen_Size_MM *size;
Ecore_X_Randr_Orientation ori = ECORE_X_RANDR_ORIENTATION_ROT_0;
Ecore_X_Randr_Refresh_Rate rate = 0;
ss = malloc(sizeof(*ss));
if (e_randr_screen_info.randr_version == ECORE_X_RANDR_1_1)
{
if (e_randr_screen_info.rrvd_info.randr_info_11->csize_index >= e_randr_screen_info.rrvd_info.randr_info_11->nsizes) goto _serialized_setup_11_new_failed_free_ss;
size = e_randr_screen_info.rrvd_info.randr_info_11->sizes + e_randr_screen_info.rrvd_info.randr_info_11->csize_index;
if (!size) goto _serialized_setup_11_new_failed_free_ss;;
rate = e_randr_screen_info.rrvd_info.randr_info_11->current_rate;
ori = e_randr_screen_info.rrvd_info.randr_info_11->corientation;
ss->size.width = size->width;
ss->size.width_mm = size->width_mm;
ss->size.height = size->height;
ss->size.height_mm = size->height_mm;
}
else if (e_randr_screen_info.randr_version > ECORE_X_RANDR_1_1)
{
ecore_x_randr_screen_primary_output_current_size_get(e_randr_screen_info.root, &ss->size.width, &ss->size.height, &ss->size.width_mm, &ss->size.height_mm, NULL);
rate = ecore_x_randr_screen_primary_output_current_refresh_rate_get(e_randr_screen_info.root);
ori = ecore_x_randr_screen_primary_output_orientation_get(e_randr_screen_info.root);
}
ss->refresh_rate = rate;
ss->orientation = ori;
return ss;
_serialized_setup_11_new_failed_free_ss:
free(ss);
return NULL;
}
//Update/value set helper functions
2012-03-08 03:37:54 -08:00
E_Randr_Serialized_Setup_11 *
_serialized_setup_11_update(E_Randr_Serialized_Setup_11 *ss_11)
{
if (ss_11)
e_randr_11_serialized_setup_free(ss_11);
ss_11 = _serialized_setup_11_new();
return ss_11;
}
void
_11_store_configuration(E_Randr_Configuration_Store_Modifier modifier __UNUSED__)
{
if (!e_config->randr_serialized_setup)
e_config->randr_serialized_setup = e_randr_serialized_setup_new();
if (e_config->randr_serialized_setup->serialized_setup_11)
e_config->randr_serialized_setup->serialized_setup_11 = _serialized_setup_11_update(e_config->randr_serialized_setup->serialized_setup_11);
else
e_config->randr_serialized_setup->serialized_setup_11 = _serialized_setup_11_new();
}
EAPI void e_randr_11_store_configuration(E_Randr_Configuration_Store_Modifier modifier __UNUSED__)
{
_11_store_configuration(modifier);
e_config_save_queue();
}
//Free helper functions
2012-03-08 03:37:54 -08:00
void
_e_randr_serialized_setup_11_free(E_Randr_Serialized_Setup_11 *ss11)
{
free(ss11);
}
EINTERN void
e_randr_11_serialized_setup_free(E_Randr_Serialized_Setup_11 *ss_11)
{
_e_randr_serialized_setup_11_free(ss_11);
}
2012-03-08 03:37:54 -08:00
Eina_Bool
_11_try_restore_configuration(void)
{
Dear all, I'm attaching a patch for some minor bugs in the e17. Please take a look at attached patch. 01. missing E_FREE(inst) File: src/bin/e_exec.c: 347 Function: _e_exec_cb_exec 02. missing null check File: src/bin/e_fm.c: 10173 Function: _e_fm_error_dialog I'm not sure, but all other codes always check the return value of e_fm2_op_registry_entry_get except here. 03. missing free(slave) File: src/bin/e_fm_ipc.c: 804 Function: _e_fm_ipc_slave_run 04. eina_list_remove after free File: src/bin/e_fm/e_fm_ipc.c :1325 Function: _e_fm_ipc_cb_fop_trash_idler 05. invalid check for _udisks_del, it might be _udisks_chg. File: src/bin/e_fm/e_fm_main_udisks.c : 162 Function: _e_fm_main_udisks_test 06. uninitialized gx and gy values File: src/bin/e_gadcon_popup.c: 172 Function: _e_gadcon_popup_position These could be changed in e_gadcon_client_geometry_get if gcc->o_base is null. 07. unnecessary code 'evas = e_win_evas_get(dia->win)' File: src/bin/e_import_config_dialog.c: 456 Function: e_import_config_dialog_show 08. missing free(sizes) src/bin/e_randr_11_serialization.c: 136 Function: _11_try_restore_configuration() 09. unnecessary variable output_info File: src/bin/e_randr_12.c: 560 Function: _output_property_change_event_cb 10. eina_list_remove after free File: src/bin/e_randr_12_serialization.c : 357 Function: _12_serialized_setup_update 11. no check of the return value of symlink. File: src/bin/e_widget_fsel.c: 84 Function: _e_wid_fsel_favorites_add 12. no evr->var check before comparing string values File: src/modules/conf_applications/e_int_config_defapps.c: 432 Function: _basic_apply 13. missing error message or check return value of edje_file_group_exists File: src/modules/conf_theme/e_int_config_theme.c: 333 Function: _open_test_cb Anyway, I've added e_util_dialog_show if failed. Is it okay? 14. missing index range check File: src/modules/gadman/e_mod_config.c: 153 Function: _cb_config It could read negative array index, because return value of e_widget_ilist_selected_get might be negative. BR, Gwanglim SVN revision: 80020
2012-12-02 23:54:07 -08:00
Ecore_X_Randr_Screen_Size_MM *stored_size, *sizes = NULL;
int i = 0, nsizes;
#define SIZE_EQUAL(size) \
((stored_size->width == (size).width) \
&& (stored_size->height == (size).height) \
&& (stored_size->width_mm == (size).width_mm) \
&& (stored_size->height_mm == (size).height_mm))
if (!e_config->randr_serialized_setup->serialized_setup_11) return EINA_FALSE;
stored_size = &e_config->randr_serialized_setup->serialized_setup_11->size;
if (e_randr_screen_info.randr_version == ECORE_X_RANDR_1_1)
{
int x;
for (x = 0; x < e_randr_screen_info.rrvd_info.randr_info_11->nsizes; x++)
{
if (SIZE_EQUAL(e_randr_screen_info.rrvd_info.randr_info_11->sizes[x]))
{
return ecore_x_randr_screen_primary_output_size_set(e_randr_screen_info.root, i);
}
i++;
}
}
else if (e_randr_screen_info.randr_version > ECORE_X_RANDR_1_1)
{
sizes = ecore_x_randr_screen_primary_output_sizes_get(e_randr_screen_info.root, &nsizes);
for (i = 0; i < nsizes; i++)
{
if (SIZE_EQUAL(sizes[i]))
{
free(sizes);
return ecore_x_randr_screen_primary_output_size_set(e_randr_screen_info.root, i);
}
}
}
#undef SIZE_EQUAL
Dear all, I'm attaching a patch for some minor bugs in the e17. Please take a look at attached patch. 01. missing E_FREE(inst) File: src/bin/e_exec.c: 347 Function: _e_exec_cb_exec 02. missing null check File: src/bin/e_fm.c: 10173 Function: _e_fm_error_dialog I'm not sure, but all other codes always check the return value of e_fm2_op_registry_entry_get except here. 03. missing free(slave) File: src/bin/e_fm_ipc.c: 804 Function: _e_fm_ipc_slave_run 04. eina_list_remove after free File: src/bin/e_fm/e_fm_ipc.c :1325 Function: _e_fm_ipc_cb_fop_trash_idler 05. invalid check for _udisks_del, it might be _udisks_chg. File: src/bin/e_fm/e_fm_main_udisks.c : 162 Function: _e_fm_main_udisks_test 06. uninitialized gx and gy values File: src/bin/e_gadcon_popup.c: 172 Function: _e_gadcon_popup_position These could be changed in e_gadcon_client_geometry_get if gcc->o_base is null. 07. unnecessary code 'evas = e_win_evas_get(dia->win)' File: src/bin/e_import_config_dialog.c: 456 Function: e_import_config_dialog_show 08. missing free(sizes) src/bin/e_randr_11_serialization.c: 136 Function: _11_try_restore_configuration() 09. unnecessary variable output_info File: src/bin/e_randr_12.c: 560 Function: _output_property_change_event_cb 10. eina_list_remove after free File: src/bin/e_randr_12_serialization.c : 357 Function: _12_serialized_setup_update 11. no check of the return value of symlink. File: src/bin/e_widget_fsel.c: 84 Function: _e_wid_fsel_favorites_add 12. no evr->var check before comparing string values File: src/modules/conf_applications/e_int_config_defapps.c: 432 Function: _basic_apply 13. missing error message or check return value of edje_file_group_exists File: src/modules/conf_theme/e_int_config_theme.c: 333 Function: _open_test_cb Anyway, I've added e_util_dialog_show if failed. Is it okay? 14. missing index range check File: src/modules/gadman/e_mod_config.c: 153 Function: _cb_config It could read negative array index, because return value of e_widget_ilist_selected_get might be negative. BR, Gwanglim SVN revision: 80020
2012-12-02 23:54:07 -08:00
free(sizes);
return EINA_FALSE;
}