Source code
Revision control
Copy as Markdown
Other Tools
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
use buildid_reader::{result::Error, BuildIdReader};
use log::{error, trace};
use nserror::*;
use nsstring::{nsAString, nsCString};
use std::path::Path;
#[no_mangle]
pub extern "C" fn read_toolkit_buildid_from_file(
fname: &nsAString,
nname: &nsCString,
rv_build_id: &mut nsCString,
) -> nsresult {
let fname_str = fname.to_string();
let path = Path::new(&fname_str);
let note_name = nname.to_string();
trace!("read_toolkit_buildid_from_file {} {}", fname, nname);
match BuildIdReader::new(&path).and_then(|mut reader| reader.read_string_build_id(¬e_name)) {
Ok(id) => {
trace!("read_toolkit_buildid_from_file {}", id);
rv_build_id.assign(&id);
NS_OK
}
Err(err) => {
error!("read_toolkit_buildid_from_file failed to read string build id from note {:?} with error {:?}", note_name, err);
match err {
Error::FailedToOpenFile { .. } => NS_ERROR_FILE_UNRECOGNIZED_PATH,
Error::FailedToRead { .. } => NS_ERROR_OUT_OF_MEMORY,
Error::StringFromBytesNulError { .. } | Error::StringFromBytesUtf8Error { .. } => {
NS_ERROR_ILLEGAL_VALUE
}
Error::Goblin { .. } | Error::NotFatArchive => NS_ERROR_ILLEGAL_VALUE,
Error::CopyBytes { .. } => NS_ERROR_OUT_OF_MEMORY,
Error::NoteNotAvailable | Error::ArchNotAvailable => NS_ERROR_NOT_AVAILABLE,
Error::InvalidNoteName => NS_ERROR_INVALID_ARG,
Error::NotEnoughData { .. } => NS_ERROR_FAILURE,
}
}
}
}