using System; using System.Collections.Generic; namespace LibGit2Sharp.Core { internal static unsafe class Libgit2UnsafeHelper { public static IList ListAllReferenceNames(RepositorySafeHandle repo, GitReferenceType types) { UnSafeNativeMethods.git_strarray strArray; int res = UnSafeNativeMethods.git_reference_listall(out strArray, repo, types); Ensure.Success(res); return BuildListOf(strArray); } public static IList ListAllRemoteNames(RepositorySafeHandle repo) { UnSafeNativeMethods.git_strarray strArray; int res = UnSafeNativeMethods.git_remote_list(out strArray, repo); Ensure.Success(res); return BuildListOf(strArray); } public static IList ListAllTagNames(RepositorySafeHandle repo) { UnSafeNativeMethods.git_strarray strArray; int res = UnSafeNativeMethods.git_tag_list(out strArray, repo); Ensure.Success(res); return BuildListOf(strArray); } private static IList BuildListOf(UnSafeNativeMethods.git_strarray strArray) { var list = new List(); try { UnSafeNativeMethods.git_strarray* gitStrArray = &strArray; int numberOfEntries = gitStrArray->size.ToInt32(); for (uint i = 0; i < numberOfEntries; i++) { var name = new string(gitStrArray->strings[i]); list.Add(name); } list.Sort(StringComparer.Ordinal); } finally { UnSafeNativeMethods.git_strarray_free(ref strArray); } return list; } } }