@@ -1816,9 +1816,9 @@ pub mod module {
1816
1816
}
1817
1817
}
1818
1818
1819
- struct PathConfName ( i32 ) ;
1819
+ struct PathconfName ( i32 ) ;
1820
1820
1821
- impl TryFromObject for PathConfName {
1821
+ impl TryFromObject for PathconfName {
1822
1822
fn try_from_object ( vm : & VirtualMachine , obj : PyObjectRef ) -> PyResult < Self > {
1823
1823
let i = match obj. downcast :: < PyInt > ( ) {
1824
1824
Ok ( int) => int. try_to_primitive ( vm) ?,
@@ -2004,7 +2004,7 @@ pub mod module {
2004
2004
#[ pyfunction]
2005
2005
fn pathconf (
2006
2006
path : OsPathOrFd ,
2007
- PathConfName ( name) : PathConfName ,
2007
+ PathconfName ( name) : PathconfName ,
2008
2008
vm : & VirtualMachine ,
2009
2009
) -> PyResult < Option < libc:: c_long > > {
2010
2010
use nix:: errno:: { self , Errno } ;
@@ -2037,7 +2037,7 @@ pub mod module {
2037
2037
#[ pyfunction]
2038
2038
fn fpathconf (
8000
code>
2039
2039
fd : i32 ,
2040
- name : PathConfName ,
2040
+ name : PathconfName ,
2041
2041
vm : & VirtualMachine ,
2042
2042
) -> PyResult < Option < libc:: c_long > > {
2043
2043
pathconf ( OsPathOrFd :: Fd ( fd) , name, vm)
@@ -2059,6 +2059,202 @@ pub mod module {
2059
2059
pathname
2060
2060
}
2061
2061
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
+
2062
2258
#[ cfg( any( target_os = "linux" , target_os = "macos" ) ) ]
2063
2259
#[ derive( FromArgs ) ]
2064
2260
struct SendFileArgs < ' fd > {
0 commit comments