Prechádzať zdrojové kódy

Weak linkage for getopt and fnmatch

Jeremy Soller 6 rokov pred
rodič
commit
e32fc12308

+ 1 - 0
src/header/fnmatch/mod.rs

@@ -118,6 +118,7 @@ unsafe fn tokenize(mut pattern: *const u8, flags: c_int) -> Vec<(Token, Range)>
 }
 
 #[no_mangle]
+#[linkage = "weak"] // often redefined in GNU programs
 pub unsafe extern "C" fn fnmatch(pattern: *const c_char, input: *const c_char, flags: c_int) -> c_int {
     let mut len = 0;
     while *input.offset(len) != 0 {

+ 1 - 0
src/header/getopt/mod.rs

@@ -20,6 +20,7 @@ pub struct option {
 }
 
 #[no_mangle]
+#[linkage = "weak"] // often redefined in GNU programs
 pub unsafe extern "C" fn getopt_long(
     argc: c_int,
     argv: *const *mut c_char,

+ 5 - 0
src/header/unistd/getopt.rs

@@ -7,21 +7,26 @@ use platform::types::*;
 
 #[allow(non_upper_case_globals)]
 #[no_mangle]
+#[linkage = "weak"] // often redefined in GNU programs
 pub static mut optarg: *mut c_char = ptr::null_mut();
 
 #[allow(non_upper_case_globals)]
 #[no_mangle]
+#[linkage = "weak"] // often redefined in GNU programs
 pub static mut optind: c_int = 1;
 
 #[allow(non_upper_case_globals)]
 #[no_mangle]
+#[linkage = "weak"] // often redefined in GNU programs
 pub static mut opterr: c_int = 1;
 
 #[allow(non_upper_case_globals)]
 #[no_mangle]
+#[linkage = "weak"] // often redefined in GNU programs
 pub static mut optopt: c_int = -1;
 
 #[no_mangle]
+#[linkage = "weak"] // often redefined in GNU programs
 pub unsafe extern "C" fn getopt(
     argc: c_int,
     argv: *const *mut c_char,