diff --git a/bash-5.1/builtins_rust/cd/src/lib.rs b/bash-5.1/builtins_rust/cd/src/lib.rs index 1025580eb7aa141b5a54f4579699791ecc423550..a44fe505c56cdcc65c3295ef85164238d969beef 100644 --- a/bash-5.1/builtins_rust/cd/src/lib.rs +++ b/bash-5.1/builtins_rust/cd/src/lib.rs @@ -344,7 +344,9 @@ extern "C" { fn same_file (path1:*const c_char, path2:*const c_char, stp1:*mut libc::stat, stp2:*mut libc::stat)->i32; fn make_absolute (str1:*const c_char, dot_path:*const c_char)->* mut c_char; fn sh_canonpath (path:* mut c_char, flags:i32)->* mut c_char; - fn set_working_directory (path:* mut c_char); + fn set_working_directory (path:* mut c_char); + fn builtin_help(); + } pub static mut xattrfd:i32=-1; @@ -499,6 +501,10 @@ pub extern "C" fn r_cd_builtin (mut list:*mut WordList)->i32 { 'L'=>{no_symlinks = 0;} 'e'=>{eflag = 1;} _=>{ + if opt == -99 { + builtin_help(); + return EX_USAGE; + } builtin_usage (); return EX_USAGE; } @@ -660,7 +666,12 @@ pub extern "C" fn r_pwd_builtin (list:* mut WordList)->i32 { 'P'=>{verbatim_pwd =1; pflag = 1;} 'L'=>{verbatim_pwd = 0;} - _=>{builtin_usage (); + _=>{ + if opt == -99 { + builtin_help(); + return EX_USAGE; + } + builtin_usage (); return EX_USAGE; } } diff --git a/bash-5.1/builtins_rust/complete/src/lib.rs b/bash-5.1/builtins_rust/complete/src/lib.rs index 9dd58df4447e7ed94457e37ea33b672002f9442f..a3254b4f6bad2f00882c3120d479f3678ae4b4ff 100644 --- a/bash-5.1/builtins_rust/complete/src/lib.rs +++ b/bash-5.1/builtins_rust/complete/src/lib.rs @@ -554,6 +554,7 @@ extern "C" { fn sh_invalidid (value:* mut c_char); fn sh_invalidoptname (value:* mut c_char); fn builtin_usage(); + fn builtin_help(); static list_optarg:* mut c_char; fn builtin_error(err:*const c_char,...); fn check_identifier (w:* mut WordDesc, f:i32)->i32; @@ -822,6 +823,10 @@ pub extern "C" fn r_build_actions (list : *mut WordList, flagp:* mut _optflags, Xarg = list_optarg; } _=>{ + if opt == -99 { + builtin_help(); + return EX_USAGE; + } builtin_usage (); return EX_USAGE; } diff --git a/bash-5.1/builtins_rust/declare/src/lib.rs b/bash-5.1/builtins_rust/declare/src/lib.rs index eede3a82011608e5b881dbe1b6343bb3b3550b8d..6da37b1294d8f4cb9fb874e1cf31ed8a5db2012a 100644 --- a/bash-5.1/builtins_rust/declare/src/lib.rs +++ b/bash-5.1/builtins_rust/declare/src/lib.rs @@ -716,7 +716,12 @@ pub extern "C" fn r_declare_internal (list:* mut WordList, local_var:i32)->i32 } } 'I'=>{ inherit_flag = MKLOC_INHERIT!();} - _=>{ builtin_usage (); + _=>{ + if opt == -99 { + builtin_help(); + return EX_USAGE; + } + builtin_usage (); return EX_USAGE; } } diff --git a/bash-5.1/builtins_rust/fc/src/lib.rs b/bash-5.1/builtins_rust/fc/src/lib.rs index 5d0eb3fcd91a5f7c48574b5291f41da800035aed..66bbbfc7bcb4980cd46e01cff18634d41e5e465b 100644 --- a/bash-5.1/builtins_rust/fc/src/lib.rs +++ b/bash-5.1/builtins_rust/fc/src/lib.rs @@ -400,17 +400,19 @@ pub extern "C" fn r_set_verbose_flag (){ #[no_mangle] pub extern "C" fn r_fc_number (list:* mut WordList)->i32 { - let mut s:*mut c_char; + let mut s:*mut c_char = 0 as *mut i8; if list == std::ptr::null_mut(){ return 0; } unsafe { - s = (*(*list).word).word; - if char::from(*s as u8 ) == '-' { - s=(s as u8 +1) as *mut c_char; + if (*list).word != std::ptr::null_mut() { + s = (*(*list).word).word; + if char::from(*s as u8 ) == '-' { + s= s.offset(1) ; } + } return legal_number (s, std::ptr::null_mut()); } } @@ -536,7 +538,6 @@ pub extern "C" fn r_fc_builtin (list:* mut WordList)->i32 opt = internal_getopt (list, CString::new(":e:lnrs").unwrap().as_ptr() as * mut c_char); ret= ret && (opt !=-1); } - let mut llist:* mut WordList = loptend.clone(); if ename != std::ptr::null_mut() && char::from(*ename as u8 ) == '-' && char::from(*((ename as usize +4) as * mut c_char) as u8 )== '\0'{ diff --git a/bash-5.1/builtins_rust/mapfile/src/intercdep.rs b/bash-5.1/builtins_rust/mapfile/src/intercdep.rs index 8450248d09589efc52448bfe539382c28fadf17c..a3ebfc37ae3ec81899b92b0c93b5625ba52c6ac8 100644 --- a/bash-5.1/builtins_rust/mapfile/src/intercdep.rs +++ b/bash-5.1/builtins_rust/mapfile/src/intercdep.rs @@ -71,6 +71,7 @@ extern "C" { pub fn reset_internal_getopt(); pub fn internal_getopt(list: *mut WordList, opts: *mut c_char) -> c_int; pub fn builtin_usage(); + fn builtin_help(); pub fn builtin_error(format: *const c_char, ...); pub fn legal_identifier(arg1: *const c_char) -> c_int; diff --git a/bash-5.1/builtins_rust/mapfile/src/lib.rs b/bash-5.1/builtins_rust/mapfile/src/lib.rs index 4fa35f5b1b343e7ebedf6b75ee10128a879898ad..c4d9530da0d9baefddb20b468ebeb5cfbfdc6220 100644 --- a/bash-5.1/builtins_rust/mapfile/src/lib.rs +++ b/bash-5.1/builtins_rust/mapfile/src/lib.rs @@ -94,6 +94,10 @@ unsafe { } } _ => { + if opt == -99 { + builtin_help(); + return EX_USAGE; + } r_builtin_usage (); return EX_USAGE; } diff --git a/bash-5.1/builtins_rust/printf/src/intercdep.rs b/bash-5.1/builtins_rust/printf/src/intercdep.rs index db66567dcfc63e9081874bfb07771a0f07a70f80..1f133a6f845b11073302e36c686a7e59f7103879 100644 --- a/bash-5.1/builtins_rust/printf/src/intercdep.rs +++ b/bash-5.1/builtins_rust/printf/src/intercdep.rs @@ -56,6 +56,7 @@ extern "C" { pub fn reset_internal_getopt(); pub fn internal_getopt(list: *mut WordList, opts: *mut c_char) -> c_int; pub fn builtin_usage(); + fn builtin_help(); pub fn builtin_error(format: *const c_char, ...); pub fn builtin_warning(format: *const c_char, ...); pub fn builtin_bind_variable(name: *mut c_char, value: *mut c_char, flags: c_int) -> *mut SHELL_VAR; diff --git a/bash-5.1/builtins_rust/printf/src/lib.rs b/bash-5.1/builtins_rust/printf/src/lib.rs index 1a29c02d29c0eb4862f96d059430b2625f18370e..23bf4584b5d0eeb4c217b456e88d8ea2b3f7228a 100644 --- a/bash-5.1/builtins_rust/printf/src/lib.rs +++ b/bash-5.1/builtins_rust/printf/src/lib.rs @@ -140,6 +140,10 @@ unsafe { } } _ => { + if opt == -99 { + builtin_help(); + return EX_USAGE; + } r_builtin_usage (); return EX_USAGE; } diff --git a/bash-5.1/builtins_rust/read/src/intercdep.rs b/bash-5.1/builtins_rust/read/src/intercdep.rs index 4ea450bce04cb2bc6cd064d7d8b1e1368724f725..5c9570a0da3cfd9e93506df7ac46c1cc20b3b647 100644 --- a/bash-5.1/builtins_rust/read/src/intercdep.rs +++ b/bash-5.1/builtins_rust/read/src/intercdep.rs @@ -271,7 +271,7 @@ extern "C" { pub fn rl_get_keymap() -> Keymap; pub fn rl_insert(count: c_int, key: c_int) -> c_int; pub fn rl_newline(count: c_int, key: c_int) -> c_int; - + fn builtin_help(); } extern "C" { diff --git a/bash-5.1/builtins_rust/read/src/lib.rs b/bash-5.1/builtins_rust/read/src/lib.rs index 5ca4bd4c30bcdf44e8649a573495a504e017f82a..3fcc468391db948001b9fca38aff2fc412c66f27 100644 --- a/bash-5.1/builtins_rust/read/src/lib.rs +++ b/bash-5.1/builtins_rust/read/src/lib.rs @@ -193,6 +193,10 @@ unsafe { } _ => { + if opt == -99 { + builtin_help(); + return EX_USAGE; + } r_builtin_usage (); return EX_USAGE; } diff --git a/bash-5.1/builtins_rust/set/src/lib.rs b/bash-5.1/builtins_rust/set/src/lib.rs index 32066f4e08f081832c20ce9a18c86a0d6feffd97..715d32d6612ca3ccd232f420f4fe2955e0bf64ee 100644 --- a/bash-5.1/builtins_rust/set/src/lib.rs +++ b/bash-5.1/builtins_rust/set/src/lib.rs @@ -852,6 +852,7 @@ extern "C" { fn with_input_from_stream (_:libc::FILE , _: *const i8); fn stupidly_hack_special_variables (_ : *mut i8); fn builtin_error(_: *const i8, _: ...); + fn builtin_help(); static mut posixly_correct : i32; static mut enable_history_list : i32; static mut ignoreeof : i32 ; @@ -1434,13 +1435,17 @@ unsafe fn reset_shell_options () { } _ => { if opt == -99 { - unsafe { + unsafe { + builtin_help(); + } + return EX_USAGE; + } + unsafe { builtin_usage (); + } return EX_USAGE; - } } } - } // opt = unsafe {internal_getopt(list, optflags.as_ptr() as *mut i8)}; opt = unsafe {internal_getopt (list, optflags.as_mut_ptr())}; } @@ -1646,6 +1651,10 @@ pub extern "C" fn r_unset_builtin(mut list: *mut WordList) -> i32 { 'v'=>{global_unset_var = 0;} 'n'=>{nameref = 1;} _=>{ + if opt == -99 { + builtin_help(); + return EX_USAGE; + } builtin_usage (); return EX_USAGE; } diff --git a/bash-5.1/builtins_rust/setattr/src/intercdep.rs b/bash-5.1/builtins_rust/setattr/src/intercdep.rs index 8c4655937ba5aea202fd59998c0c25838c719c1a..a6bf5817a4b7835cb12e85c25484f9f11429201e 100644 --- a/bash-5.1/builtins_rust/setattr/src/intercdep.rs +++ b/bash-5.1/builtins_rust/setattr/src/intercdep.rs @@ -345,6 +345,7 @@ extern "C" { pub fn reset_internal_getopt(); pub fn internal_getopt(list: *mut WordList, opts: *mut c_char) -> c_int; pub fn builtin_usage(); + fn builtin_help(); pub fn builtin_error(arg1: *const c_char, ...); pub fn find_function(name: *const c_char) -> *mut SHELL_VAR; pub fn exportable_function_name(string: *const c_char) -> c_int; diff --git a/bash-5.1/builtins_rust/setattr/src/lib.rs b/bash-5.1/builtins_rust/setattr/src/lib.rs index 2d8def22a24379bae384ae0f60d23ec7f649dd31..3fa36f7366ffec942e4f115ff276ab5ec8a79176 100644 --- a/bash-5.1/builtins_rust/setattr/src/lib.rs +++ b/bash-5.1/builtins_rust/setattr/src/lib.rs @@ -43,6 +43,10 @@ unsafe { 'a' => arrays_only = 1, 'A' => assoc_only = 1, _ => { + if opt == -99 { + builtin_help(); + return EX_USAGE; + } builtin_usage (); return EX_USAGE; } diff --git a/bash-5.1/builtins_rust/suspend/src/lib.rs b/bash-5.1/builtins_rust/suspend/src/lib.rs index bf5b428f838439d6c05488ec38ffaf09dd80da31..bce087870ee66ce76d885efac6811c1d25ef35c3 100644 --- a/bash-5.1/builtins_rust/suspend/src/lib.rs +++ b/bash-5.1/builtins_rust/suspend/src/lib.rs @@ -21,6 +21,10 @@ unsafe { match opt_char { 'f' => force += 1, _ => { + if opt == -99 { + builtin_help(); + return EX_USAGE; + } r_builtin_usage (); return EX_USAGE; } diff --git a/bash-5.1/builtins_rust/trap/src/intercdep.rs b/bash-5.1/builtins_rust/trap/src/intercdep.rs index 93e2d8a223feb297a4e278da59047ffc6a3aaf4d..fba354db2a4f39776fd1c7b60be33f19333262e5 100644 --- a/bash-5.1/builtins_rust/trap/src/intercdep.rs +++ b/bash-5.1/builtins_rust/trap/src/intercdep.rs @@ -37,6 +37,7 @@ extern "C" { pub fn reset_internal_getopt(); pub fn internal_getopt(list: *mut WordList, opts: *mut c_char) -> c_int; pub fn builtin_usage(); + fn builtin_help(); pub fn builtin_error(format: *const c_char, ...); pub fn sh_chkwrite(s: c_int) -> c_int; diff --git a/bash-5.1/builtins_rust/trap/src/lib.rs b/bash-5.1/builtins_rust/trap/src/lib.rs index 7e1016513bdf23aa71e006978c02cbd061b5d547..f5dddb3b34ec679414adb93a8647694f9349a8e6 100644 --- a/bash-5.1/builtins_rust/trap/src/lib.rs +++ b/bash-5.1/builtins_rust/trap/src/lib.rs @@ -24,6 +24,10 @@ unsafe { 'l' => list_signal_names += 1, 'p' => display += 1, _ => { + if opt == -99 { + builtin_help(); + return EX_USAGE; + } r_builtin_usage (); return EX_USAGE; } diff --git a/bash-5.1/builtins_rust/type/src/lib.rs b/bash-5.1/builtins_rust/type/src/lib.rs index ddf85bf648d8cd2d884cf04de88e066a50714d29..497a021c81311dc6cf230e513f8a12fde644f0b7 100644 --- a/bash-5.1/builtins_rust/type/src/lib.rs +++ b/bash-5.1/builtins_rust/type/src/lib.rs @@ -356,6 +356,7 @@ extern "C" { fn reset_internal_getopt(); fn internal_getopt (list:*mut WordList , opts:*mut i8)->i32; fn builtin_usage(); + fn builtin_help(); fn sh_notfound (name:* mut i8); fn sh_chkwrite (ret:i32)->i32; fn find_alias(alia :*mut i8) ->alias_t; @@ -421,6 +422,9 @@ pub unsafe extern "C" fn r_type_builtin (mut list :*mut WordList) -> i32 { if (*this).next != std::ptr::null_mut(){ this = (*this).next; } + else { + break; + } } } reset_internal_getopt(); @@ -441,10 +445,10 @@ pub unsafe extern "C" fn r_type_builtin (mut list :*mut WordList) -> i32 { dflags = dflags& !(CDESC_TYPE!()|CDESC_SHORTDESC!()); } _ =>{ - if opt == -99 { - builtin_usage(); - return EX_USAGE; - } + if opt == -99 { + builtin_help(); + return EX_USAGE; + } unsafe { builtin_usage (); return EX_USAGE; diff --git a/bash-5.1/builtins_rust/ulimit/src/lib.rs b/bash-5.1/builtins_rust/ulimit/src/lib.rs index 2ed26a2227a7f2d15db6dd1db44009b07ad84bcf..6acb97966a7c47ffa318658bc911eac817ce4229 100644 --- a/bash-5.1/builtins_rust/ulimit/src/lib.rs +++ b/bash-5.1/builtins_rust/ulimit/src/lib.rs @@ -483,17 +483,13 @@ pub unsafe extern "C" fn r_ulimit_builtin(mut list: *mut WordList) -> i32{ 'S' => { mode = mode | LIMIT_SOFT!() ; } 'H' => { mode = mode | LIMIT_HARD!();} '?'=> { - builtin_help(); + builtin_usage(); return EX_USAGE; } - // => { - // builtin_usage(); - // return EX_USAGE; - // } _ => { //println!("enter switch default,opt is {}",opt); if opt == -99 { - builtin_usage(); + builtin_help(); return EX_USAGE; } if ncmd >= cmdlistsz { diff --git a/bash-5.1/builtins_rust/umask/src/lib.rs b/bash-5.1/builtins_rust/umask/src/lib.rs index 6e153736fdd426f78175e57aab61996ac18c7e3c..2cca8c7b168ddda6ac21aea99162681e8e5ef460 100644 --- a/bash-5.1/builtins_rust/umask/src/lib.rs +++ b/bash-5.1/builtins_rust/umask/src/lib.rs @@ -160,6 +160,7 @@ extern "C" { fn reset_internal_getopt(); fn internal_getopt (list:*mut WordList, opts:*mut c_char)->i32; fn builtin_usage(); + fn builtin_help(); // fn read_octal(string:*mut c_char)->i32; fn sh_erange(s:*mut c_char,desc:*mut c_char); fn sh_chkwrite(s:i32)->i32; @@ -212,7 +213,12 @@ pub extern "C" fn r_umask_builtin(mut list:*mut WordList) ->i32{ match opt_char { 'S' => {print_symbolically = print_symbolically +1;} 'p' => {pflag = pflag + 1;} - _ => { builtin_usage(); + _ => { + if opt == -99 { + builtin_help(); + return EX_USAGE; + } + builtin_usage(); return EX_USAGE; } } diff --git a/bash-5.1/builtins_rust/wait/src/lib.rs b/bash-5.1/builtins_rust/wait/src/lib.rs index 79362038aef94d30cdd07e50d9aa2f554ca2bf97..8eb6196556bfcedb0077359e71b89b9d21b01344 100644 --- a/bash-5.1/builtins_rust/wait/src/lib.rs +++ b/bash-5.1/builtins_rust/wait/src/lib.rs @@ -212,6 +212,7 @@ extern "C" { fn wait_for_background_pids(ps:*mut procstat); fn wait_for_single_pid(pid:pid_t,flags:i32)->i32; fn wait_for_job(job:i32,flags:i32,ps:*mut procstat)->i32; + fn builtin_help(); } unsafe fn DIGIT(c:c_char)->bool{ @@ -274,6 +275,10 @@ pub extern "C" fn r_wait_builtin(mut list:*mut WordList)->i32{ 'f' => wflags |= JWAIT_FORCE!(), 'p' => vname = list_optarg, _ => { + if opt == -99 { + builtin_help(); + return EX_USAGE; + } r_builtin_usage(); return EX_USAGE; } diff --git a/record.txt b/record.txt index d4b98abc5f08ec1a4cc780a19cd410f5d43a29c3..79f8b7ed90086bef1b7685d9606608f684e751b7 100644 --- a/record.txt +++ b/record.txt @@ -33,3 +33,4 @@ 55 56 57 +58