Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- extern crate libc;
- use libc::{c_int, c_char};
- use std::env;
- use std::ffi::CString;
- extern {
- pub fn getopt(argc: c_int, argv: *const *mut c_char, optstr: *const c_char) -> c_int;
- }
- fn r_getopt(argc: usize, c_args: *const *mut i8) -> i32 {
- // Ping command line args
- let valid_args = "h?4bRT:6F:N:aABc:dDfi:I:l:Lm:M:nOp:qQ:rs:S:t:UvVw:W:";
- unsafe {
- return getopt(
- argc as c_int,
- c_args,
- std::ffi::CString::new(valid_args).unwrap().as_ptr()
- ) as i32;
- }
- }
- fn main() {
- // Parse command line arguements and handle them
- let argc = env::args().len();
- // Borrowed from https://stackoverflow.com/questions/34379641/how-do-i-convert-rust-args-into-the-argc-and-argv-c-equivalents
- // Create a vector of zero terminated strings
- let args = env::args().map(|arg| CString::new(arg).unwrap()).collect::<Vec<CString>>();
- // Convert the strings to raw pointers
- let c_args = args.iter().map(|arg| arg.as_ptr()).collect::<Vec<*const c_char>>().as_ptr();
- let mut cmd : i32 = r_getopt(argc, c_args);
- println!("{}", cmd);
- while cmd != -1 {
- let chr = cmd as u8;
- match chr as char {
- '4' => println!("4!"),
- _ => {println!("{}", chr); break}
- }
- cmd = r_getopt(argc, c_args);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement