45 lines
1.8 KiB
Rust
45 lines
1.8 KiB
Rust
/* 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
|
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
|
|
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,
|
|
}
|
|
}
|
|
}
|
|
}
|