diff options
author | Mattias Andrée <maandree@operamail.com> | 2014-09-05 02:26:21 +0200 |
---|---|---|
committer | Mattias Andrée <maandree@operamail.com> | 2014-09-05 02:26:21 +0200 |
commit | 94d7a7a9f7ac2b758ac910f8d3b706f586b5e293 (patch) | |
tree | 8baae1a2c8c88aa79427f24471546ec39e202d3f /src | |
parent | implement c code for adjustmentmethod (diff) | |
download | jlibgamma-94d7a7a9f7ac2b758ac910f8d3b706f586b5e293.tar.gz jlibgamma-94d7a7a9f7ac2b758ac910f8d3b706f586b5e293.tar.bz2 jlibgamma-94d7a7a9f7ac2b758ac910f8d3b706f586b5e293.tar.xz |
implement c code for libgammaexception
Signed-off-by: Mattias Andrée <maandree@operamail.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/libgamma_LibgammaException.c | 83 |
1 files changed, 78 insertions, 5 deletions
diff --git a/src/libgamma_LibgammaException.c b/src/libgamma_LibgammaException.c index ee94b98..5621a58 100644 --- a/src/libgamma_LibgammaException.c +++ b/src/libgamma_LibgammaException.c @@ -17,6 +17,9 @@ */ #include "libgamma_LibgammaException.h" +#include <stdlib.h> +#include <string.h> + #include <libgamma.h> @@ -32,7 +35,25 @@ * @return The name of the definition associated with the error code, * {@code null} if the error code does not exist. */ -jstring Java_libgamma_LibgammaException_name_1of_1error(J, jint value); +jstring Java_libgamma_LibgammaException_name_1of_1error(J, jint value) +{ + /* It is really unlikely that `malloc` returns `NULL` here + * and error handing makes this unnecessarily comples, + * therefore we will simply skip it. */ + + const char* do_not_free_this = libgamma_name_of_error(value); + char* this_will_be_freed; + size_t n; + if (do_not_free_this == NULL) + return NULL; + + n = strlen(do_not_free_this) + 1; + this_will_be_freed = malloc(n * sizeof(char)); + memcpy(this_will_be_freed, do_not_free_this, n * sizeof(char)); + + return (*env)->NewStringUTF(env, this_will_be_freed); + (void) class; +} /** @@ -43,7 +64,18 @@ jstring Java_libgamma_LibgammaException_name_1of_1error(J, jint value); * @return The error code, zero if the name is {@code null} * or does not refer to a <tt>libgamma</tt> error. */ -jint Java_libgamma_LibgammaException_value_1of_1error(J, jstring name); +jint Java_libgamma_LibgammaException_value_1of_1error(J, jstring name) +{ + const char* name_chars; + int rc; + if (name == NULL) + return 0; + name_chars = (*env)->GetStringUTFChars(env, name, NULL); + rc = libgamma_value_of_error(name_chars); + (*env)->ReleaseStringUTFChars(env, name, name_chars); + return rc; + (void) class; +} /** @@ -51,7 +83,12 @@ jint Java_libgamma_LibgammaException_value_1of_1error(J, jstring name); * * @return The value that should go to {@link #group_gid}. */ -jint Java_libgamma_LibgammaException_libgamma_1group_1gid(J); +jint Java_libgamma_LibgammaException_libgamma_1group_1gid(J) +{ + return libgamma_group_gid; + (void) env; + (void) class; +} /** @@ -59,7 +96,25 @@ jint Java_libgamma_LibgammaException_libgamma_1group_1gid(J); * * @return The value that should go to {@link #group_name}. */ -jstring Java_libgamma_LibgammaException_libgamma_1group_1name(J); +jstring Java_libgamma_LibgammaException_libgamma_1group_1name(J) +{ + /* It is really unlikely that `malloc` returns `NULL` here + * and error handing makes this unnecessarily comples, + * therefore we will simply skip it. */ + + const char* do_not_free_this = libgamma_group_name; + char* this_will_be_freed; + size_t n; + if (do_not_free_this == NULL) + return NULL; + + n = strlen(do_not_free_this) + 1; + this_will_be_freed = malloc(n * sizeof(char)); + memcpy(this_will_be_freed, do_not_free_this, n * sizeof(char)); + + return (*env)->NewStringUTF(env, this_will_be_freed); + (void) class; +} /** @@ -68,5 +123,23 @@ jstring Java_libgamma_LibgammaException_libgamma_1group_1name(J); * @param error_code The error code. * @return A textual description of the error code. */ -jstring Java_libgamma_LibgammaException_strerror(J, jint error_code); +jstring Java_libgamma_LibgammaException_strerror(J, jint error_code) +{ + /* It is really unlikely that `malloc` returns `NULL` here + * and error handing makes this unnecessarily comples, + * therefore we will simply skip it. */ + + const char* do_not_free_this = strerror(error_code); + char* this_will_be_freed; + size_t n; + if (do_not_free_this == NULL) + return NULL; + + n = strlen(do_not_free_this) + 1; + this_will_be_freed = malloc(n * sizeof(char)); + memcpy(this_will_be_freed, do_not_free_this, n * sizeof(char)); + + return (*env)->NewStringUTF(env, this_will_be_freed); + (void) class; +} |