cxa.rs 601 B

12345678910111213141516171819202122232425262728
  1. use platform::types::*;
  2. #[derive(Clone, Copy)]
  3. struct CxaAtExitFunc {
  4. func: extern "C" fn(*mut c_void),
  5. arg: *mut c_void,
  6. dso: *mut c_void,
  7. }
  8. static mut CXA_ATEXIT_FUNCS: [Option<CxaAtExitFunc>; 32] = [None; 32];
  9. #[no_mangle]
  10. pub unsafe extern "C" fn __cxa_atexit(
  11. func_opt: Option<extern "C" fn(*mut c_void)>,
  12. arg: *mut c_void,
  13. dso: *mut c_void,
  14. ) -> c_int {
  15. for item in &mut CXA_ATEXIT_FUNCS {
  16. if item.is_none() {
  17. *item = func_opt.map(|func| CxaAtExitFunc { func, arg, dso });
  18. return 0;
  19. }
  20. }
  21. -1
  22. }
  23. // TODO: cxa_finalize