Keep the reference name as part of the record

This commit is contained in:
Carlos Martín Nieto
2013-05-13 11:46:07 +02:00
parent dfdb4cbb54
commit 604388a76d
6 changed files with 46 additions and 9 deletions

View File

@@ -151,6 +151,7 @@ static ErlNifFunc geef_funcs[] =
{"reference_resolve", 1, geef_reference_resolve},
{"reference_target", 1, geef_reference_target},
{"reference_type", 1, geef_reference_type},
{"reference_name", 1, geef_reference_name},
{"reference_create", 5, geef_reference_create},
{"oid_fmt", 1, geef_oid_fmt},
{"oid_parse", 1, geef_oid_parse},

View File

@@ -230,6 +230,28 @@ geef_reference_type(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
return term_type;
}
ERL_NIF_TERM
geef_reference_name(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
{
geef_ref *ref;
const char *name;
ErlNifBinary bin;
size_t len;
if (!enif_get_resource(env, argv[0], geef_ref_type, (void **) &ref))
return enif_make_badarg(env);
name = git_reference_name(ref->ref);
len = strlen(name);
if (enif_alloc_binary(len, &bin) < 0)
return geef_oom(env);
memcpy(bin.data, name, len + 1);
return enif_make_binary(env, &bin);
}
ERL_NIF_TERM
geef_reference_create(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
{

View File

@@ -17,6 +17,7 @@ ERL_NIF_TERM geef_reference_lookup(ErlNifEnv *env, int argc, const ERL_NIF_TERM
ERL_NIF_TERM geef_reference_resolve(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]);
ERL_NIF_TERM geef_reference_target(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]);
ERL_NIF_TERM geef_reference_type(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]);
ERL_NIF_TERM geef_reference_name(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]);
ERL_NIF_TERM geef_reference_create(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]);
void geef_ref_free(ErlNifEnv *env, void *cd);