default.rs 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. use core::sync::atomic::AtomicBool;
  2. use core::ptr;
  3. use super::{constants, internal, BUFSIZ, FILE, UNGET};
  4. #[allow(non_upper_case_globals)]
  5. static mut default_stdin_buf: [u8; BUFSIZ as usize + UNGET] = [0; BUFSIZ as usize + UNGET];
  6. #[allow(non_upper_case_globals)]
  7. static mut default_stdin: FILE = FILE {
  8. flags: constants::F_PERM | constants::F_NOWR | constants::F_BADJ,
  9. rpos: ptr::null_mut(),
  10. rend: ptr::null_mut(),
  11. wend: ptr::null_mut(),
  12. wpos: ptr::null_mut(),
  13. wbase: ptr::null_mut(),
  14. fd: 0,
  15. buf: unsafe { &mut default_stdin_buf as *mut [u8] as *mut u8 },
  16. buf_size: BUFSIZ as usize,
  17. buf_char: -1,
  18. unget: UNGET,
  19. lock: AtomicBool::new(false),
  20. };
  21. #[allow(non_upper_case_globals)]
  22. static mut default_stdout_buf: [u8; BUFSIZ as usize] = [0; BUFSIZ as usize];
  23. #[allow(non_upper_case_globals)]
  24. static mut default_stdout: FILE = FILE {
  25. flags: constants::F_PERM | constants::F_NORD | constants::F_BADJ,
  26. rpos: ptr::null_mut(),
  27. rend: ptr::null_mut(),
  28. wend: ptr::null_mut(),
  29. wpos: ptr::null_mut(),
  30. wbase: ptr::null_mut(),
  31. fd: 1,
  32. buf: unsafe { &mut default_stdout_buf } as *mut [u8] as *mut u8,
  33. buf_size: BUFSIZ as usize,
  34. buf_char: b'\n' as i8,
  35. unget: 0,
  36. lock: AtomicBool::new(false),
  37. };
  38. #[allow(non_upper_case_globals)]
  39. static mut default_stderr_buf: [u8; BUFSIZ as usize] = [0; BUFSIZ as usize];
  40. #[allow(non_upper_case_globals)]
  41. static mut default_stderr: FILE = FILE {
  42. flags: constants::F_PERM | constants::F_NORD | constants::F_BADJ,
  43. rpos: ptr::null_mut(),
  44. rend: ptr::null_mut(),
  45. wend: ptr::null_mut(),
  46. wpos: ptr::null_mut(),
  47. wbase: ptr::null_mut(),
  48. fd: 2,
  49. buf: unsafe { &mut default_stderr_buf } as *mut [u8] as *mut u8,
  50. buf_size: BUFSIZ as usize,
  51. buf_char: -1,
  52. unget: 0,
  53. lock: AtomicBool::new(false),
  54. };
  55. // Don't ask me how the casting below works, I have no idea
  56. // " as *const FILE as *mut FILE" rust pls
  57. //
  58. // -- Tommoa
  59. #[allow(non_upper_case_globals)]
  60. #[no_mangle]
  61. pub static mut stdin: *mut FILE = unsafe { &default_stdin } as *const FILE as *mut FILE;
  62. #[allow(non_upper_case_globals)]
  63. #[no_mangle]
  64. pub static mut stdout: *mut FILE = unsafe { &default_stdout } as *const FILE as *mut FILE;
  65. #[allow(non_upper_case_globals)]
  66. #[no_mangle]
  67. pub static mut stderr: *mut FILE = unsafe { &default_stderr } as *const FILE as *mut FILE;