diff --git a/bash-5.1/builtins_rust/printf/src/lib.rs b/bash-5.1/builtins_rust/printf/src/lib.rs index e4cdd99e36e051fb046efc46747b03e0f2cc25bb..1a91fa0071f281c9eeaf19cc60305ef3f84d235e 100644 --- a/bash-5.1/builtins_rust/printf/src/lib.rs +++ b/bash-5.1/builtins_rust/printf/src/lib.rs @@ -705,7 +705,7 @@ unsafe { } b'e' | b'E' | b'f' | b'F' | b'g' | b'G' | b'a' | b'A' => { let p = getfloatmax(); - let f = mklong(start, "L\0".as_ptr() as *mut c_char, 1); + let f = mklong(start, "l\0".as_ptr() as *mut c_char, 1); libc::clearerr(stdout); let PF = || { let nw: c_int; diff --git a/bash-5.1/builtins_rust/pushd/src/lib.rs b/bash-5.1/builtins_rust/pushd/src/lib.rs index 4210454bff3338b0a189d33e232927b0d937bdd9..70fa17da261a20a3581f010648007619eed5785d 100644 --- a/bash-5.1/builtins_rust/pushd/src/lib.rs +++ b/bash-5.1/builtins_rust/pushd/src/lib.rs @@ -2,7 +2,7 @@ extern crate libc; extern crate nix; use libc::{c_char, c_long, c_void}; -use std::{ffi::CString}; +use std::{ffi::{CString,CStr}}; use rcommon::{WordList, WordDesc, EX_USAGE, EXECUTION_SUCCESS, EXECUTION_FAILURE, EX_NOTFOUND, EX_NOEXEC, SUBSHELL_PAREN,r_builtin_usage}; use rhelp::r_builtin_help; @@ -245,7 +245,7 @@ unsafe fn ISHELP(s:* const c_char)->bool unsafe fn ISOPTION(s:* const c_char, c:c_char)->bool { - return *s == '-' as c_char && *((s as usize + 1)as * mut c_char) == c && *((s as usize + 8)as * mut c_char) != 0; + return *s == '-' as c_char && *(s.offset(1)) == c && *(s.offset(2)) == 0; } unsafe fn savestring(x:* const c_char)->* mut c_char @@ -585,15 +585,15 @@ pub extern "C" fn r_dirs_builtin (listt:* mut WordList)->i32 break; } else if *((*((*list).word)).word) == '+' as c_char || *((*((*list).word)).word) == '-' as c_char { let sign:i32; - w = ((*((*list).word)).word as usize +1) as * mut c_char; - if legal_number (w, &mut i) == 0 { + w = (*(*list).word).word.offset(1); + if legal_number (w, &mut i) == 0 { sh_invalidnum ((*((*list).word)).word); builtin_usage (); return EX_USAGE; } - if *((*((*list).word)).word) == '+' as c_char { - sign = -1; + if *((*(*list).word).word) == '+' as c_char{ + sign = 1; } else { sign = -1; } @@ -782,7 +782,7 @@ pub extern "C" fn r_get_dirstack_index (ind:libc::c_long, sign:i32, indexp:* mut if sign > 0 { *indexp=1; } else { - *indexp=0; + *indexp=2; } } /* dirs +0 prints the current working directory. */ diff --git a/record.txt b/record.txt index ef0c2355c59c135db31cb8d760b40931d8e474ec..93350850aa958c39948d56d330fc1c395f658b79 100644 --- a/record.txt +++ b/record.txt @@ -95,3 +95,4 @@ 94 95 96 +97