From 51808185aef5858ecfe879351fbfa9a9814cb674 Mon Sep 17 00:00:00 2001 From: mquinson Date: Mon, 14 Apr 2008 16:18:34 +0000 Subject: [PATCH] Use exception where appropriate instead of integer return git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@5341 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- src/java/jmsg.c | 25 +++++++++++++++++-------- src/xbt/xbt_context.c | 18 ++++++------------ src/xbt/xbt_context_java.c | 4 +--- src/xbt/xbt_context_private.h | 11 +++++------ src/xbt/xbt_context_sysv.c | 4 +--- src/xbt/xbt_context_thread.c | 4 +--- 6 files changed, 31 insertions(+), 35 deletions(-) diff --git a/src/java/jmsg.c b/src/java/jmsg.c index e74aec4f8d..61fef1cdd1 100644 --- a/src/java/jmsg.c +++ b/src/java/jmsg.c @@ -988,17 +988,26 @@ Java_simgrid_msg_MsgNative_allHosts(JNIEnv * env, jclass cls_arg) { JNIEXPORT void JNICALL Java_simgrid_msg_MsgNative_selectContextFactory(JNIEnv * env, jclass class,jstring jname) { - int rv; + char *errmsg=NULL; + xbt_ex_t e; - /* get the C string from the java string*/ - const char* name = (*env)->GetStringUTFChars(env, jname, 0); - - rv = xbt_context_select_factory(name); - + /* get the C string from the java string*/ + const char* name = (*env)->GetStringUTFChars(env, jname, 0); + + TRY { + xbt_context_select_factory(name); + } CATCH(e) { + errmsg = xbt_strdup(e.msg); + xbt_ex_free(e); + } + (*env)->ReleaseStringUTFChars(env, jname, name); - if(rv) - jxbt_throw_native(env, xbt_strdup("xbt_select_context_factory() failed")); + if(errmsg) { + char *thrown = bprintf("xbt_select_context_factory() failed: %s",errmsg); + free(errmsg); + jxbt_throw_native(env, thrown); + } } JNIEXPORT void JNICALL diff --git a/src/xbt/xbt_context.c b/src/xbt/xbt_context.c index ea501608c7..712d7c3dd3 100644 --- a/src/xbt/xbt_context.c +++ b/src/xbt/xbt_context.c @@ -277,26 +277,20 @@ xbt_context_select_factory(const char* name) return 0; } -int +void xbt_context_init_factory_by_name(xbt_context_factory_t* factory, const char* name) { if(!strcmp(name,"java")) - { - return xbt_ctx_java_factory_init(factory); - } + xbt_ctx_java_factory_init(factory); #ifdef CONTEXT_THREADS else if(!strcmp(name,"thread")) - { - return xbt_ctx_thread_factory_init(factory); - } + xbt_ctx_thread_factory_init(factory); #elif !defined(WIN32) else if(!strcmp(name,"sysv")) - { - return xbt_ctx_sysv_factory_init(factory); - } + xbt_ctx_sysv_factory_init(factory); #endif - - return EINVAL; + + THROW1(not_found_error, 0,"Factory '%s' does not exist",name); } /** Garbage collection diff --git a/src/xbt/xbt_context_java.c b/src/xbt/xbt_context_java.c index bf75e6d3ac..156fba3c41 100644 --- a/src/xbt/xbt_context_java.c +++ b/src/xbt/xbt_context_java.c @@ -73,7 +73,7 @@ xbt_ctx_java_ex_terminate(xbt_ex_t *e) abort(); } -int +void xbt_ctx_java_factory_init(xbt_context_factory_t* factory) { /* context exception handlers */ @@ -87,8 +87,6 @@ xbt_ctx_java_factory_init(xbt_context_factory_t* factory) (*factory)->finalize = xbt_ctx_java_factory_finalize; (*factory)->create_maestro_context = xbt_ctx_java_factory_create_maestro_context; (*factory)->name = "ctx_java_factory"; - - return 0; } static int diff --git a/src/xbt/xbt_context_private.h b/src/xbt/xbt_context_private.h index bf01c289bf..54155e98f0 100644 --- a/src/xbt/xbt_context_private.h +++ b/src/xbt/xbt_context_private.h @@ -88,17 +88,16 @@ xbt_context_select_factory(const char* name); /** * This function initialize a context factory from the name specified by the parameter * name. - * If successful the factory specified by the parameter factory is initialized and the - * function returns 0. Otherwise the function returns the error code. + * If the factory cannot be found, an exception is raised. */ -int +void xbt_context_init_factory_by_name(xbt_context_factory_t* factory, const char* name); /* All factories init */ -int xbt_ctx_thread_factory_init(xbt_context_factory_t* factory); -int xbt_ctx_sysv_factory_init(xbt_context_factory_t* factory); -int xbt_ctx_java_factory_init(xbt_context_factory_t* factory); +void xbt_ctx_thread_factory_init(xbt_context_factory_t* factory); +void xbt_ctx_sysv_factory_init(xbt_context_factory_t* factory); +void xbt_ctx_java_factory_init(xbt_context_factory_t* factory); diff --git a/src/xbt/xbt_context_sysv.c b/src/xbt/xbt_context_sysv.c index 9295621d5c..2a36b6e26d 100644 --- a/src/xbt/xbt_context_sysv.c +++ b/src/xbt/xbt_context_sysv.c @@ -83,7 +83,7 @@ xbt_ctx_sysv_ex_terminate(xbt_ex_t *e) } -int +void xbt_ctx_sysv_factory_init(xbt_context_factory_t* factory) { /* context exception */ @@ -97,8 +97,6 @@ xbt_ctx_sysv_factory_init(xbt_context_factory_t* factory) /* context exception handlers */ __xbt_ex_ctx = xbt_ctx_sysv_ex_ctx; __xbt_ex_terminate = xbt_ctx_sysv_ex_terminate; - - return 0; } static int diff --git a/src/xbt/xbt_context_thread.c b/src/xbt/xbt_context_thread.c index e39ff91e6f..ae325cf185 100644 --- a/src/xbt/xbt_context_thread.c +++ b/src/xbt/xbt_context_thread.c @@ -60,7 +60,7 @@ xbt_ctx_thread_resume(xbt_context_t context); static void* xbt_ctx_thread_wrapper(void* param); -int +void xbt_ctx_thread_factory_init(xbt_context_factory_t* factory) { *factory = xbt_new0(s_xbt_context_factory_t,1); @@ -69,8 +69,6 @@ xbt_ctx_thread_factory_init(xbt_context_factory_t* factory) (*factory)->finalize = xbt_ctx_thread_factory_finalize; (*factory)->create_maestro_context = xbt_ctx_thread_factory_create_master_context; (*factory)->name = "ctx_thread_factory"; - - return 0; } static int -- 2.20.1