Fix init error handling of array, benchmark, counter,main,

rectangle and stringshare modules. Patch by Andre Dieb, modified
by me (formatting and fix for the Windows code in eina_counter)


SVN revision: 40915
This commit is contained in:
Vincent Torri 2009-06-06 04:22:21 +00:00
parent 46836c875f
commit 33cfc873ec
7 changed files with 165 additions and 50 deletions

View File

@ -9,4 +9,4 @@ Peter "pfritz" Wehrfritz <peter.wehrfritz@web.de>
Arnaud de Turckheim "quarium" <quarium@gmail.com> Arnaud de Turckheim "quarium" <quarium@gmail.com>
Alexandre "diaxen" Becoulet <diaxen@free.fr> Alexandre "diaxen" Becoulet <diaxen@free.fr>
Albin Tonnerre <albin.tonnerre@gmail.com> Albin Tonnerre <albin.tonnerre@gmail.com>
Andre Dieb <andre.martins@ee.ufcg.edu.br> Andre Dieb <andre.dieb@gmail.com>

View File

@ -148,6 +148,7 @@
#include <assert.h> #include <assert.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <stdio.h>
#include "eina_types.h" #include "eina_types.h"
#include "eina_error.h" #include "eina_error.h"
@ -358,24 +359,34 @@ eina_array_grow(Eina_Array *array)
EAPI int EAPI int
eina_array_init(void) eina_array_init(void)
{ {
if (!_eina_array_init_count) if (!_eina_array_init_count)
{ {
eina_error_init(); if (!eina_error_init())
eina_magic_string_init(); {
fprintf(stderr, "Could not initialize eina error module.\n");
return 0;
}
eina_magic_string_set(EINA_MAGIC_ITERATOR, if (!eina_magic_string_init())
"Eina Iterator"); {
eina_magic_string_set(EINA_MAGIC_ACCESSOR, EINA_ERROR_PERR("ERROR: Could not initialize eina magic string module.\n");
"Eina Accessor"); eina_error_shutdown();
eina_magic_string_set(EINA_MAGIC_ARRAY, return 0;
"Eina Array"); }
eina_magic_string_set(EINA_MAGIC_ARRAY_ITERATOR,
"Eina Array Iterator");
eina_magic_string_set(EINA_MAGIC_ARRAY_ACCESSOR,
"Eina Array Accessor");
}
return ++_eina_array_init_count; eina_magic_string_set(EINA_MAGIC_ITERATOR,
"Eina Iterator");
eina_magic_string_set(EINA_MAGIC_ACCESSOR,
"Eina Accessor");
eina_magic_string_set(EINA_MAGIC_ARRAY,
"Eina Array");
eina_magic_string_set(EINA_MAGIC_ARRAY_ITERATOR,
"Eina Array Iterator");
eina_magic_string_set(EINA_MAGIC_ARRAY_ACCESSOR,
"Eina Array Accessor");
}
return ++_eina_array_init_count;
} }
/** /**

View File

@ -145,11 +145,29 @@ eina_benchmark_init(void)
if (_eina_benchmark_count > 1) return _eina_benchmark_count; if (_eina_benchmark_count > 1) return _eina_benchmark_count;
eina_error_init(); if (!eina_error_init())
eina_array_init(); {
eina_counter_init(); fprintf(stderr, "Could not initialize eina error module.\n");
return 0;
}
if (!eina_array_init())
{
EINA_ERROR_PERR("Could not initialize eina array module.\n");
goto array_init_error;
}
if (!eina_counter_init())
{
EINA_ERROR_PERR("Could not initialize eina counter module.\n");
goto counter_init_error;
}
return _eina_benchmark_count; return _eina_benchmark_count;
counter_init_error:
eina_array_shutdown();
array_init_error:
eina_error_shutdown();
return 0;
} }
/** /**

View File

@ -252,12 +252,16 @@ eina_counter_init(void)
if (_eina_counter_init_count == 1) if (_eina_counter_init_count == 1)
{ {
eina_error_init(); if (!eina_error_init())
{
fprintf(stderr, "Could not initialize eina error module.\n");
return 0;
}
#ifdef _WIN32 #ifdef _WIN32
if (!QueryPerformanceFrequency(&_eina_counter_frequency)) if (!QueryPerformanceFrequency(&_eina_counter_frequency))
{ {
EINA_COUNTER_ERROR_WINDOWS = eina_error_msg_register("Change your OS, you moron !"); EINA_COUNTER_ERROR_WINDOWS = eina_error_msg_register("Change your OS, you moron !");
_eina_counter_init_count--; eina_error_shutdown();
return 0; return 0;
} }
#endif /* _WIN2 */ #endif /* _WIN2 */

View File

@ -16,6 +16,8 @@
* if not, see <http://www.gnu.org/licenses/>. * if not, see <http://www.gnu.org/licenses/>.
*/ */
#include <stdio.h>
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
# include "config.h" # include "config.h"
#endif #endif
@ -47,18 +49,72 @@ eina_init(void)
{ {
if (_eina_main_count) goto finish_init; if (_eina_main_count) goto finish_init;
eina_error_init(); if (!eina_error_init())
eina_hash_init(); {
eina_stringshare_init(); fprintf(stderr, "Could not initialize eina error module.\n");
eina_list_init(); return 0;
eina_array_init(); }
eina_counter_init(); if (!eina_hash_init())
eina_benchmark_init(); {
eina_magic_string_init(); EINA_ERROR_PERR("Could not initialize eina hash module.\n");
eina_rectangle_init(); goto hash_init_error;
}
if (!eina_stringshare_init())
{
EINA_ERROR_PERR("Could not initialize eina stringshare module.\n");
goto stringshare_init_error;
}
if (!eina_list_init())
{
EINA_ERROR_PERR("Could not initialize eina list module.\n");
goto list_init_error;
}
if (!eina_array_init())
{
EINA_ERROR_PERR("Could not initialize eina array module.\n");
goto array_init_error;
}
if (!eina_counter_init())
{
EINA_ERROR_PERR("Could not initialize eina counter module.\n");
goto counter_init_error;
}
if (!eina_benchmark_init())
{
EINA_ERROR_PERR("Could not initialize eina benchmark module.\n");
goto benchmark_init_error;
}
if (!eina_magic_string_init())
{
EINA_ERROR_PERR("Could not initialize eina magic string module.\n");
goto magic_string_init_error;
}
if (!eina_rectangle_init())
{
EINA_ERROR_PERR("Could not initialize eina rectangle module.\n");
goto rectangle_init_error;
}
finish_init: finish_init:
return ++_eina_main_count; return ++_eina_main_count;
rectangle_init_error:
eina_magic_string_shutdown();
magic_string_init_error:
eina_benchmark_shutdown();
benchmark_init_error:
eina_counter_shutdown();
counter_init_error:
eina_array_shutdown();
array_init_error:
eina_list_shutdown();
list_init_error:
eina_stringshare_shutdown();
stringshare_init_error:
eina_hash_shutdown();
hash_init_error:
eina_error_shutdown();
return 0;
} }
EAPI int EAPI int

View File

@ -20,6 +20,7 @@
# include "config.h" # include "config.h"
#endif #endif
#include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include "eina_rectangle.h" #include "eina_rectangle.h"
@ -353,8 +354,16 @@ eina_rectangle_init(void)
if (_eina_rectangle_init_count > 1) return _eina_rectangle_init_count; if (_eina_rectangle_init_count > 1) return _eina_rectangle_init_count;
eina_error_init(); if (!eina_error_init())
eina_mempool_init(); {
fprintf(stderr, "Could not initialize eina error module.\n");
return 0;
}
if (!eina_mempool_init())
{
EINA_ERROR_PERR("Could not initialize eina mempool module.\n");
goto mempool_init_error;
}
#ifdef EINA_DEFAULT_MEMPOOL #ifdef EINA_DEFAULT_MEMPOOL
choice = "pass_through"; choice = "pass_through";
@ -364,14 +373,21 @@ eina_rectangle_init(void)
#endif #endif
_eina_rectangle_mp = eina_mempool_new(choice, "rectangle", NULL, _eina_rectangle_mp = eina_mempool_new(choice, "rectangle", NULL,
sizeof (Eina_Rectangle_Alloc) + sizeof (Eina_Rectangle), 42); sizeof (Eina_Rectangle_Alloc) + sizeof (Eina_Rectangle), 42);
if (!_eina_rectangle_mp) if (!_eina_rectangle_mp)
{ {
EINA_ERROR_PERR("ERROR: Mempool for rectangle cannot be allocated in list init.\n"); EINA_ERROR_PERR("ERROR: Mempool for rectangle cannot be allocated in list init.\n");
abort(); goto init_error;
} }
return _eina_rectangle_init_count; return _eina_rectangle_init_count;
init_error:
eina_mempool_shutdown();
mempool_init_error:
eina_error_shutdown();
return 0;
} }
EAPI int EAPI int

View File

@ -825,23 +825,33 @@ eina_stringshare_init(void)
*/ */
if (!_eina_stringshare_init_count) if (!_eina_stringshare_init_count)
{ {
share = calloc(1, sizeof(Eina_Stringshare)); share = calloc(1, sizeof(Eina_Stringshare));
if (!share) if (!share)
return 0; return 0;
eina_error_init(); if (!eina_error_init())
eina_magic_string_init(); {
fprintf(stderr, "Could not initialize eina error module.\n");
return 0;
}
eina_magic_string_set(EINA_MAGIC_STRINGSHARE, if (!eina_magic_string_init())
"Eina Stringshare"); {
eina_magic_string_set(EINA_MAGIC_STRINGSHARE_HEAD, EINA_ERROR_PERR("ERROR: Could not initialize eina magic string module.\n");
"Eina Stringshare Head"); eina_error_shutdown();
eina_magic_string_set(EINA_MAGIC_STRINGSHARE_NODE, return 0;
"Eina Stringshare Node"); }
EINA_MAGIC_SET(share, EINA_MAGIC_STRINGSHARE);
_eina_stringshare_small_init(); eina_magic_string_set(EINA_MAGIC_STRINGSHARE,
_eina_stringshare_population_init(); "Eina Stringshare");
eina_magic_string_set(EINA_MAGIC_STRINGSHARE_HEAD,
"Eina Stringshare Head");
eina_magic_string_set(EINA_MAGIC_STRINGSHARE_NODE,
"Eina Stringshare Node");
EINA_MAGIC_SET(share, EINA_MAGIC_STRINGSHARE);
_eina_stringshare_small_init();
_eina_stringshare_population_init();
} }
return ++_eina_stringshare_init_count; return ++_eina_stringshare_init_count;