Skip to content

Commit

Permalink
Small refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
nulltoken committed Sep 8, 2013
1 parent 0625fce commit cfd3c03
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 19 deletions.
30 changes: 18 additions & 12 deletions LibGit2Sharp/OdbBackend.cs
Expand Up @@ -393,10 +393,7 @@ private static OdbBackend MarshalOdbBackend(IntPtr backendPtr)
UIntPtr len,
GitObjectType type)
{
if (len.ToUInt64() > long.MaxValue)
{
return (int)GitErrorCode.Error;
}
long length = ConverToLong(len);

OdbBackend odbBackend = MarshalOdbBackend(backend);
if (odbBackend == null)
Expand All @@ -406,9 +403,9 @@ private static OdbBackend MarshalOdbBackend(IntPtr backendPtr)

try
{
using (var stream = new UnmanagedMemoryStream((byte*)data, (long)len.ToUInt64()))
using (var stream = new UnmanagedMemoryStream((byte*)data, length))
{
return odbBackend.Write(new ObjectId(oid), stream, (long)len.ToUInt64(), type.ToObjectType());
return odbBackend.Write(new ObjectId(oid), stream, length, type.ToObjectType());
}
}
catch (Exception ex)
Expand All @@ -421,15 +418,12 @@ private static OdbBackend MarshalOdbBackend(IntPtr backendPtr)
private static int WriteStream(
out IntPtr stream_out,
IntPtr backend,
UIntPtr length,
UIntPtr len,
GitObjectType type)
{
stream_out = IntPtr.Zero;

if (length.ToUInt64() > long.MaxValue)
{
return (int)GitErrorCode.Error;
}
long length = ConverToLong(len);

OdbBackend odbBackend = MarshalOdbBackend(backend);
if (odbBackend == null)
Expand All @@ -442,7 +436,7 @@ private static OdbBackend MarshalOdbBackend(IntPtr backendPtr)
try
{
OdbBackendStream stream;
int toReturn = odbBackend.WriteStream((long)length.ToUInt64(), objectType, out stream);
int toReturn = odbBackend.WriteStream(length, objectType, out stream);

if (toReturn == 0)
{
Expand Down Expand Up @@ -578,6 +572,18 @@ private unsafe int CallbackMethod(ObjectId id)
}
}

internal static long ConverToLong(UIntPtr len)
{
if (len.ToUInt64() > long.MaxValue)
{
throw new InvalidOperationException(
string.Format("Provided length ({0}) exceeds long.MaxValue ({1}).",
len.ToUInt64(), long.MaxValue));
}

return (long)len.ToUInt64();
}

/// <summary>
/// Flags used by subclasses of OdbBackend to indicate which operations they support.
/// </summary>
Expand Down
14 changes: 7 additions & 7 deletions LibGit2Sharp/OdbBackendStream.cs
Expand Up @@ -145,14 +145,15 @@ private static class BackendStreamEntryPoints
{
OdbBackendStream odbBackendStream = GCHandle.FromIntPtr(Marshal.ReadIntPtr(stream, GitOdbBackendStream.GCHandleOffset)).Target as OdbBackendStream;

if (odbBackendStream != null &&
len.ToUInt64() < long.MaxValue)
if (odbBackendStream != null)
{
using (UnmanagedMemoryStream memoryStream = new UnmanagedMemoryStream((byte*)buffer, 0, (long)len.ToUInt64(), FileAccess.ReadWrite))
long length = OdbBackend.ConverToLong(len);

using (UnmanagedMemoryStream memoryStream = new UnmanagedMemoryStream((byte*)buffer, 0, length, FileAccess.ReadWrite))
{
try
{
return odbBackendStream.Read(memoryStream, (long)len.ToUInt64());
return odbBackendStream.Read(memoryStream, length);
}
catch (Exception ex)
{
Expand All @@ -171,10 +172,9 @@ private static class BackendStreamEntryPoints
{
OdbBackendStream odbBackendStream = GCHandle.FromIntPtr(Marshal.ReadIntPtr(stream, GitOdbBackendStream.GCHandleOffset)).Target as OdbBackendStream;

if (odbBackendStream != null &&
len.ToUInt64() < long.MaxValue)
if (odbBackendStream != null)
{
long length = (long)len.ToUInt64();
long length = OdbBackend.ConverToLong(len);

using (UnmanagedMemoryStream dataStream = new UnmanagedMemoryStream((byte*)buffer, length))
{
Expand Down

0 comments on commit cfd3c03

Please sign in to comment.