From 20cad295c502464703d25aa1da7eab4136a4d40e Mon Sep 17 00:00:00 2001 From: liutong Date: Thu, 10 Aug 2023 23:45:04 +0800 Subject: [PATCH] fixed cmd --help error --- bash-5.1/builtins_rust/cd/src/lib.rs | 15 +++++++++++++-- bash-5.1/builtins_rust/complete/src/lib.rs | 5 +++++ bash-5.1/builtins_rust/declare/src/lib.rs | 7 ++++++- bash-5.1/builtins_rust/fc/src/lib.rs | 11 ++++++----- bash-5.1/builtins_rust/mapfile/src/intercdep.rs | 1 + bash-5.1/builtins_rust/mapfile/src/lib.rs | 4 ++++ bash-5.1/builtins_rust/printf/src/intercdep.rs | 1 + bash-5.1/builtins_rust/printf/src/lib.rs | 4 ++++ bash-5.1/builtins_rust/read/src/intercdep.rs | 2 +- bash-5.1/builtins_rust/read/src/lib.rs | 4 ++++ bash-5.1/builtins_rust/set/src/lib.rs | 15 ++++++++++++--- bash-5.1/builtins_rust/setattr/src/intercdep.rs | 1 + bash-5.1/builtins_rust/setattr/src/lib.rs | 4 ++++ bash-5.1/builtins_rust/shopt/src/lib.rs | 2 +- bash-5.1/builtins_rust/source/src/lib.rs | 7 ++++--- bash-5.1/builtins_rust/suspend/src/lib.rs | 4 ++++ bash-5.1/builtins_rust/trap/src/intercdep.rs | 1 + bash-5.1/builtins_rust/trap/src/lib.rs | 4 ++++ bash-5.1/builtins_rust/type/src/lib.rs | 12 ++++++++---- bash-5.1/builtins_rust/ulimit/src/lib.rs | 2 +- bash-5.1/builtins_rust/umask/src/lib.rs | 8 +++++++- bash-5.1/builtins_rust/wait/src/lib.rs | 5 +++++ record.txt | 1 + 23 files changed, 98 insertions(+), 22 deletions(-) diff --git a/bash-5.1/builtins_rust/cd/src/lib.rs b/bash-5.1/builtins_rust/cd/src/lib.rs index 1025580..a44fe50 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 9dd58df..a3254b4 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 eede3a8..6da37b1 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 5d0eb3f..66bbbfc 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 8450248..a3ebfc3 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 4fa35f5..c4d9530 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 db66567..1f133a6 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 1a29c02..23bf458 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 4ea450b..5c9570a 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 5ca4bd4..3fcc468 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 32066f4..715d32d 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 8c46559..a6bf581 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 2d8def2..3fa36f7 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/shopt/src/lib.rs b/bash-5.1/builtins_rust/shopt/src/lib.rs index c557ab7..717189d 100644 --- a/bash-5.1/builtins_rust/shopt/src/lib.rs +++ b/bash-5.1/builtins_rust/shopt/src/lib.rs @@ -926,7 +926,7 @@ pub unsafe extern "C" fn r_shopt_builtin(mut list: *mut WordList) -> i32 { reset_internal_getopt(); let psuoq = CString::new("psuoq").expect("CString::new failed"); loop { - opt = internal_getopt( list, psuoq.as_ptr() as *mut c_char); + opt = internal_getopt( list, psuoq.as_ptr() as *mut i8); if !(opt != -(1 as i32)) { break; } diff --git a/bash-5.1/builtins_rust/source/src/lib.rs b/bash-5.1/builtins_rust/source/src/lib.rs index a33457a..190eb0a 100644 --- a/bash-5.1/builtins_rust/source/src/lib.rs +++ b/bash-5.1/builtins_rust/source/src/lib.rs @@ -294,6 +294,7 @@ unsafe fn DEBUG_TRAP()->i32 #[no_mangle] pub extern "C" fn r_source_builtin (list:* mut WordList)->i32 { + let mut result:i32; let mut filename:*mut c_char; let mut debug_trap:* mut c_char; @@ -306,7 +307,7 @@ pub extern "C" fn r_source_builtin (list:* mut WordList)->i32 let mut llist:* mut WordList = loptend.clone(); if list == std::ptr::null_mut() { - builtin_error (CString::new("filename argument required").unwrap().as_ptr()); + builtin_error (b"filename argument required\0" as *const u8 as *const i8 as *mut i8 ); builtin_usage (); return EX_USAGE; } @@ -344,7 +345,7 @@ pub extern "C" fn r_source_builtin (list:* mut WordList)->i32 } } - begin_unwind_frame (CString::new("source").unwrap().as_ptr() as * mut c_char); + begin_unwind_frame (b"source\0" as *const u8 as *const i8 as *mut i8); let xf:Functions=Functions{f_xfree :xfree}; add_unwind_protect (xf, filename); @@ -380,7 +381,7 @@ pub extern "C" fn r_source_builtin (list:* mut WordList)->i32 result = source_file (filename, (list !=std::ptr::null_mut() && (*list).next !=std::ptr::null_mut()) as i32); - run_unwind_frame (CString::new("source").unwrap().as_ptr() as * mut c_char); + run_unwind_frame (b"source\0" as *const u8 as *const i8 as *mut i8); return result; } diff --git a/bash-5.1/builtins_rust/suspend/src/lib.rs b/bash-5.1/builtins_rust/suspend/src/lib.rs index bf5b428..bce0878 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 93e2d8a..fba354d 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 7e10165..f5dddb3 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 ddf85bf..497a021 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 2ed26a2..2e35791 100644 --- a/bash-5.1/builtins_rust/ulimit/src/lib.rs +++ b/bash-5.1/builtins_rust/ulimit/src/lib.rs @@ -493,7 +493,7 @@ pub unsafe extern "C" fn r_ulimit_builtin(mut list: *mut WordList) -> i32{ _ => { //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 6e15373..2cca8c7 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 7936203..8eb6196 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 fbd5ac7..a7c85a2 100644 --- a/record.txt +++ b/record.txt @@ -56,3 +56,4 @@ 55 56 57 +58 -- Gitee