aboutsummaryrefslogtreecommitdiffstats
path: root/src/database.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/database.rs')
-rw-r--r--src/database.rs26
1 files changed, 14 insertions, 12 deletions
diff --git a/src/database.rs b/src/database.rs
index ddba507..79e519e 100644
--- a/src/database.rs
+++ b/src/database.rs
@@ -4,12 +4,13 @@ use std::{
ptr,
};
+use std::ffi::CString;
+
use libc;
use error::Result;
use utils::{
NewFromPtr,
- ToCString,
ToStr,
};
@@ -18,7 +19,7 @@ use directory::Directory;
use ffi;
// Re-exported under database module for pretty namespacin'.
-pub use ffi::Mode;
+pub use ffi::DatabaseOpenMode;
#[derive(Copy, Clone, Debug)]
pub struct Version(libc::c_uint);
@@ -27,23 +28,23 @@ pub struct Database(*mut ffi::notmuch_database_t);
impl Database {
pub fn create<P: AsRef<path::Path>>(path: &P) -> Result<Database> {
- let path = path.to_cstring().unwrap();
+ let path_str = CString::new(path.as_ref().to_str().unwrap()).unwrap();
let mut db = ptr::null_mut();
try!(unsafe {
- ffi::notmuch_database_create(path.as_ptr(), &mut db)
+ ffi::notmuch_database_create(path_str.as_ptr(), &mut db)
}.as_result());
Ok(Database(db))
}
- pub fn open<P: AsRef<path::Path>>(path: &P, mode: Mode) -> Result<Database> {
- let path = path.to_cstring().unwrap();
+ pub fn open<P: AsRef<path::Path>>(path: &P, mode: DatabaseOpenMode) -> Result<Database> {
+ let path_str = CString::new(path.as_ref().to_str().unwrap()).unwrap();
let mut db = ptr::null_mut();
try!(unsafe {
ffi::notmuch_database_open(
- path.as_ptr(), mode.into(), &mut db,
+ path_str.as_ptr(), mode.into(), &mut db,
)
}.as_result());
@@ -84,14 +85,15 @@ impl Database {
}
}
- let path = path.to_cstring().unwrap();
+ let path_str = CString::new(path.as_ref().to_str().unwrap()).unwrap();
+
let backup_path = backup_path.map(|p| {
- p.to_cstring().unwrap()
+ CString::new(p.as_ref().to_str().unwrap()).unwrap()
});
try!(unsafe {
ffi::notmuch_database_compact(
- path.as_ptr(), backup_path.map_or(ptr::null(), |p| p.as_ptr()),
+ path_str.as_ptr(), backup_path.map_or(ptr::null(), |p| p.as_ptr()),
if status.is_some() { Some(wrapper::<F>) } else { None },
status.map_or(ptr::null_mut(), |f| {
&f as *const _ as *mut libc::c_void
@@ -155,12 +157,12 @@ impl Database {
}
pub fn directory<P: AsRef<path::Path>>(&self, path: &P) -> Result<Option<Directory>> {
- let path = path.to_cstring().unwrap();
+ let path_str = CString::new(path.as_ref().to_str().unwrap()).unwrap();
let mut dir = ptr::null_mut();
try!(unsafe {
ffi::notmuch_database_get_directory(
- self.0, path.as_ptr(), &mut dir,
+ self.0, path_str.as_ptr(), &mut dir,
)
}.as_result());