From b48b9951f2b39c644b7d6d90eda1ef21c1311c2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Jan=20Niemier?= Date: Wed, 13 Jan 2016 23:34:35 +0100 Subject: [PATCH 1/2] Cleanup `Oid` from unnecessary FFI calls --- src/oid.rs | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/src/oid.rs b/src/oid.rs index a5e2897df7..1d9f97edbe 100644 --- a/src/oid.rs +++ b/src/oid.rs @@ -1,7 +1,6 @@ use std::fmt; use std::cmp::Ordering; use std::hash::{Hasher, Hash}; -use std::str; use libc; use {raw, Error}; @@ -49,7 +48,7 @@ impl Oid { /// Test if this OID is all zeros. pub fn is_zero(&self) -> bool { - unsafe { raw::git_oid_iszero(&self.raw) == 1 } + self.raw.id == [0; 20] } } @@ -71,13 +70,11 @@ impl fmt::Debug for Oid { impl fmt::Display for Oid { /// Hex-encode this Oid into a formatter. fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - let mut dst = [0u8; raw::GIT_OID_HEXSZ + 1]; - unsafe { - raw::git_oid_tostr(dst.as_mut_ptr() as *mut libc::c_char, - dst.len() as libc::size_t, &self.raw); + for byte in &self.raw.id { + try!(write!(f, "{:x}", *byte)) } - let s = &dst[..dst.iter().position(|&a| a == 0).unwrap()]; - str::from_utf8(s).unwrap().fmt(f) + + Ok(()) } } @@ -95,7 +92,7 @@ impl str::FromStr for Oid { impl PartialEq for Oid { fn eq(&self, other: &Oid) -> bool { - unsafe { raw::git_oid_equal(&self.raw, &other.raw) != 0 } + self.raw.id == other.raw.id } } impl Eq for Oid {} @@ -108,11 +105,7 @@ impl PartialOrd for Oid { impl Ord for Oid { fn cmp(&self, other: &Oid) -> Ordering { - match unsafe { raw::git_oid_cmp(&self.raw, &other.raw) } { - 0 => Ordering::Equal, - n if n < 0 => Ordering::Less, - _ => Ordering::Greater, - } + Ord::cmp(&self.raw.id, &other.raw.id) } } From b78983e6eb724ea36694854b2c29edebb19cf976 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Jan=20Niemier?= Date: Thu, 14 Jan 2016 01:01:13 +0100 Subject: [PATCH 2/2] Add missing `use` --- src/oid.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/oid.rs b/src/oid.rs index 1d9f97edbe..ff65c5d2f1 100644 --- a/src/oid.rs +++ b/src/oid.rs @@ -1,6 +1,7 @@ use std::fmt; use std::cmp::Ordering; use std::hash::{Hasher, Hash}; +use std::str; use libc; use {raw, Error};