redrust/
setcpuaffinity.rs1extern crate c2rust_bitfields;
2extern crate libc;
3extern crate core;
4extern "C" {
5 fn strtoul(
6 _: *const libc::c_char,
7 _: *mut *mut libc::c_char,
8 _: libc::c_int,
9 ) -> libc::c_ulong;
10 fn strchr(_: *const libc::c_char, _: libc::c_int) -> *mut libc::c_char;
11 fn __ctype_b_loc() -> *mut *const libc::c_ushort;
12 fn sched_setaffinity(
13 __pid: __pid_t,
14 __cpusetsize: size_t,
15 __cpuset: *const cpu_set_t,
16 ) -> libc::c_int;
17}
18pub type size_t = libc::c_ulong;
19pub type __pid_t = libc::c_int;
20pub type C2RustUnnamed = libc::c_uint;
21pub const _ISalnum: C2RustUnnamed = 8;
22pub const _ISpunct: C2RustUnnamed = 4;
23pub const _IScntrl: C2RustUnnamed = 2;
24pub const _ISblank: C2RustUnnamed = 1;
25pub const _ISgraph: C2RustUnnamed = 32768;
26pub const _ISprint: C2RustUnnamed = 16384;
27pub const _ISspace: C2RustUnnamed = 8192;
28pub const _ISxdigit: C2RustUnnamed = 4096;
29pub const _ISdigit: C2RustUnnamed = 2048;
30pub const _ISalpha: C2RustUnnamed = 1024;
31pub const _ISlower: C2RustUnnamed = 512;
32pub const _ISupper: C2RustUnnamed = 256;
33pub type __cpu_mask = libc::c_ulong;
34#[derive(Copy, Clone)]
35#[repr(C)]
36pub struct cpu_set_t {
37 pub __bits: [__cpu_mask; 16],
38}
39unsafe extern "C" fn next_token(
40 mut q: *const libc::c_char,
41 mut sep: libc::c_int,
42) -> *const libc::c_char {
43 if !q.is_null() {
44 q = strchr(q, sep);
45 }
46 if !q.is_null() {
47 q = q.offset(1);
48 }
49 return q;
50}
51unsafe extern "C" fn next_num(
52 mut str: *const libc::c_char,
53 mut end: *mut *mut libc::c_char,
54 mut result: *mut libc::c_int,
55) -> libc::c_int {
56 if str.is_null() || *str as libc::c_int == '\0' as i32
57 || *(*__ctype_b_loc()).offset(*str as libc::c_int as isize) as libc::c_int
58 & _ISdigit as libc::c_int as libc::c_ushort as libc::c_int == 0
59 {
60 return -(1 as libc::c_int);
61 }
62 *result = strtoul(str, end, 10 as libc::c_int) as libc::c_int;
63 if str == *end as *const libc::c_char {
64 return -(1 as libc::c_int);
65 }
66 return 0 as libc::c_int;
67}
68#[no_mangle]
69pub unsafe extern "C" fn setcpuaffinity(mut cpulist: *const libc::c_char) {
70 let mut p: *const libc::c_char = 0 as *const libc::c_char;
71 let mut q: *const libc::c_char = 0 as *const libc::c_char;
72 let mut end: *mut libc::c_char = 0 as *mut libc::c_char;
73 let mut cpuset: cpu_set_t = cpu_set_t { __bits: [0; 16] };
74 if cpulist.is_null() {
75 return;
76 }
77 libc::memset(
78 &mut cpuset as *mut cpu_set_t as *mut libc::c_void,
79 '\0' as i32,
80 core::mem::size_of::<cpu_set_t>() as libc::c_ulong as libc::size_t,
81 );
82 q = cpulist;
83 loop {
84 p = q;
85 q = next_token(q, ',' as i32);
86 if p.is_null() {
87 break;
88 }
89 let mut a: libc::c_int = 0;
90 let mut b: libc::c_int = 0;
91 let mut s: libc::c_int = 0;
92 let mut c1: *const libc::c_char = 0 as *const libc::c_char;
93 let mut c2: *const libc::c_char = 0 as *const libc::c_char;
94 if next_num(p, &mut end, &mut a) != 0 as libc::c_int {
95 return;
96 }
97 b = a;
98 s = 1 as libc::c_int;
99 p = end;
100 c1 = next_token(p, '-' as i32);
101 c2 = next_token(p, ',' as i32);
102 if !c1.is_null() && (c2.is_null() || c1 < c2) {
103 if next_num(c1, &mut end, &mut b) != 0 as libc::c_int {
104 return;
105 }
106 c1 = if !end.is_null() && *end as libc::c_int != 0 {
107 next_token(end, ':' as i32)
108 } else {
109 0 as *const libc::c_char
110 };
111 if !c1.is_null() && (c2.is_null() || c1 < c2) {
112 if next_num(c1, &mut end, &mut s) != 0 as libc::c_int {
113 return;
114 }
115 if s == 0 as libc::c_int {
116 return;
117 }
118 }
119 }
120 if a > b {
121 return;
122 }
123 while a <= b {
124 let mut __cpu: size_t = a as size_t;
125 if __cpu.wrapping_div(8 as libc::c_int as libc::c_ulong)
126 < core::mem::size_of::<cpu_set_t>() as libc::c_ulong
127 {
128 let ref mut fresh0 = *(cpuset.__bits)
129 .as_mut_ptr()
130 .offset(
131 __cpu
132 .wrapping_div(
133 (8 as libc::c_int as libc::c_ulong)
134 .wrapping_mul(
135 core::mem::size_of::<__cpu_mask>() as libc::c_ulong,
136 ),
137 ) as isize,
138 );
139 *fresh0
140 |= (1 as libc::c_int as __cpu_mask)
141 << __cpu
142 .wrapping_rem(
143 (8 as libc::c_int as libc::c_ulong)
144 .wrapping_mul(
145 core::mem::size_of::<__cpu_mask>() as libc::c_ulong,
146 ),
147 );
148 } else {};
149 a += s;
150 }
151 }
152 if !end.is_null() && *end as libc::c_int != 0 {
153 return;
154 }
155 sched_setaffinity(
156 0 as libc::c_int,
157 core::mem::size_of::<cpu_set_t>() as libc::c_ulong,
158 &mut cpuset,
159 );
160}