#![deny(missing_docs, missing_debug_implementations)]
#![doc(html_root_url = "https://docs.rs/curl/0.4")]
extern crate curl_sys;
extern crate libc;
extern crate socket2;
#[cfg(all(unix, not(target_os = "macos"), feature = "ssl"))]
extern crate openssl_sys;
#[cfg(all(unix, not(target_os = "macos"), feature = "ssl"))]
extern crate openssl_probe;
#[cfg(windows)]
extern crate winapi;
#[cfg(target_env = "msvc")]
extern crate kernel32;
#[cfg(target_env = "msvc")]
extern crate schannel;
use std::ffi::CStr;
use std::str;
use std::sync::{Once, ONCE_INIT};
pub use error::{Error, ShareError, MultiError, FormError};
mod error;
pub use version::{Version, Protocols};
mod version;
mod panic;
pub mod easy;
pub mod multi;
pub fn init() {
static INIT: Once = ONCE_INIT;
INIT.call_once(|| {
platform_init();
unsafe {
assert_eq!(curl_sys::curl_global_init(curl_sys::CURL_GLOBAL_ALL), 0);
}
});
#[cfg(all(unix, not(target_os = "macos"), feature = "ssl"))]
fn platform_init() {
openssl_sys::init();
}
#[cfg(not(all(unix, not(target_os = "macos"), feature = "ssl")))]
fn platform_init() {}
}
unsafe fn opt_str<'a>(ptr: *const libc::c_char) -> Option<&'a str> {
if ptr.is_null() {
None
} else {
Some(str::from_utf8(CStr::from_ptr(ptr).to_bytes()).unwrap())
}
}
fn cvt(r: curl_sys::CURLcode) -> Result<(), Error> {
if r == curl_sys::CURLE_OK {
Ok(())
} else {
Err(Error::new(r))
}
}