sysconf.rs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. use core::convert::TryInto;
  2. use crate::{
  3. header::errno,
  4. platform::{self, types::*, Pal, Sys},
  5. };
  6. // POSIX.1 {
  7. pub const _SC_ARG_MAX: c_int = 0;
  8. pub const _SC_CHILD_MAX: c_int = 1;
  9. pub const _SC_CLK_TCK: c_int = 2;
  10. pub const _SC_NGROUPS_MAX: c_int = 3;
  11. pub const _SC_OPEN_MAX: c_int = 4;
  12. pub const _SC_STREAM_MAX: c_int = 5;
  13. pub const _SC_TZNAME_MAX: c_int = 6;
  14. // ...
  15. pub const _SC_VERSION: c_int = 29;
  16. pub const _SC_PAGESIZE: c_int = 30;
  17. pub const _SC_PAGE_SIZE: c_int = 30;
  18. // ...
  19. pub const _SC_RE_DUP_MAX: c_int = 44;
  20. // ...
  21. pub const _SC_GETPW_R_SIZE_MAX: c_int = 70;
  22. pub const _SC_LOGIN_NAME_MAX: c_int = 71;
  23. pub const _SC_TTY_NAME_MAX: c_int = 72;
  24. // ...
  25. pub const _SC_SYMLOOP_MAX: c_int = 173;
  26. // ...
  27. pub const _SC_HOST_NAME_MAX: c_int = 180;
  28. // } POSIX.1
  29. #[no_mangle]
  30. pub extern "C" fn sysconf(name: c_int) -> c_long {
  31. //TODO: Real values
  32. match name {
  33. _SC_ARG_MAX => 4096,
  34. _SC_CHILD_MAX => 65536,
  35. _SC_CLK_TCK => 100,
  36. _SC_NGROUPS_MAX => 65536,
  37. _SC_OPEN_MAX => 1024,
  38. _SC_STREAM_MAX => 16,
  39. _SC_TZNAME_MAX => -1,
  40. _SC_VERSION => 200809,
  41. _SC_PAGESIZE => Sys::getpagesize()
  42. .try_into()
  43. .expect("page size not representable as type `long`"),
  44. _SC_RE_DUP_MAX => 32767,
  45. _SC_GETPW_R_SIZE_MAX => -1,
  46. _SC_LOGIN_NAME_MAX => 256,
  47. _SC_TTY_NAME_MAX => 32,
  48. _SC_SYMLOOP_MAX => -1,
  49. _SC_HOST_NAME_MAX => 64,
  50. _ => {
  51. unsafe {
  52. platform::errno = errno::EINVAL;
  53. }
  54. -1
  55. }
  56. }
  57. }