Port radio_write_csv
This commit is contained in:
parent
f7aa60df21
commit
8430209828
23
radio.c
23
radio.c
@ -153,26 +153,3 @@ badline: fprintf(stderr, "Invalid line: '%s'\n", line);
|
|||||||
fclose(conf);
|
fclose(conf);
|
||||||
device->update_timestamp(device);
|
device->update_timestamp(device);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
|
||||||
// Update contacts database on the device.
|
|
||||||
//
|
|
||||||
void radio_write_csv(radio_device_t* device, const char *filename)
|
|
||||||
{
|
|
||||||
FILE *csv;
|
|
||||||
|
|
||||||
if (!device->write_csv) {
|
|
||||||
fprintf(stderr, "%s does not support CSV database.\n", device->name);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
csv = fopen(filename, "r");
|
|
||||||
if (! csv) {
|
|
||||||
perror(filename);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
fprintf(stderr, "Read file '%s'.\n", filename);
|
|
||||||
|
|
||||||
device->write_csv(device, csv);
|
|
||||||
fclose(csv);
|
|
||||||
}
|
|
||||||
|
25
src/radio.rs
25
src/radio.rs
@ -37,7 +37,6 @@ extern {
|
|||||||
fn set_active_device(device: *const radio_device_t);
|
fn set_active_device(device: *const radio_device_t);
|
||||||
|
|
||||||
fn radio_parse_config(device: *const radio_device_t, filename: *const c_char);
|
fn radio_parse_config(device: *const radio_device_t, filename: *const c_char);
|
||||||
fn radio_write_csv(device: *const radio_device_t, filename: *const c_char);
|
|
||||||
|
|
||||||
fn dfu_init(vid: c_uint, pid: c_uint) -> *const c_char;
|
fn dfu_init(vid: c_uint, pid: c_uint) -> *const c_char;
|
||||||
fn dfu_reboot();
|
fn dfu_reboot();
|
||||||
@ -361,12 +360,28 @@ pub fn print_version(radio: &Radio) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Update CSV contacts database.
|
/// Update contacts database on the device.
|
||||||
pub fn write_csv(radio: &Radio, filename: &str) {
|
pub fn write_csv(radio: &Radio, filename: &str) {
|
||||||
let device = radio.ptr;
|
let device = radio.ptr as *mut radio_device_t;
|
||||||
let filename = CString::new(filename.to_string()).unwrap();
|
|
||||||
unsafe {
|
unsafe {
|
||||||
radio_write_csv(device, filename.as_ptr());
|
let write_csv_fn = match (*device).write_csv {
|
||||||
|
Some(func) => func,
|
||||||
|
None => {
|
||||||
|
let name_ptr = (*device).name;
|
||||||
|
let name = CStr::from_ptr(name_ptr).to_str().unwrap();
|
||||||
|
eprintln!("{} does not support CSV database.", name);
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
let file = std::fs::File::open(filename).unwrap();
|
||||||
|
eprintln!("Read file '{}.", filename);
|
||||||
|
|
||||||
|
let fd = file.as_raw_fd();
|
||||||
|
let mode = CString::new("r").unwrap();
|
||||||
|
let file = libc::fdopen(fd, mode.as_ptr());
|
||||||
|
write_csv_fn(device, file);
|
||||||
|
libc::fclose(file);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user