[Android] [PATCH] VlcObject: more explicit exceptions

Jean-Baptiste Kempf jb at videolan.org
Mon Mar 23 09:48:42 CET 2015


LGTM

On 23 Mar, Thomas Guillem wrote :
> ---
>  libvlc/jni/libvlcjni-media.c           | 10 ++++++----
>  libvlc/jni/libvlcjni-mediadiscoverer.c |  5 +++--
>  libvlc/jni/libvlcjni-medialist.c       | 17 +++++++++++------
>  libvlc/jni/libvlcjni-vlcobject.c       | 26 +++++++++++++++++++++++---
>  libvlc/jni/libvlcjni-vlcobject.h       |  6 ++++--
>  5 files changed, 47 insertions(+), 17 deletions(-)
> 
> diff --git a/libvlc/jni/libvlcjni-media.c b/libvlc/jni/libvlcjni-media.c
> index afe1a71..0c3d736 100644
> --- a/libvlc/jni/libvlcjni-media.c
> +++ b/libvlc/jni/libvlcjni-media.c
> @@ -124,6 +124,7 @@ Java_org_videolan_libvlc_Media_nativeNewFromMrl(JNIEnv *env, jobject thiz,
>  {
>      vlcjni_object *p_obj;
>      const char* p_mrl;
> +    const char *p_error;
>  
>      if (!jmrl || !(p_mrl = (*env)->GetStringUTFChars(env, jmrl, 0)))
>      {
> @@ -131,12 +132,12 @@ Java_org_videolan_libvlc_Media_nativeNewFromMrl(JNIEnv *env, jobject thiz,
>          return;
>      }
>  
> -    p_obj = VLCJniObject_newFromJavaLibVlc(env, thiz, libVlc);
> +    p_obj = VLCJniObject_newFromJavaLibVlc(env, thiz, libVlc, &p_error);
>  
>      if (!p_obj)
>      {
>          (*env)->ReleaseStringUTFChars(env, jmrl, p_mrl);
> -        throw_IllegalStateException(env, "can't create VLCObject");
> +        throw_IllegalStateException(env, p_error);
>          return;
>      }
>  
> @@ -156,6 +157,7 @@ Java_org_videolan_libvlc_Media_nativeNewFromMediaList(JNIEnv *env, jobject thiz,
>  {
>      vlcjni_object *p_ml_obj = VLCJniObject_getInstance(env, ml);
>      vlcjni_object *p_obj;
> +    const char *p_error;
>  
>      if (!p_ml_obj)
>      {
> @@ -163,10 +165,10 @@ Java_org_videolan_libvlc_Media_nativeNewFromMediaList(JNIEnv *env, jobject thiz,
>          return;
>      }
>  
> -    p_obj = VLCJniObject_newFromLibVlc(env, thiz, p_ml_obj->p_libvlc);
> +    p_obj = VLCJniObject_newFromLibVlc(env, thiz, p_ml_obj->p_libvlc, &p_error);
>      if (!p_obj)
>      {
> -        throw_IllegalStateException(env, "can't create VLCObject");
> +        throw_IllegalStateException(env, p_error);
>          return;
>      }
>  
> diff --git a/libvlc/jni/libvlcjni-mediadiscoverer.c b/libvlc/jni/libvlcjni-mediadiscoverer.c
> index 6ce7cfd..ab87037 100644
> --- a/libvlc/jni/libvlcjni-mediadiscoverer.c
> +++ b/libvlc/jni/libvlcjni-mediadiscoverer.c
> @@ -27,6 +27,7 @@ Java_org_videolan_libvlc_MediaDiscoverer_nativeNew(JNIEnv *env,
>  {
>      vlcjni_object *p_obj;
>      const char* p_name;
> +    const char *p_error;
>  
>      if (!jname || !(p_name = (*env)->GetStringUTFChars(env, jname, 0)))
>      {
> @@ -34,12 +35,12 @@ Java_org_videolan_libvlc_MediaDiscoverer_nativeNew(JNIEnv *env,
>          return;
>      }
>  
> -    p_obj = VLCJniObject_newFromJavaLibVlc(env, thiz, libVlc);
> +    p_obj = VLCJniObject_newFromJavaLibVlc(env, thiz, libVlc, &p_error);
>  
>      if (!p_obj)
>      {
>          (*env)->ReleaseStringUTFChars(env, jname, p_name);
> -        throw_IllegalStateException(env, "can't create VLCObject");
> +        throw_IllegalStateException(env, p_error);
>          return;
>      }
>  
> diff --git a/libvlc/jni/libvlcjni-medialist.c b/libvlc/jni/libvlcjni-medialist.c
> index 5236885..b5766c8 100644
> --- a/libvlc/jni/libvlcjni-medialist.c
> +++ b/libvlc/jni/libvlcjni-medialist.c
> @@ -163,11 +163,14 @@ Java_org_videolan_libvlc_MediaList_nativeNewFromLibVlc(JNIEnv *env,
>                                                         jobject thiz,
>                                                         jobject libVlc)
>  {
> -    vlcjni_object *p_obj = VLCJniObject_newFromJavaLibVlc(env, thiz, libVlc);
> +    const char *p_error;
> +
> +    vlcjni_object *p_obj = VLCJniObject_newFromJavaLibVlc(env, thiz, libVlc,
> +                                                          &p_error);
>  
>      if (!p_obj)
>      {
> -        throw_IllegalStateException(env, "can't create VLCObject");
> +        throw_IllegalStateException(env, p_error);
>          return;
>      }
>  
> @@ -183,6 +186,7 @@ Java_org_videolan_libvlc_MediaList_nativeNewFromMediaDiscoverer(JNIEnv *env,
>  {
>      vlcjni_object *p_md_obj = VLCJniObject_getInstance(env, md);
>      vlcjni_object *p_obj;
> +    const char *p_error;
>  
>      if (!p_md_obj)
>      {
> @@ -190,10 +194,10 @@ Java_org_videolan_libvlc_MediaList_nativeNewFromMediaDiscoverer(JNIEnv *env,
>          return;
>      }
>  
> -    p_obj = VLCJniObject_newFromLibVlc(env, thiz, p_md_obj->p_libvlc);
> +    p_obj = VLCJniObject_newFromLibVlc(env, thiz, p_md_obj->p_libvlc, &p_error);
>      if (!p_obj)
>      {
> -        throw_IllegalStateException(env, "can't create VLCObject");
> +        throw_IllegalStateException(env, p_error);
>          return;
>      }
>  
> @@ -209,6 +213,7 @@ Java_org_videolan_libvlc_MediaList_nativeNewFromMedia(JNIEnv *env,
>  {
>      vlcjni_object *p_m_obj = VLCJniObject_getInstance(env, m);
>      vlcjni_object *p_obj;
> +    const char *p_error;
>  
>      if (!p_m_obj)
>      {
> @@ -216,10 +221,10 @@ Java_org_videolan_libvlc_MediaList_nativeNewFromMedia(JNIEnv *env,
>          return;
>      }
>  
> -    p_obj = VLCJniObject_newFromLibVlc(env, thiz, p_m_obj->p_libvlc);
> +    p_obj = VLCJniObject_newFromLibVlc(env, thiz, p_m_obj->p_libvlc, p_error);
>      if (!p_obj)
>      {
> -        throw_IllegalStateException(env, "can't create VLCObject");
> +        throw_IllegalStateException(env, p_error);
>          return;
>      }
>  
> diff --git a/libvlc/jni/libvlcjni-vlcobject.c b/libvlc/jni/libvlcjni-vlcobject.c
> index 46b9b89..0aba247 100644
> --- a/libvlc/jni/libvlcjni-vlcobject.c
> +++ b/libvlc/jni/libvlcjni-vlcobject.c
> @@ -54,22 +54,32 @@ VLCJniObject_setInstance(JNIEnv *env, jobject thiz, vlcjni_object *p_obj)
>  
>  vlcjni_object *
>  VLCJniObject_newFromLibVlc(JNIEnv *env, jobject thiz,
> -                           libvlc_instance_t *p_libvlc)
> +                           libvlc_instance_t *p_libvlc,
> +                           const char **pp_error)
>  {
>      vlcjni_object *p_obj;
>      libvlc_event_manager_t *ev;
>  
>      p_obj = VLCJniObject_getInstance(env, thiz);
>      if (p_obj)
> +    {
> +        *pp_error = "Can't get VLCObject.mInstanceID";
>          return NULL;
> +    }
>  
>      p_obj = calloc(1, sizeof(vlcjni_object));
>      if (!p_obj)
> +    {
> +        *pp_error = "vlcjni_object calloc failed";
>          goto error;
> +    }
>  
>      p_obj->p_owner = calloc(1, sizeof(vlcjni_object_owner));
>      if (!p_obj->p_owner)
> +    {
> +        *pp_error = "vlcjni_object_owner calloc failed";
>          goto error;
> +    }
>  
>      p_obj->p_libvlc = p_libvlc;
>      libvlc_retain(p_libvlc);
> @@ -86,10 +96,14 @@ VLCJniObject_newFromLibVlc(JNIEnv *env, jobject thiz,
>      } else
>          p_obj->p_owner->weak = (*env)->NewWeakGlobalRef(env, thiz);
>      if (!p_obj->p_owner->weak && !p_obj->p_owner->weakCompat)
> +    {
> +        *pp_error = "No VLCObject weak reference";
>          goto error;
> +    }
>  
>      VLCJniObject_setInstance(env, thiz, p_obj);
>  
> +    *pp_error = NULL;
>      return p_obj;
>  
>  error:
> @@ -99,12 +113,18 @@ error:
>  
>  vlcjni_object *
>  VLCJniObject_newFromJavaLibVlc(JNIEnv *env, jobject thiz,
> -                               jobject libVlc)
> +                               jobject libVlc, const char **pp_error)
>  {
>      libvlc_instance_t *p_libvlc = getLibVlcInstance(env, libVlc);
>      if (!p_libvlc)
> +    {
> +        if (libVlc)
> +            *pp_error = "Can't get mLibVlcInstance from libVlc";
> +        else
> +            *pp_error = "libVlc is NULL";
>          return NULL;
> -    return VLCJniObject_newFromLibVlc(env, thiz, p_libvlc);
> +    }
> +    return VLCJniObject_newFromLibVlc(env, thiz, p_libvlc, pp_error);
>  }
>  
>  void
> diff --git a/libvlc/jni/libvlcjni-vlcobject.h b/libvlc/jni/libvlcjni-vlcobject.h
> index b74a8d1..212cd04 100644
> --- a/libvlc/jni/libvlcjni-vlcobject.h
> +++ b/libvlc/jni/libvlcjni-vlcobject.h
> @@ -59,10 +59,12 @@ typedef bool (*event_cb)(vlcjni_object *p_obj, const libvlc_event_t *p_ev,
>  vlcjni_object *VLCJniObject_getInstance(JNIEnv *env, jobject thiz);
>  
>  vlcjni_object *VLCJniObject_newFromJavaLibVlc(JNIEnv *env, jobject thiz,
> -                                              jobject libVlc);
> +                                              jobject libVlc,
> +                                              const char **pp_error);
>  
>  vlcjni_object *VLCJniObject_newFromLibVlc(JNIEnv *env, jobject thiz,
> -                                          libvlc_instance_t *p_libvlc);
> +                                          libvlc_instance_t *p_libvlc,
> +                                          const char **pp_error);
>  
>  void VLCJniObject_release(JNIEnv *env, jobject thiz, vlcjni_object *p_obj);
>  
> -- 
> 2.1.3
> 
> _______________________________________________
> Android mailing list
> Android at videolan.org
> https://mailman.videolan.org/listinfo/android

-- 
With my kindest regards,

-- 
Jean-Baptiste Kempf
http://www.jbkempf.com/ - +33 672 704 734
Sent from my Electronic Device


More information about the Android mailing list