From 7de2b5f4b6535c8bb7fff506256ee85f2ded8761 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Tue, 2 Apr 2013 06:28:50 +0200 Subject: [PATCH] Return error messages as binaries --- c_src/geef.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/c_src/geef.c b/c_src/geef.c index 873f7f6..dd14ece 100644 --- a/c_src/geef.c +++ b/c_src/geef.c @@ -75,15 +75,23 @@ ERL_NIF_TERM geef_error(ErlNifEnv *env) { const git_error *error; + ErlNifBinary bin; + const char *message; + size_t len; error = giterr_last(); - if (error) { - return enif_make_tuple2(env, atoms.error, - enif_make_string(env, error->message, ERL_NIF_LATIN1)); - } + if (error && error->message) + message = error->message; + else + message = "No message specified"; - return enif_make_tuple2(env, atoms.error, - enif_make_string(env, "No message specified", ERL_NIF_LATIN1)); + len = strlen(message); + if (!enif_alloc_binary(len, &bin)) + return atoms.error; + + memcpy(bin.data, message, len); + + return enif_make_tuple2(env, atoms.error, enif_make_binary(env, &bin)); } static ErlNifFunc geef_funcs[] =