index: grab all of the fields from C-land

This commit is contained in:
Carlos Martín Nieto
2013-10-16 14:23:38 +02:00
parent 3c9e429038
commit 179f424bb5
2 changed files with 16 additions and 8 deletions

View File

@@ -148,7 +148,6 @@ geef_index_count(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
ERL_NIF_TERM entry_to_term(ErlNifEnv *env, const git_index_entry *entry)
{
ErlNifBinary id, path;
ERL_NIF_TERM mode, file_size;
size_t len;
if (geef_oid_bin(&id, &entry->oid) < 0)
@@ -161,11 +160,19 @@ ERL_NIF_TERM entry_to_term(ErlNifEnv *env, const git_index_entry *entry)
}
memcpy(path.data, entry->path, len);
mode = enif_make_uint(env, entry->mode);
file_size = enif_make_int64(env, entry->file_size);
return enif_make_tuple5(env, atoms.ok, enif_make_binary(env, &path), enif_make_binary(env, &id),
mode, file_size);
return enif_make_tuple(env, 13, atoms.ok,
enif_make_int64(env, entry->ctime.seconds),
enif_make_int64(env, entry->mtime.seconds),
enif_make_uint(env, entry->dev),
enif_make_uint(env, entry->ino),
enif_make_uint(env, entry->mode),
enif_make_uint(env, entry->uid),
enif_make_uint(env, entry->gid),
enif_make_int64(env, entry->file_size),
enif_make_binary(env, &id),
enif_make_uint(env, entry->flags),
enif_make_uint(env, entry->flags_extended),
enif_make_binary(env, &path));
}
ERL_NIF_TERM

View File

@@ -74,8 +74,9 @@ get(Pid, Path, Stage) ->
nth(Pid, Nth) ->
maybe_entry(gen_server:call(Pid, {nth, Nth})).
maybe_entry({ok, Path, Id, Mode, Size}) ->
{ok, #geef_index_entry{path=Path, id=Id, mode=Mode, size=Size}};
maybe_entry({ok, Ctime, Mtime, Dev, Ino, Mode, Uid, Gid, Size, Id, Flags, FlagsExtended, Path}) ->
{ok, #geef_index_entry{ctime=Ctime, mtime=Mtime, dev=Dev, ino=Ino, mode=Mode, uid=Uid, gid=Gid,
size=Size, id=Id, flags=Flags, flags_extended=FlagsExtended, path=Path}};
maybe_entry(Error = {error, _}) ->
Error.