@@ -1816,9 +1816,9 @@ pub mod module {
18161816 }
18171817 }
18181818
1819- struct PathConfName ( i32 ) ;
1819+ struct PathconfName ( i32 ) ;
18201820
1821- impl TryFromObject for PathConfName {
1821+ impl TryFromObject for PathconfName {
18221822 fn try_from_object ( vm : & VirtualMachine , obj : PyObjectRef ) -> PyResult < Self > {
18231823 let i = match obj. downcast :: < PyInt > ( ) {
18241824 Ok ( int) => int. try_to_primitive ( vm) ?,
@@ -2004,7 +2004,7 @@ pub mod module {
20042004 #[ pyfunction]
20052005 fn pathconf (
20062006 path : OsPathOrFd ,
2007- PathConfName ( name) : PathConfName ,
2007+ PathconfName ( name) : PathconfName ,
20082008 vm : & VirtualMachine ,
20092009 ) -> PyResult < Option < libc:: c_long > > {
20102010 use nix:: errno:: { self , Errno } ;
@@ -2037,7 +2037,7 @@ pub mod module {
20372037 #[ pyfunction]
20382038 fn fpathconf (
20392039 fd : i32 ,
2040- name : PathConfName ,
2040+ name : PathconfName ,
20412041 vm : & VirtualMachine ,
20422042 ) -> PyResult < Option < libc:: c_long > > {
20432043 pathconf ( OsPathOrFd :: Fd ( fd) , name, vm)
@@ -2059,6 +2059,202 @@ pub mod module {
20592059 pathname
20602060 }
20612061
2062+ #[ cfg( not( target_os = "redox" ) ) ]
2063+ #[ derive( Clone , Copy , Debug , Eq , Hash , PartialEq , EnumIter , EnumString ) ]
2064+ #[ repr( i32 ) ]
2065+ #[ allow( non_camel_case_types) ]
2066+ pub enum SysconfVar {
2067+ SC_2_CHAR_TERM = libc:: _SC_2_CHAR_TERM,
2068+ SC_2_C_BIND = libc:: _SC_2_C_BIND,
2069+ SC_2_C_DEV = libc:: _SC_2_C_DEV,
2070+ SC_2_FORT_DEV = libc:: _SC_2_FORT_DEV,
2071+ SC_2_FORT_RUN = libc:: _SC_2_FORT_RUN,
2072+ SC_2_LOCALEDEF = libc:: _SC_2_LOCALEDEF,
2073+ SC_2_SW_DEV = libc:: _SC_2_SW_DEV,
2074+ SC_2_UPE = libc:: _SC_2_UPE,
2075+ SC_2_VERSION = libc:: _SC_2_VERSION,
2076+ SC_AIO_LISTIO_MAX = libc:: _SC_AIO_LISTIO_MAX,
2077+ SC_AIO_MAX = libc:: _SC_AIO_MAX,
2078+ SC_AIO_PRIO_DELTA_MAX = libc:: _SC_AIO_PRIO_DELTA_MAX,
2079+ SC_ARG_MAX = libc:: _SC_ARG_MAX,
2080+ SC_ASYNCHRONOUS_IO = libc:: _SC_ASYNCHRONOUS_IO,
2081+ SC_ATEXIT_MAX = libc:: _SC_ATEXIT_MAX,
2082+ SC_BC_BASE_MAX = libc:: _SC_BC_BASE_MAX,
2083+ SC_BC_DIM_MAX = libc:: _SC_BC_DIM_MAX,
2084+ SC_BC_SCALE_MAX = libc:: _SC_BC_SCALE_MAX,
2085+ SC_BC_STRING_MAX = libc:: _SC_BC_STRING_MAX,
2086+ SC_CHILD_MAX = libc:: _SC_CHILD_MAX,
2087+ SC_CLK_TCK = libc:: _SC_CLK_TCK,
2088+ SC_COLL_WEIGHTS_MAX = libc:: _SC_COLL_WEIGHTS_MAX,
2089+ SC_DELAYTIMER_MAX = libc:: _SC_DELAYTIMER_MAX,
2090+ SC_EXPR_NEST_MAX = libc:: _SC_EXPR_NEST_MAX,
2091+ SC_FSYNC = libc:: _SC_FSYNC,
2092+ SC_GETGR_R_SIZE_MAX = libc:: _SC_GETGR_R_SIZE_MAX,
2093+ SC_GETPW_R_SIZE_MAX = libc:: _SC_GETPW_R_SIZE_MAX,
2094+ SC_IOV_MAX = libc:: _SC_IOV_MAX,
2095+ SC_JOB_CONTROL = libc:: _SC_JOB_CONTROL,
2096+ SC_LINE_MAX = libc:: _SC_LINE_MAX,
2097+ SC_LOGIN_NAME_MAX = libc:: _SC_LOGIN_NAME_MAX,
2098+ SC_MAPPED_FILES = libc:: _SC_MAPPED_FILES,
2099+ SC_MEMLOCK = libc:: _SC_MEMLOCK,
2100+ SC_MEMLOCK_RANGE = libc:: _SC_MEMLOCK_RANGE,
2101+ SC_MEMORY_PROTECTION = libc:: _SC_MEMORY_PROTECTION,
2102+ SC_MESSAGE_PASSING = libc:: _SC_MESSAGE_PASSING,
2103+ SC_MQ_OPEN_MAX = libc:: _SC_MQ_OPEN_MAX,
2104+ SC_MQ_PRIO_MAX = libc:: _SC_MQ_PRIO_MAX,
2105+ SC_NGROUPS_MAX = libc:: _SC_NGROUPS_MAX,
2106+ SC_NPROCESSORS_CONF = libc:: _SC_NPROCESSORS_CONF,
2107+ SC_NPROCESSORS_ONLN = libc:: _SC_NPROCESSORS_ONLN,
2108+ SC_OPEN_MAX = libc:: _SC_OPEN_MAX,
2109+ SC_PAGE_SIZE = libc:: _SC_PAGE_SIZE,
2110+ #[ cfg( any(
2111+ target_os = "linux" ,
2112+ target_vendor = "apple" ,
2113+ target_os = "netbsd" ,
2114+ target_os = "fuchsia"
2115+ ) ) ]
2116+ SC_PASS_MAX = libc:: _SC_PASS_MAX,
2117+ SC_PHYS_PAGES = libc:: _SC_PHYS_PAGES,
2118+ SC_PRIORITIZED_IO = libc:: _SC_PRIORITIZED_IO,
2119+ SC_PRIORITY_SCHEDULING = libc:: _SC_PRIORITY_SCHEDULING,
2120+ SC_REALTIME_SIGNALS = libc:: _SC_REALTIME_SIGNALS,
2121+ SC_RE_DUP_MAX = libc:: _SC_RE_DUP_MAX,
2122+ SC_RTSIG_MAX = libc:: _SC_RTSIG_MAX,
2123+ SC_SAVED_IDS = libc:: _SC_SAVED_IDS,
2124+ SC_SEMAPHORES = libc:: _SC_SEMAPHORES,
2125+ SC_SEM_NSEMS_MAX = libc:: _SC_SEM_NSEMS_MAX,
2126+ SC_SEM_VALUE_MAX = libc:: _SC_SEM_VALUE_MAX,
2127+ SC_SHARED_MEMORY_OBJECTS = libc:: _SC_SHARED_MEMORY_OBJECTS,
2128+ SC_SIGQUEUE_MAX = libc:: _SC_SIGQUEUE_MAX,
2129+ SC_STREAM_MAX = libc:: _SC_STREAM_MAX,
2130+ SC_SYNCHRONIZED_IO = libc:: _SC_SYNCHRONIZED_IO,
2131+ SC_THREADS = libc:: _SC_THREADS,
2132+ SC_THREAD_ATTR_STACKADDR = libc:: _SC_THREAD_ATTR_STACKADDR,
2133+ SC_THREAD_ATTR_STACKSIZE = libc:: _SC_THREAD_ATTR_STACKSIZE,
2134+ SC_THREAD_DESTRUCTOR_ITERATIONS = libc:: _SC_THREAD_DESTRUCTOR_ITERATIONS,
2135+ SC_THREAD_KEYS_MAX = libc:: _SC_THREAD_KEYS_MAX,
2136+ SC_THREAD_PRIORITY_SCHEDULING = libc:: _SC_THREAD_PRIORITY_SCHEDULING,
2137+ SC_THREAD_PRIO_INHERIT = libc:: _SC_THREAD_PRIO_INHERIT,
2138+ SC_THREAD_PRIO_PROTECT = libc:: _SC_THREAD_PRIO_PROTECT,
2139+ SC_THREAD_PROCESS_SHARED = libc:: _SC_THREAD_PROCESS_SHARED,
2140+ SC_THREAD_SAFE_FUNCTIONS = libc:: _SC_THREAD_SAFE_FUNCTIONS,
2141+ SC_THREAD_STACK_MIN = libc:: _SC_THREAD_STACK_MIN,
2142+ SC_THREAD_THREADS_MAX = libc:: _SC_THREAD_THREADS_MAX,
2143+ SC_TIMERS = libc:: _SC_TIMERS,
2144+ SC_TIMER_MAX = libc:: _SC_TIMER_MAX,
2145+ SC_TTY_NAME_MAX = libc:: _SC_TTY_NAME_MAX,
2146+ SC_TZNAME_MAX = libc:: _SC_TZNAME_MAX,
2147+ SC_VERSION = libc:: _SC_VERSION,
2148+ SC_XOPEN_CRYPT = libc:: _SC_XOPEN_CRYPT,
2149+ SC_XOPEN_ENH_I18N = libc:: _SC_XOPEN_ENH_I18N,
2150+ SC_XOPEN_LEGACY = libc:: _SC_XOPEN_LEGACY,
2151+ SC_XOPEN_REALTIME = libc:: _SC_XOPEN_REALTIME,
2152+ SC_XOPEN_REALTIME_THREADS = libc:: _SC_XOPEN_REALTIME_THREADS,
2153+ SC_XOPEN_SHM = libc:: _SC_XOPEN_SHM,
2154+ SC_XOPEN_UNIX = libc:: _SC_XOPEN_UNIX,
2155+ SC_XOPEN_VERSION = libc:: _SC_XOPEN_VERSION,
2156+ SC_XOPEN_XCU_VERSION = libc:: _SC_XOPEN_XCU_VERSION,
2157+ #[ cfg( any(
2158+ target_os = "linux" ,
2159+ target_vendor = "apple" ,
2160+ target_os = "netbsd" ,
2161+ target_os = "fuchsia"
2162+ ) ) ]
2163+ SC_XBS5_ILP32_OFF32 = libc:: _SC_XBS5_ILP32_OFF32,
2164+ #[ cfg( any(
2165+ target_os = "linux" ,
2166+ target_vendor = "apple" ,
2167+ target_os = "netbsd" ,
2168+ target_os = "fuchsia"
2169+ ) ) ]
2170+ SC_XBS5_ILP32_OFFBIG = libc:: _SC_XBS5_ILP32_OFFBIG,
2171+ #[ cfg( any(
2172+ target_os = "linux" ,
2173+ target_vendor = "apple" ,
2174+ target_os = "netbsd" ,
2175+ target_os = "fuchsia"
2176+ ) ) ]
2177+ SC_XBS5_LP64_OFF64 = libc:: _SC_XBS5_LP64_OFF64,
2178+ #[ cfg( any(
2179+ target_os = "linux" ,
2180+ target_vendor = "apple" ,
2181+ target_os = "netbsd" ,
2182+ target_os = "fuchsia"
2183+ ) ) ]
2184+ SC_XBS5_LPBIG_OFFBIG = libc:: _SC_XBS5_LPBIG_OFFBIG,
2185+ }
2186+
2187+ #[ cfg( target_os = "redox" ) ]
2188+ #[ derive( Clone , Copy , Debug , Eq , Hash , PartialEq , EnumIter , EnumString ) ]
2189+ #[ repr( i32 ) ]
2190+ #[ allow( non_camel_case_types) ]
2191+ pub enum SysconfVar {
2192+ SC_ARG_MAX = libc:: _SC_ARG_MAX,
2193+ SC_CHILD_MAX = libc:: _SC_CHILD_MAX,
2194+ SC_CLK_TCK = libc:: _SC_CLK_TCK,
2195+ SC_NGROUPS_MAX = libc:: _SC_NGROUPS_MAX,
2196+ SC_OPEN_MAX = libc:: _SC_OPEN_MAX,
2197+ SC_STREAM_MAX = libc:: _SC_STREAM_MAX,
2198+ SC_TZNAME_MAX = libc:: _SC_TZNAME_MAX,
2199+ SC_VERSION = libc:: _SC_VERSION,
2200+ SC_PAGE_SIZE = libc:: _SC_PAGE_SIZE,
2201+ SC_RE_DUP_MAX = libc:: _SC_RE_DUP_MAX,
2202+ SC_LOGIN_NAME_MAX = libc:: _SC_LOGIN_NAME_MAX,
2203+ SC_TTY_NAME_MAX = libc:: _SC_TTY_NAME_MAX,
2204+ SC_SYMLOOP_MAX = libc:: _SC_SYMLOOP_MAX,
2205+ SC_HOST_NAME_MAX = libc:: _SC_HOST_NAME_MAX,
2206+ }
2207+
2208+ impl SysconfVar {
2209+ pub const SC_PAGESIZE : SysconfVar = Self :: SC_PAGE_SIZE ;
2210+ }
2211+
2212+ struct SysconfName ( i32 ) ;
2213+
2214+ impl TryFromObject for SysconfName {
2215+ fn try_from_object ( vm : & VirtualMachine , obj : PyObjectRef ) -> PyResult < Self > {
2216+ let i = match obj. downcast :: < PyInt > ( ) {
2217+ Ok ( int) => int. try_to_primitive ( vm) ?,
2218+ Err ( obj) => {
2219+ let s = PyStrRef :: try_from_object ( vm, obj) ?;
2220+ s. as_str ( ) . parse :: < SysconfVar > ( ) . or_else ( |_| {
2221+ if s. as_str ( ) == "SC_PAGESIZE" {
2222+ Ok ( SysconfVar :: SC_PAGESIZE )
2223+ } else {
2224+ Err ( vm. new_value_error ( "unrecognized configuration name" . to_string ( ) ) )
2225+ }
2226+ } ) ? as i32
2227+ }
2228+ } ;
2229+ Ok ( Self ( i) )
2230+ }
2231+ }
2232+
2233+ #[ pyfunction]
2234+ fn sysconf ( name : SysconfName , vm : & VirtualMachine ) -> PyResult < libc:: c_long > {
2235+ let r = unsafe { libc:: sysconf ( name. 0 ) } ;
2236+ if r == -1 {
2237+ return Err ( errno_err ( vm) ) ;
2238+ }
2239+ Ok ( r)
2240+ }
2241+
2242+ #[ pyattr]
2243+ fn sysconf_names ( vm : & VirtualMachine ) -> PyDictRef {
2244+ use strum:: IntoEnumIterator ;
2245+ let names = vm. ctx . new_dict ( ) ;
2246+ for variant in SysconfVar :: iter ( ) {
2247+ // get the name of variant as a string to use as the dictionary key
2248+ let key = vm. ctx . new_str ( format ! ( "{:?}" , variant) ) ;
2249+ // get the enum from the string and convert it to an integer for the dictionary value
2250+ let value = vm. ctx . new_int ( variant as u8 ) ;
2251+ names
2252+ . set_item ( & * key, value. into ( ) , vm)
2253+ . expect ( "dict set_item unexpectedly failed" ) ;
2254+ }
2255+ names
2256+ }
2257+
20622258 #[ cfg( any( target_os = "linux" , target_os = "macos" ) ) ]
20632259 #[ derive( FromArgs ) ]
20642260 struct SendFileArgs < ' fd > {
0 commit comments