1 // This module contains bindings to the native Haiku API. The Haiku API
2 // originates from BeOS, and it was the original way to perform low level
3 // system and IO operations. The POSIX API was in that era was like a
4 // compatibility layer. In current Haiku development, both the POSIX API and
5 // the Haiku API are considered to be co-equal status. However, they are not
6 // integrated like they are on other UNIX platforms, which means that for many
7 // low level concepts there are two versions, like processes (POSIX) and
8 // teams (Haiku), or pthreads and native threads.
9 //
10 // Both the POSIX API and the Haiku API live in libroot.so, the library that is
11 // linked to any binary by default.
12 //
13 // This file follows the Haiku API for Haiku R1 beta 2. It is organized by the
14 // C/C++ header files in which the concepts can be found, while adhering to the
15 // style guide for this crate.
16
17 // Helper macro to generate u32 constants. The Haiku API uses (non-standard)
18 // multi-character constants (like 'UPDA' or 'MSGM') to represent 32 bit
19 // integer constants.
20
21 macro_rules! haiku_constant {
22 ($a:tt, $b:tt, $c:tt, $d:tt) => {
23 (($a as u32) << 24) + (($b as u32) << 16) + (($c as u32) << 8) + ($d as u32)
24 };
25 }
26
27 // support/SupportDefs.h
28 pub type status_t = i32;
29 pub type bigtime_t = i64;
30 pub type nanotime_t = i64;
31 pub type type_code = u32;
32 pub type perform_code = u32;
33
34 // kernel/OS.h
35 pub type area_id = i32;
36 pub type port_id = i32;
37 pub type sem_id = i32;
38 pub type team_id = i32;
39 pub type thread_id = i32;
40
41 pub type thread_func = extern "C" fn(*mut ::c_void) -> status_t;
42
43 // kernel/image.h
44 pub type image_id = i32;
45
46 e! {
47 // kernel/OS.h
48 pub enum thread_state {
49 B_THREAD_RUNNING = 1,
50 B_THREAD_READY,
51 B_THREAD_RECEIVING,
52 B_THREAD_ASLEEP,
53 B_THREAD_SUSPENDED,
54 B_THREAD_WAITING
55 }
56
57 // kernel/image.h
58 pub enum image_type {
59 B_APP_IMAGE = 1,
60 B_LIBRARY_IMAGE,
61 B_ADD_ON_IMAGE,
62 B_SYSTEM_IMAGE
63 }
64
65 // kernel/scheduler.h
66
67 pub enum be_task_flags {
68 B_DEFAULT_MEDIA_PRIORITY = 0x000,
69 B_OFFLINE_PROCESSING = 0x001,
70 B_STATUS_RENDERING = 0x002,
71 B_USER_INPUT_HANDLING = 0x004,
72 B_LIVE_VIDEO_MANIPULATION = 0x008,
73 B_VIDEO_PLAYBACK = 0x010,
74 B_VIDEO_RECORDING = 0x020,
75 B_LIVE_AUDIO_MANIPULATION = 0x040,
76 B_AUDIO_PLAYBACK = 0x080,
77 B_AUDIO_RECORDING = 0x100,
78 B_LIVE_3D_RENDERING = 0x200,
79 B_NUMBER_CRUNCHING = 0x400,
80 B_MIDI_PROCESSING = 0x800,
81 }
82
83 pub enum schduler_mode {
84 SCHEDULER_MODE_LOW_LATENCY,
85 SCHEDULER_MODE_POWER_SAVING,
86 }
87
88 // FindDirectory.h
89 pub enum path_base_directory {
90 B_FIND_PATH_INSTALLATION_LOCATION_DIRECTORY,
91 B_FIND_PATH_ADD_ONS_DIRECTORY,
92 B_FIND_PATH_APPS_DIRECTORY,
93 B_FIND_PATH_BIN_DIRECTORY,
94 B_FIND_PATH_BOOT_DIRECTORY,
95 B_FIND_PATH_CACHE_DIRECTORY,
96 B_FIND_PATH_DATA_DIRECTORY,
97 B_FIND_PATH_DEVELOP_DIRECTORY,
98 B_FIND_PATH_DEVELOP_LIB_DIRECTORY,
99 B_FIND_PATH_DOCUMENTATION_DIRECTORY,
100 B_FIND_PATH_ETC_DIRECTORY,
101 B_FIND_PATH_FONTS_DIRECTORY,
102 B_FIND_PATH_HEADERS_DIRECTORY,
103 B_FIND_PATH_LIB_DIRECTORY,
104 B_FIND_PATH_LOG_DIRECTORY,
105 B_FIND_PATH_MEDIA_NODES_DIRECTORY,
106 B_FIND_PATH_PACKAGES_DIRECTORY,
107 B_FIND_PATH_PREFERENCES_DIRECTORY,
108 B_FIND_PATH_SERVERS_DIRECTORY,
109 B_FIND_PATH_SETTINGS_DIRECTORY,
110 B_FIND_PATH_SOUNDS_DIRECTORY,
111 B_FIND_PATH_SPOOL_DIRECTORY,
112 B_FIND_PATH_TRANSLATORS_DIRECTORY,
113 B_FIND_PATH_VAR_DIRECTORY,
114 B_FIND_PATH_IMAGE_PATH = 1000,
115 B_FIND_PATH_PACKAGE_PATH,
116 }
117
118 pub enum directory_which {
119 B_DESKTOP_DIRECTORY = 0,
120 B_TRASH_DIRECTORY,
121 B_SYSTEM_DIRECTORY = 1000,
122 B_SYSTEM_ADDONS_DIRECTORY = 1002,
123 B_SYSTEM_BOOT_DIRECTORY,
124 B_SYSTEM_FONTS_DIRECTORY,
125 B_SYSTEM_LIB_DIRECTORY,
126 B_SYSTEM_SERVERS_DIRECTORY,
127 B_SYSTEM_APPS_DIRECTORY,
128 B_SYSTEM_BIN_DIRECTORY,
129 B_SYSTEM_DOCUMENTATION_DIRECTORY = 1010,
130 B_SYSTEM_PREFERENCES_DIRECTORY,
131 B_SYSTEM_TRANSLATORS_DIRECTORY,
132 B_SYSTEM_MEDIA_NODES_DIRECTORY,
133 B_SYSTEM_SOUNDS_DIRECTORY,
134 B_SYSTEM_DATA_DIRECTORY,
135 B_SYSTEM_DEVELOP_DIRECTORY,
136 B_SYSTEM_PACKAGES_DIRECTORY,
137 B_SYSTEM_HEADERS_DIRECTORY,
138 B_SYSTEM_ETC_DIRECTORY = 2008,
139 B_SYSTEM_SETTINGS_DIRECTORY = 2010,
140 B_SYSTEM_LOG_DIRECTORY = 2012,
141 B_SYSTEM_SPOOL_DIRECTORY,
142 B_SYSTEM_TEMP_DIRECTORY,
143 B_SYSTEM_VAR_DIRECTORY,
144 B_SYSTEM_CACHE_DIRECTORY = 2020,
145 B_SYSTEM_NONPACKAGED_DIRECTORY = 2023,
146 B_SYSTEM_NONPACKAGED_ADDONS_DIRECTORY,
147 B_SYSTEM_NONPACKAGED_TRANSLATORS_DIRECTORY,
148 B_SYSTEM_NONPACKAGED_MEDIA_NODES_DIRECTORY,
149 B_SYSTEM_NONPACKAGED_BIN_DIRECTORY,
150 B_SYSTEM_NONPACKAGED_DATA_DIRECTORY,
151 B_SYSTEM_NONPACKAGED_FONTS_DIRECTORY,
152 B_SYSTEM_NONPACKAGED_SOUNDS_DIRECTORY,
153 B_SYSTEM_NONPACKAGED_DOCUMENTATION_DIRECTORY,
154 B_SYSTEM_NONPACKAGED_LIB_DIRECTORY,
155 B_SYSTEM_NONPACKAGED_HEADERS_DIRECTORY,
156 B_SYSTEM_NONPACKAGED_DEVELOP_DIRECTORY,
157 B_USER_DIRECTORY = 3000,
158 B_USER_CONFIG_DIRECTORY,
159 B_USER_ADDONS_DIRECTORY,
160 B_USER_BOOT_DIRECTORY,
161 B_USER_FONTS_DIRECTORY,
162 B_USER_LIB_DIRECTORY,
163 B_USER_SETTINGS_DIRECTORY,
164 B_USER_DESKBAR_DIRECTORY,
165 B_USER_PRINTERS_DIRECTORY,
166 B_USER_TRANSLATORS_DIRECTORY,
167 B_USER_MEDIA_NODES_DIRECTORY,
168 B_USER_SOUNDS_DIRECTORY,
169 B_USER_DATA_DIRECTORY,
170 B_USER_CACHE_DIRECTORY,
171 B_USER_PACKAGES_DIRECTORY,
172 B_USER_HEADERS_DIRECTORY,
173 B_USER_NONPACKAGED_DIRECTORY,
174 B_USER_NONPACKAGED_ADDONS_DIRECTORY,
175 B_USER_NONPACKAGED_TRANSLATORS_DIRECTORY,
176 B_USER_NONPACKAGED_MEDIA_NODES_DIRECTORY,
177 B_USER_NONPACKAGED_BIN_DIRECTORY,
178 B_USER_NONPACKAGED_DATA_DIRECTORY,
179 B_USER_NONPACKAGED_FONTS_DIRECTORY,
180 B_USER_NONPACKAGED_SOUNDS_DIRECTORY,
181 B_USER_NONPACKAGED_DOCUMENTATION_DIRECTORY,
182 B_USER_NONPACKAGED_LIB_DIRECTORY,
183 B_USER_NONPACKAGED_HEADERS_DIRECTORY,
184 B_USER_NONPACKAGED_DEVELOP_DIRECTORY,
185 B_USER_DEVELOP_DIRECTORY,
186 B_USER_DOCUMENTATION_DIRECTORY,
187 B_USER_SERVERS_DIRECTORY,
188 B_USER_APPS_DIRECTORY,
189 B_USER_BIN_DIRECTORY,
190 B_USER_PREFERENCES_DIRECTORY,
191 B_USER_ETC_DIRECTORY,
192 B_USER_LOG_DIRECTORY,
193 B_USER_SPOOL_DIRECTORY,
194 B_USER_VAR_DIRECTORY,
195 B_APPS_DIRECTORY = 4000,
196 B_PREFERENCES_DIRECTORY,
197 B_UTILITIES_DIRECTORY,
198 B_PACKAGE_LINKS_DIRECTORY,
199 }
200
201 // kernel/OS.h
202
203 pub enum topology_level_type {
204 B_TOPOLOGY_UNKNOWN,
205 B_TOPOLOGY_ROOT,
206 B_TOPOLOGY_SMT,
207 B_TOPOLOGY_CORE,
208 B_TOPOLOGY_PACKAGE,
209 }
210
211 pub enum cpu_platform {
212 B_CPU_UNKNOWN,
213 B_CPU_x86,
214 B_CPU_x86_64,
215 B_CPU_PPC,
216 B_CPU_PPC_64,
217 B_CPU_M68K,
218 B_CPU_ARM,
219 B_CPU_ARM_64,
220 B_CPU_ALPHA,
221 B_CPU_MIPS,
222 B_CPU_SH,
223 B_CPU_SPARC,
224 B_CPU_RISC_V
225 }
226
227 pub enum cpu_vendor {
228 B_CPU_VENDOR_UNKNOWN,
229 B_CPU_VENDOR_AMD,
230 B_CPU_VENDOR_CYRIX,
231 B_CPU_VENDOR_IDT,
232 B_CPU_VENDOR_INTEL,
233 B_CPU_VENDOR_NATIONAL_SEMICONDUCTOR,
234 B_CPU_VENDOR_RISE,
235 B_CPU_VENDOR_TRANSMETA,
236 B_CPU_VENDOR_VIA,
237 B_CPU_VENDOR_IBM,
238 B_CPU_VENDOR_MOTOROLA,
239 B_CPU_VENDOR_NEC,
240 B_CPU_VENDOR_HYGON,
241 B_CPU_VENDOR_SUN,
242 B_CPU_VENDOR_FUJITSU
243 }
244 }
245
246 s! {
247 // kernel/OS.h
248 pub struct area_info {
249 pub area: area_id,
250 pub name: [::c_char; B_OS_NAME_LENGTH],
251 pub size: usize,
252 pub lock: u32,
253 pub protection: u32,
254 pub team: team_id,
255 pub ram_size: u32,
256 pub copy_count: u32,
257 pub in_count: u32,
258 pub out_count: u32,
259 pub address: *mut ::c_void
260 }
261
262 pub struct port_info {
263 pub port: port_id,
264 pub team: team_id,
265 pub name: [::c_char; B_OS_NAME_LENGTH],
266 pub capacity: i32,
267 pub queue_count: i32,
268 pub total_count: i32,
269 }
270
271 pub struct port_message_info {
272 pub size: ::size_t,
273 pub sender: ::uid_t,
274 pub sender_group: ::gid_t,
275 pub sender_team: ::team_id
276 }
277
278 pub struct team_info {
279 pub team: team_id,
280 pub thread_count: i32,
281 pub image_count: i32,
282 pub area_count: i32,
283 pub debugger_nub_thread: thread_id,
284 pub debugger_nub_port: port_id,
285 pub argc: i32,
286 pub args: [::c_char; 64],
287 pub uid: ::uid_t,
288 pub gid: ::gid_t
289 }
290
291 pub struct sem_info {
292 pub sem: sem_id,
293 pub team: team_id,
294 pub name: [::c_char; B_OS_NAME_LENGTH],
295 pub count: i32,
296 pub latest_holder: thread_id
297 }
298
299 pub struct team_usage_info {
300 pub user_time: bigtime_t,
301 pub kernel_time: bigtime_t
302 }
303
304 pub struct thread_info {
305 pub thread: thread_id,
306 pub team: team_id,
307 pub name: [::c_char; B_OS_NAME_LENGTH],
308 pub state: thread_state,
309 pub priority: i32,
310 pub sem: sem_id,
311 pub user_time: bigtime_t,
312 pub kernel_time: bigtime_t,
313 pub stack_base: *mut ::c_void,
314 pub stack_end: *mut ::c_void
315 }
316
317 pub struct cpu_info {
318 pub active_time: bigtime_t,
319 pub enabled: bool,
320 pub current_frequency: u64
321 }
322
323 pub struct system_info {
324 pub boot_time: bigtime_t,
325 pub cpu_count: u32,
326 pub max_pages: u64,
327 pub used_pages: u64,
328 pub cached_pages: u64,
329 pub block_cache_pages: u64,
330 pub ignored_pages: u64,
331 pub needed_memory: u64,
332 pub free_memory: u64,
333 pub max_swap_pages: u64,
334 pub free_swap_pages: u64,
335 pub page_faults: u32,
336 pub max_sems: u32,
337 pub used_sems: u32,
338 pub max_ports: u32,
339 pub used_ports: u32,
340 pub max_threads: u32,
341 pub used_threads: u32,
342 pub max_teams: u32,
343 pub used_teams: u32,
344 pub kernel_name: [::c_char; B_FILE_NAME_LENGTH],
345 pub kernel_build_date: [::c_char; B_OS_NAME_LENGTH],
346 pub kernel_build_time: [::c_char; B_OS_NAME_LENGTH],
347 pub kernel_version: i64,
348 pub abi: u32
349 }
350
351 pub struct object_wait_info {
352 pub object: i32,
353 pub type_: u16,
354 pub events: u16
355 }
356
357 pub struct cpu_topology_root_info {
358 pub platform: cpu_platform,
359 }
360
361 pub struct cpu_topology_package_info {
362 pub vendor: cpu_vendor,
363 pub cache_line_size: u32,
364 }
365
366 pub struct cpu_topology_core_info {
367 pub model: u32,
368 pub default_frequency: u64,
369 }
370 // kernel/fs_attr.h
371 pub struct attr_info {
372 pub type_: u32,
373 pub size: ::off_t
374 }
375
376 // kernel/fs_index.h
377 pub struct index_info {
378 pub type_: u32,
379 pub size: ::off_t,
380 pub modification_time: ::time_t,
381 pub creation_time: ::time_t,
382 pub uid: ::uid_t,
383 pub gid: ::gid_t
384 }
385
386 //kernel/fs_info.h
387 pub struct fs_info {
388 pub dev: ::dev_t,
389 pub root: ::ino_t,
390 pub flags: u32,
391 pub block_size: ::off_t,
392 pub io_size: ::off_t,
393 pub total_blocks: ::off_t,
394 pub free_blocks: ::off_t,
395 pub total_nodes: ::off_t,
396 pub free_nodes: ::off_t,
397 pub device_name: [::c_char; 128],
398 pub volume_name: [::c_char; B_FILE_NAME_LENGTH],
399 pub fsh_name: [::c_char; B_OS_NAME_LENGTH]
400 }
401
402 // kernel/image.h
403 pub struct image_info {
404 pub id: image_id,
405 pub image_type: ::c_int,
406 pub sequence: i32,
407 pub init_order: i32,
408 pub init_routine: extern "C" fn(),
409 pub term_routine: extern "C" fn(),
410 pub device: ::dev_t,
411 pub node: ::ino_t,
412 pub name: [::c_char; ::PATH_MAX as usize],
413 pub text: *mut ::c_void,
414 pub data: *mut ::c_void,
415 pub text_size: i32,
416 pub data_size: i32,
417 pub api_version: i32,
418 pub abi: i32
419 }
420
421 pub struct __c_anonymous_eax_0 {
422 pub max_eax: u32,
423 pub vendor_id: [::c_char; 12],
424 }
425
426 pub struct __c_anonymous_eax_1 {
427 pub stepping: u32,
428 pub model: u32,
429 pub family: u32,
430 pub tpe: u32,
431 __reserved_0: u32,
432 pub extended_model: u32,
433 pub extended_family: u32,
434 __reserved_1: u32,
435 pub brand_index: u32,
436 pub clflush: u32,
437 pub logical_cpus: u32,
438 pub apic_id: u32,
439 pub features: u32,
440 pub extended_features: u32,
441 }
442
443 pub struct __c_anonymous_eax_2 {
444 pub call_num: u8,
445 pub cache_descriptors: [u8; 15],
446 }
447
448 pub struct __c_anonymous_eax_3 {
449 __reserved: [u32; 2],
450 pub serial_number_high: u32,
451 pub serial_number_low: u32,
452 }
453
454 pub struct __c_anonymous_regs {
455 pub eax: u32,
456 pub ebx: u32,
457 pub edx: u32,
458 pub ecx: u32,
459 }
460 }
461
462 s_no_extra_traits! {
463 #[cfg(libc_union)]
464 pub union cpuid_info {
465 pub eax_0: __c_anonymous_eax_0,
466 pub eax_1: __c_anonymous_eax_1,
467 pub eax_2: __c_anonymous_eax_2,
468 pub eax_3: __c_anonymous_eax_3,
469 pub as_chars: [::c_char; 16],
470 pub regs: __c_anonymous_regs,
471 }
472
473 #[cfg(libc_union)]
474 pub union __c_anonymous_cpu_topology_info_data {
475 pub root: cpu_topology_root_info,
476 pub package: cpu_topology_package_info,
477 pub core: cpu_topology_core_info,
478 }
479
480 pub struct cpu_topology_node_info {
481 pub id: u32,
482 pub type_: topology_level_type,
483 pub level: u32,
484 #[cfg(libc_union)]
485 pub data: __c_anonymous_cpu_topology_info_data,
486 #[cfg(not(libc_union))]
487 pub data: cpu_topology_core_info,
488 }
489 }
490
491 cfg_if! {
492 if #[cfg(feature = "extra_traits")] {
493 #[cfg(libc_union)]
494 impl PartialEq for cpuid_info {
495 fn eq(&self, other: &cpuid_info) -> bool {
496 unsafe {
497 self.eax_0 == other.eax_0
498 || self.eax_1 == other.eax_1
499 || self.eax_2 == other.eax_2
500 || self.eax_3 == other.eax_3
501 || self.as_chars == other.as_chars
502 || self.regs == other.regs
503 }
504 }
505 }
506 #[cfg(libc_union)]
507 impl Eq for cpuid_info {}
508 #[cfg(libc_union)]
509 impl ::fmt::Debug for cpuid_info {
510 fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
511 unsafe {
512 f.debug_struct("cpuid_info")
513 .field("eax_0", &self.eax_0)
514 .field("eax_1", &self.eax_1)
515 .field("eax_2", &self.eax_2)
516 .field("eax_3", &self.eax_3)
517 .field("as_chars", &self.as_chars)
518 .field("regs", &self.regs)
519 .finish()
520 }
521 }
522 }
523
524 #[cfg(libc_union)]
525 impl PartialEq for __c_anonymous_cpu_topology_info_data {
526 fn eq(&self, other: &__c_anonymous_cpu_topology_info_data) -> bool {
527 unsafe {
528 self.root == other.root
529 || self.package == other.package
530 || self.core == other.core
531 }
532 }
533 }
534 #[cfg(libc_union)]
535 impl Eq for __c_anonymous_cpu_topology_info_data {}
536 #[cfg(libc_union)]
537 impl ::fmt::Debug for __c_anonymous_cpu_topology_info_data {
538 fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
539 unsafe {
540 f.debug_struct("__c_anonymous_cpu_topology_info_data")
541 .field("root", &self.root)
542 .field("package", &self.package)
543 .field("core", &self.core)
544 .finish()
545 }
546 }
547 }
548
549 impl PartialEq for cpu_topology_node_info {
550 fn eq(&self, other: &cpu_topology_node_info) -> bool {
551 self.id == other.id
552 && self.type_ == other.type_
553 && self.level == other.level
554 }
555 }
556
557 impl Eq for cpu_topology_node_info {}
558 impl ::fmt::Debug for cpu_topology_node_info {
559 fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
560 f.debug_struct("cpu_topology_node_info")
561 .field("id", &self.id)
562 .field("type", &self.type_)
563 .field("level", &self.level)
564 .finish()
565 }
566 }
567 }
568 }
569
570 // kernel/OS.h
571 pub const B_OS_NAME_LENGTH: usize = 32;
572 pub const B_PAGE_SIZE: usize = 4096;
573 pub const B_INFINITE_TIMEOUT: usize = 9223372036854775807;
574
575 pub const B_RELATIVE_TIMEOUT: u32 = 0x8;
576 pub const B_ABSOLUTE_TIMEOUT: u32 = 0x10;
577 pub const B_TIMEOUT_REAL_TIME_BASE: u32 = 0x40;
578 pub const B_ABSOLUTE_REAL_TIME_TIMEOUT: u32 = B_ABSOLUTE_TIMEOUT | B_TIMEOUT_REAL_TIME_BASE;
579
580 pub const B_NO_LOCK: u32 = 0;
581 pub const B_LAZY_LOCK: u32 = 1;
582 pub const B_FULL_LOCK: u32 = 2;
583 pub const B_CONTIGUOUS: u32 = 3;
584 pub const B_LOMEM: u32 = 4;
585 pub const B_32_BIT_FULL_LOCK: u32 = 5;
586 pub const B_32_BIT_CONTIGUOUS: u32 = 6;
587
588 pub const B_ANY_ADDRESS: u32 = 0;
589 pub const B_EXACT_ADDRESS: u32 = 1;
590 pub const B_BASE_ADDRESS: u32 = 2;
591 pub const B_CLONE_ADDRESS: u32 = 3;
592 pub const B_ANY_KERNEL_ADDRESS: u32 = 4;
593 pub const B_RANDOMIZED_ANY_ADDRESS: u32 = 6;
594 pub const B_RANDOMIZED_BASE_ADDRESS: u32 = 7;
595
596 pub const B_READ_AREA: u32 = 1 << 0;
597 pub const B_WRITE_AREA: u32 = 1 << 1;
598 pub const B_EXECUTE_AREA: u32 = 1 << 2;
599 pub const B_STACK_AREA: u32 = 1 << 3;
600 pub const B_CLONEABLE_AREA: u32 = 1 << 8;
601
602 pub const B_CAN_INTERRUPT: u32 = 0x01;
603 pub const B_CHECK_PERMISSION: u32 = 0x04;
604 pub const B_KILL_CAN_INTERRUPT: u32 = 0x20;
605 pub const B_DO_NOT_RESCHEDULE: u32 = 0x02;
606 pub const B_RELEASE_ALL: u32 = 0x08;
607 pub const B_RELEASE_IF_WAITING_ONLY: u32 = 0x10;
608
609 pub const B_CURRENT_TEAM: team_id = 0;
610 pub const B_SYSTEM_TEAM: team_id = 1;
611
612 pub const B_TEAM_USAGE_SELF: i32 = 0;
613 pub const B_TEAM_USAGE_CHILDREN: i32 = -1;
614
615 pub const B_IDLE_PRIORITY: i32 = 0;
616 pub const B_LOWEST_ACTIVE_PRIORITY: i32 = 1;
617 pub const B_LOW_PRIORITY: i32 = 5;
618 pub const B_NORMAL_PRIORITY: i32 = 10;
619 pub const B_DISPLAY_PRIORITY: i32 = 15;
620 pub const B_URGENT_DISPLAY_PRIORITY: i32 = 20;
621 pub const B_REAL_TIME_DISPLAY_PRIORITY: i32 = 100;
622 pub const B_URGENT_PRIORITY: i32 = 110;
623 pub const B_REAL_TIME_PRIORITY: i32 = 120;
624
625 pub const B_SYSTEM_TIMEBASE: i32 = 0;
626 pub const B_FIRST_REAL_TIME_PRIORITY: i32 = B_REAL_TIME_DISPLAY_PRIORITY;
627
628 pub const B_ONE_SHOT_ABSOLUTE_ALARM: u32 = 1;
629 pub const B_ONE_SHOT_RELATIVE_ALARM: u32 = 2;
630 pub const B_PERIODIC_ALARM: u32 = 3;
631
632 pub const B_OBJECT_TYPE_FD: u16 = 0;
633 pub const B_OBJECT_TYPE_SEMAPHORE: u16 = 1;
634 pub const B_OBJECT_TYPE_PORT: u16 = 2;
635 pub const B_OBJECT_TYPE_THREAD: u16 = 3;
636
637 pub const B_EVENT_READ: u16 = 0x0001;
638 pub const B_EVENT_WRITE: u16 = 0x0002;
639 pub const B_EVENT_ERROR: u16 = 0x0004;
640 pub const B_EVENT_PRIORITY_READ: u16 = 0x0008;
641 pub const B_EVENT_PRIORITY_WRITE: u16 = 0x0010;
642 pub const B_EVENT_HIGH_PRIORITY_READ: u16 = 0x0020;
643 pub const B_EVENT_HIGH_PRIORITY_WRITE: u16 = 0x0040;
644 pub const B_EVENT_DISCONNECTED: u16 = 0x0080;
645 pub const B_EVENT_ACQUIRE_SEMAPHORE: u16 = 0x0001;
646 pub const B_EVENT_INVALID: u16 = 0x1000;
647
648 // kernel/fs_info.h
649 pub const B_FS_IS_READONLY: u32 = 0x00000001;
650 pub const B_FS_IS_REMOVABLE: u32 = 0x00000002;
651 pub const B_FS_IS_PERSISTENT: u32 = 0x00000004;
652 pub const B_FS_IS_SHARED: u32 = 0x00000008;
653 pub const B_FS_HAS_MIME: u32 = 0x00010000;
654 pub const B_FS_HAS_ATTR: u32 = 0x00020000;
655 pub const B_FS_HAS_QUERY: u32 = 0x00040000;
656 pub const B_FS_HAS_SELF_HEALING_LINKS: u32 = 0x00080000;
657 pub const B_FS_HAS_ALIASES: u32 = 0x00100000;
658 pub const B_FS_SUPPORTS_NODE_MONITORING: u32 = 0x00200000;
659 pub const B_FS_SUPPORTS_MONITOR_CHILDREN: u32 = 0x00400000;
660
661 // kernel/fs_query.h
662 pub const B_LIVE_QUERY: u32 = 0x00000001;
663 pub const B_QUERY_NON_INDEXED: u32 = 0x00000002;
664
665 // kernel/fs_volume.h
666 pub const B_MOUNT_READ_ONLY: u32 = 1;
667 pub const B_MOUNT_VIRTUAL_DEVICE: u32 = 2;
668 pub const B_FORCE_UNMOUNT: u32 = 1;
669
670 // kernel/image.h
671 pub const B_FLUSH_DCACHE: u32 = 0x0001;
672 pub const B_FLUSH_ICACHE: u32 = 0x0004;
673 pub const B_INVALIDATE_DCACHE: u32 = 0x0002;
674 pub const B_INVALIDATE_ICACHE: u32 = 0x0008;
675
676 pub const B_SYMBOL_TYPE_DATA: i32 = 0x1;
677 pub const B_SYMBOL_TYPE_TEXT: i32 = 0x2;
678 pub const B_SYMBOL_TYPE_ANY: i32 = 0x5;
679
680 // storage/StorageDefs.h
681 pub const B_DEV_NAME_LENGTH: usize = 128;
682 pub const B_FILE_NAME_LENGTH: usize = ::FILENAME_MAX as usize;
683 pub const B_PATH_NAME_LENGTH: usize = ::PATH_MAX as usize;
684 pub const B_ATTR_NAME_LENGTH: usize = B_FILE_NAME_LENGTH - 1;
685 pub const B_MIME_TYPE_LENGTH: usize = B_ATTR_NAME_LENGTH - 15;
686 pub const B_MAX_SYMLINKS: usize = 16;
687
688 // Haiku open modes in BFile are passed as u32
689 pub const B_READ_ONLY: u32 = ::O_RDONLY as u32;
690 pub const B_WRITE_ONLY: u32 = ::O_WRONLY as u32;
691 pub const B_READ_WRITE: u32 = ::O_RDWR as u32;
692
693 pub const B_FAIL_IF_EXISTS: u32 = ::O_EXCL as u32;
694 pub const B_CREATE_FILE: u32 = ::O_CREAT as u32;
695 pub const B_ERASE_FILE: u32 = ::O_TRUNC as u32;
696 pub const B_OPEN_AT_END: u32 = ::O_APPEND as u32;
697
698 pub const B_FILE_NODE: u32 = 0x01;
699 pub const B_SYMLINK_NODE: u32 = 0x02;
700 pub const B_DIRECTORY_NODE: u32 = 0x04;
701 pub const B_ANY_NODE: u32 = 0x07;
702
703 // support/Errors.h
704 pub const B_GENERAL_ERROR_BASE: status_t = core::i32::MIN;
705 pub const B_OS_ERROR_BASE: status_t = B_GENERAL_ERROR_BASE + 0x1000;
706 pub const B_APP_ERROR_BASE: status_t = B_GENERAL_ERROR_BASE + 0x2000;
707 pub const B_INTERFACE_ERROR_BASE: status_t = B_GENERAL_ERROR_BASE + 0x3000;
708 pub const B_MEDIA_ERROR_BASE: status_t = B_GENERAL_ERROR_BASE + 0x4000;
709 pub const B_TRANSLATION_ERROR_BASE: status_t = B_GENERAL_ERROR_BASE + 0x4800;
710 pub const B_MIDI_ERROR_BASE: status_t = B_GENERAL_ERROR_BASE + 0x5000;
711 pub const B_STORAGE_ERROR_BASE: status_t = B_GENERAL_ERROR_BASE + 0x6000;
712 pub const B_POSIX_ERROR_BASE: status_t = B_GENERAL_ERROR_BASE + 0x7000;
713 pub const B_MAIL_ERROR_BASE: status_t = B_GENERAL_ERROR_BASE + 0x8000;
714 pub const B_PRINT_ERROR_BASE: status_t = B_GENERAL_ERROR_BASE + 0x9000;
715 pub const B_DEVICE_ERROR_BASE: status_t = B_GENERAL_ERROR_BASE + 0xa000;
716 pub const B_ERRORS_END: status_t = B_GENERAL_ERROR_BASE + 0xffff;
717
718 // General errors
719 pub const B_NO_MEMORY: status_t = B_GENERAL_ERROR_BASE + 0;
720 pub const B_IO_ERROR: status_t = B_GENERAL_ERROR_BASE + 1;
721 pub const B_PERMISSION_DENIED: status_t = B_GENERAL_ERROR_BASE + 2;
722 pub const B_BAD_INDEX: status_t = B_GENERAL_ERROR_BASE + 3;
723 pub const B_BAD_TYPE: status_t = B_GENERAL_ERROR_BASE + 4;
724 pub const B_BAD_VALUE: status_t = B_GENERAL_ERROR_BASE + 5;
725 pub const B_MISMATCHED_VALUES: status_t = B_GENERAL_ERROR_BASE + 6;
726 pub const B_NAME_NOT_FOUND: status_t = B_GENERAL_ERROR_BASE + 7;
727 pub const B_NAME_IN_USE: status_t = B_GENERAL_ERROR_BASE + 8;
728 pub const B_TIMED_OUT: status_t = B_GENERAL_ERROR_BASE + 9;
729 pub const B_INTERRUPTED: status_t = B_GENERAL_ERROR_BASE + 10;
730 pub const B_WOULD_BLOCK: status_t = B_GENERAL_ERROR_BASE + 11;
731 pub const B_CANCELED: status_t = B_GENERAL_ERROR_BASE + 12;
732 pub const B_NO_INIT: status_t = B_GENERAL_ERROR_BASE + 13;
733 pub const B_NOT_INITIALIZED: status_t = B_GENERAL_ERROR_BASE + 13;
734 pub const B_BUSY: status_t = B_GENERAL_ERROR_BASE + 14;
735 pub const B_NOT_ALLOWED: status_t = B_GENERAL_ERROR_BASE + 15;
736 pub const B_BAD_DATA: status_t = B_GENERAL_ERROR_BASE + 16;
737 pub const B_DONT_DO_THAT: status_t = B_GENERAL_ERROR_BASE + 17;
738
739 pub const B_ERROR: status_t = -1;
740 pub const B_OK: status_t = 0;
741 pub const B_NO_ERROR: status_t = 0;
742
743 // Kernel kit errors
744 pub const B_BAD_SEM_ID: status_t = B_OS_ERROR_BASE + 0;
745 pub const B_NO_MORE_SEMS: status_t = B_OS_ERROR_BASE + 1;
746
747 pub const B_BAD_THREAD_ID: status_t = B_OS_ERROR_BASE + 0x100;
748 pub const B_NO_MORE_THREADS: status_t = B_OS_ERROR_BASE + 0x101;
749 pub const B_BAD_THREAD_STATE: status_t = B_OS_ERROR_BASE + 0x102;
750 pub const B_BAD_TEAM_ID: status_t = B_OS_ERROR_BASE + 0x103;
751 pub const B_NO_MORE_TEAMS: status_t = B_OS_ERROR_BASE + 0x104;
752
753 pub const B_BAD_PORT_ID: status_t = B_OS_ERROR_BASE + 0x200;
754 pub const B_NO_MORE_PORTS: status_t = B_OS_ERROR_BASE + 0x201;
755
756 pub const B_BAD_IMAGE_ID: status_t = B_OS_ERROR_BASE + 0x300;
757 pub const B_BAD_ADDRESS: status_t = B_OS_ERROR_BASE + 0x301;
758 pub const B_NOT_AN_EXECUTABLE: status_t = B_OS_ERROR_BASE + 0x302;
759 pub const B_MISSING_LIBRARY: status_t = B_OS_ERROR_BASE + 0x303;
760 pub const B_MISSING_SYMBOL: status_t = B_OS_ERROR_BASE + 0x304;
761 pub const B_UNKNOWN_EXECUTABLE: status_t = B_OS_ERROR_BASE + 0x305;
762 pub const B_LEGACY_EXECUTABLE: status_t = B_OS_ERROR_BASE + 0x306;
763
764 pub const B_DEBUGGER_ALREADY_INSTALLED: status_t = B_OS_ERROR_BASE + 0x400;
765
766 // Application kit errors
767 pub const B_BAD_REPLY: status_t = B_APP_ERROR_BASE + 0;
768 pub const B_DUPLICATE_REPLY: status_t = B_APP_ERROR_BASE + 1;
769 pub const B_MESSAGE_TO_SELF: status_t = B_APP_ERROR_BASE + 2;
770 pub const B_BAD_HANDLER: status_t = B_APP_ERROR_BASE + 3;
771 pub const B_ALREADY_RUNNING: status_t = B_APP_ERROR_BASE + 4;
772 pub const B_LAUNCH_FAILED: status_t = B_APP_ERROR_BASE + 5;
773 pub const B_AMBIGUOUS_APP_LAUNCH: status_t = B_APP_ERROR_BASE + 6;
774 pub const B_UNKNOWN_MIME_TYPE: status_t = B_APP_ERROR_BASE + 7;
775 pub const B_BAD_SCRIPT_SYNTAX: status_t = B_APP_ERROR_BASE + 8;
776 pub const B_LAUNCH_FAILED_NO_RESOLVE_LINK: status_t = B_APP_ERROR_BASE + 9;
777 pub const B_LAUNCH_FAILED_EXECUTABLE: status_t = B_APP_ERROR_BASE + 10;
778 pub const B_LAUNCH_FAILED_APP_NOT_FOUND: status_t = B_APP_ERROR_BASE + 11;
779 pub const B_LAUNCH_FAILED_APP_IN_TRASH: status_t = B_APP_ERROR_BASE + 12;
780 pub const B_LAUNCH_FAILED_NO_PREFERRED_APP: status_t = B_APP_ERROR_BASE + 13;
781 pub const B_LAUNCH_FAILED_FILES_APP_NOT_FOUND: status_t = B_APP_ERROR_BASE + 14;
782 pub const B_BAD_MIME_SNIFFER_RULE: status_t = B_APP_ERROR_BASE + 15;
783 pub const B_NOT_A_MESSAGE: status_t = B_APP_ERROR_BASE + 16;
784 pub const B_SHUTDOWN_CANCELLED: status_t = B_APP_ERROR_BASE + 17;
785 pub const B_SHUTTING_DOWN: status_t = B_APP_ERROR_BASE + 18;
786
787 // Storage kit errors
788 pub const B_FILE_ERROR: status_t = B_STORAGE_ERROR_BASE + 0;
789 pub const B_FILE_EXISTS: status_t = B_STORAGE_ERROR_BASE + 2;
790 pub const B_ENTRY_NOT_FOUND: status_t = B_STORAGE_ERROR_BASE + 3;
791 pub const B_NAME_TOO_LONG: status_t = B_STORAGE_ERROR_BASE + 4;
792 pub const B_NOT_A_DIRECTORY: status_t = B_STORAGE_ERROR_BASE + 5;
793 pub const B_DIRECTORY_NOT_EMPTY: status_t = B_STORAGE_ERROR_BASE + 6;
794 pub const B_DEVICE_FULL: status_t = B_STORAGE_ERROR_BASE + 7;
795 pub const B_READ_ONLY_DEVICE: status_t = B_STORAGE_ERROR_BASE + 8;
796 pub const B_IS_A_DIRECTORY: status_t = B_STORAGE_ERROR_BASE + 9;
797 pub const B_NO_MORE_FDS: status_t = B_STORAGE_ERROR_BASE + 10;
798 pub const B_CROSS_DEVICE_LINK: status_t = B_STORAGE_ERROR_BASE + 11;
799 pub const B_LINK_LIMIT: status_t = B_STORAGE_ERROR_BASE + 12;
800 pub const B_BUSTED_PIPE: status_t = B_STORAGE_ERROR_BASE + 13;
801 pub const B_UNSUPPORTED: status_t = B_STORAGE_ERROR_BASE + 14;
802 pub const B_PARTITION_TOO_SMALL: status_t = B_STORAGE_ERROR_BASE + 15;
803 pub const B_PARTIAL_READ: status_t = B_STORAGE_ERROR_BASE + 16;
804 pub const B_PARTIAL_WRITE: status_t = B_STORAGE_ERROR_BASE + 17;
805
806 // Mapped posix errors
807 pub const B_BUFFER_OVERFLOW: status_t = ::EOVERFLOW;
808 pub const B_TOO_MANY_ARGS: status_t = ::E2BIG;
809 pub const B_FILE_TOO_LARGE: status_t = ::EFBIG;
810 pub const B_RESULT_NOT_REPRESENTABLE: status_t = ::ERANGE;
811 pub const B_DEVICE_NOT_FOUND: status_t = ::ENODEV;
812 pub const B_NOT_SUPPORTED: status_t = ::EOPNOTSUPP;
813
814 // Media kit errors
815 pub const B_STREAM_NOT_FOUND: status_t = B_MEDIA_ERROR_BASE + 0;
816 pub const B_SERVER_NOT_FOUND: status_t = B_MEDIA_ERROR_BASE + 1;
817 pub const B_RESOURCE_NOT_FOUND: status_t = B_MEDIA_ERROR_BASE + 2;
818 pub const B_RESOURCE_UNAVAILABLE: status_t = B_MEDIA_ERROR_BASE + 3;
819 pub const B_BAD_SUBSCRIBER: status_t = B_MEDIA_ERROR_BASE + 4;
820 pub const B_SUBSCRIBER_NOT_ENTERED: status_t = B_MEDIA_ERROR_BASE + 5;
821 pub const B_BUFFER_NOT_AVAILABLE: status_t = B_MEDIA_ERROR_BASE + 6;
822 pub const B_LAST_BUFFER_ERROR: status_t = B_MEDIA_ERROR_BASE + 7;
823
824 pub const B_MEDIA_SYSTEM_FAILURE: status_t = B_MEDIA_ERROR_BASE + 100;
825 pub const B_MEDIA_BAD_NODE: status_t = B_MEDIA_ERROR_BASE + 101;
826 pub const B_MEDIA_NODE_BUSY: status_t = B_MEDIA_ERROR_BASE + 102;
827 pub const B_MEDIA_BAD_FORMAT: status_t = B_MEDIA_ERROR_BASE + 103;
828 pub const B_MEDIA_BAD_BUFFER: status_t = B_MEDIA_ERROR_BASE + 104;
829 pub const B_MEDIA_TOO_MANY_NODES: status_t = B_MEDIA_ERROR_BASE + 105;
830 pub const B_MEDIA_TOO_MANY_BUFFERS: status_t = B_MEDIA_ERROR_BASE + 106;
831 pub const B_MEDIA_NODE_ALREADY_EXISTS: status_t = B_MEDIA_ERROR_BASE + 107;
832 pub const B_MEDIA_BUFFER_ALREADY_EXISTS: status_t = B_MEDIA_ERROR_BASE + 108;
833 pub const B_MEDIA_CANNOT_SEEK: status_t = B_MEDIA_ERROR_BASE + 109;
834 pub const B_MEDIA_CANNOT_CHANGE_RUN_MODE: status_t = B_MEDIA_ERROR_BASE + 110;
835 pub const B_MEDIA_APP_ALREADY_REGISTERED: status_t = B_MEDIA_ERROR_BASE + 111;
836 pub const B_MEDIA_APP_NOT_REGISTERED: status_t = B_MEDIA_ERROR_BASE + 112;
837 pub const B_MEDIA_CANNOT_RECLAIM_BUFFERS: status_t = B_MEDIA_ERROR_BASE + 113;
838 pub const B_MEDIA_BUFFERS_NOT_RECLAIMED: status_t = B_MEDIA_ERROR_BASE + 114;
839 pub const B_MEDIA_TIME_SOURCE_STOPPED: status_t = B_MEDIA_ERROR_BASE + 115;
840 pub const B_MEDIA_TIME_SOURCE_BUSY: status_t = B_MEDIA_ERROR_BASE + 116;
841 pub const B_MEDIA_BAD_SOURCE: status_t = B_MEDIA_ERROR_BASE + 117;
842 pub const B_MEDIA_BAD_DESTINATION: status_t = B_MEDIA_ERROR_BASE + 118;
843 pub const B_MEDIA_ALREADY_CONNECTED: status_t = B_MEDIA_ERROR_BASE + 119;
844 pub const B_MEDIA_NOT_CONNECTED: status_t = B_MEDIA_ERROR_BASE + 120;
845 pub const B_MEDIA_BAD_CLIP_FORMAT: status_t = B_MEDIA_ERROR_BASE + 121;
846 pub const B_MEDIA_ADDON_FAILED: status_t = B_MEDIA_ERROR_BASE + 122;
847 pub const B_MEDIA_ADDON_DISABLED: status_t = B_MEDIA_ERROR_BASE + 123;
848 pub const B_MEDIA_CHANGE_IN_PROGRESS: status_t = B_MEDIA_ERROR_BASE + 124;
849 pub const B_MEDIA_STALE_CHANGE_COUNT: status_t = B_MEDIA_ERROR_BASE + 125;
850 pub const B_MEDIA_ADDON_RESTRICTED: status_t = B_MEDIA_ERROR_BASE + 126;
851 pub const B_MEDIA_NO_HANDLER: status_t = B_MEDIA_ERROR_BASE + 127;
852 pub const B_MEDIA_DUPLICATE_FORMAT: status_t = B_MEDIA_ERROR_BASE + 128;
853 pub const B_MEDIA_REALTIME_DISABLED: status_t = B_MEDIA_ERROR_BASE + 129;
854 pub const B_MEDIA_REALTIME_UNAVAILABLE: status_t = B_MEDIA_ERROR_BASE + 130;
855
856 // Mail kit errors
857 pub const B_MAIL_NO_DAEMON: status_t = B_MAIL_ERROR_BASE + 0;
858 pub const B_MAIL_UNKNOWN_USER: status_t = B_MAIL_ERROR_BASE + 1;
859 pub const B_MAIL_WRONG_PASSWORD: status_t = B_MAIL_ERROR_BASE + 2;
860 pub const B_MAIL_UNKNOWN_HOST: status_t = B_MAIL_ERROR_BASE + 3;
861 pub const B_MAIL_ACCESS_ERROR: status_t = B_MAIL_ERROR_BASE + 4;
862 pub const B_MAIL_UNKNOWN_FIELD: status_t = B_MAIL_ERROR_BASE + 5;
863 pub const B_MAIL_NO_RECIPIENT: status_t = B_MAIL_ERROR_BASE + 6;
864 pub const B_MAIL_INVALID_MAIL: status_t = B_MAIL_ERROR_BASE + 7;
865
866 // Print kit errors
867 pub const B_NO_PRINT_SERVER: status_t = B_PRINT_ERROR_BASE + 0;
868
869 // Device kit errors
870 pub const B_DEV_INVALID_IOCTL: status_t = B_DEVICE_ERROR_BASE + 0;
871 pub const B_DEV_NO_MEMORY: status_t = B_DEVICE_ERROR_BASE + 1;
872 pub const B_DEV_BAD_DRIVE_NUM: status_t = B_DEVICE_ERROR_BASE + 2;
873 pub const B_DEV_NO_MEDIA: status_t = B_DEVICE_ERROR_BASE + 3;
874 pub const B_DEV_UNREADABLE: status_t = B_DEVICE_ERROR_BASE + 4;
875 pub const B_DEV_FORMAT_ERROR: status_t = B_DEVICE_ERROR_BASE + 5;
876 pub const B_DEV_TIMEOUT: status_t = B_DEVICE_ERROR_BASE + 6;
877 pub const B_DEV_RECALIBRATE_ERROR: status_t = B_DEVICE_ERROR_BASE + 7;
878 pub const B_DEV_SEEK_ERROR: status_t = B_DEVICE_ERROR_BASE + 8;
879 pub const B_DEV_ID_ERROR: status_t = B_DEVICE_ERROR_BASE + 9;
880 pub const B_DEV_READ_ERROR: status_t = B_DEVICE_ERROR_BASE + 10;
881 pub const B_DEV_WRITE_ERROR: status_t = B_DEVICE_ERROR_BASE + 11;
882 pub const B_DEV_NOT_READY: status_t = B_DEVICE_ERROR_BASE + 12;
883 pub const B_DEV_MEDIA_CHANGED: status_t = B_DEVICE_ERROR_BASE + 13;
884 pub const B_DEV_MEDIA_CHANGE_REQUESTED: status_t = B_DEVICE_ERROR_BASE + 14;
885 pub const B_DEV_RESOURCE_CONFLICT: status_t = B_DEVICE_ERROR_BASE + 15;
886 pub const B_DEV_CONFIGURATION_ERROR: status_t = B_DEVICE_ERROR_BASE + 16;
887 pub const B_DEV_DISABLED_BY_USER: status_t = B_DEVICE_ERROR_BASE + 17;
888 pub const B_DEV_DOOR_OPEN: status_t = B_DEVICE_ERROR_BASE + 18;
889
890 pub const B_DEV_INVALID_PIPE: status_t = B_DEVICE_ERROR_BASE + 19;
891 pub const B_DEV_CRC_ERROR: status_t = B_DEVICE_ERROR_BASE + 20;
892 pub const B_DEV_STALLED: status_t = B_DEVICE_ERROR_BASE + 21;
893 pub const B_DEV_BAD_PID: status_t = B_DEVICE_ERROR_BASE + 22;
894 pub const B_DEV_UNEXPECTED_PID: status_t = B_DEVICE_ERROR_BASE + 23;
895 pub const B_DEV_DATA_OVERRUN: status_t = B_DEVICE_ERROR_BASE + 24;
896 pub const B_DEV_DATA_UNDERRUN: status_t = B_DEVICE_ERROR_BASE + 25;
897 pub const B_DEV_FIFO_OVERRUN: status_t = B_DEVICE_ERROR_BASE + 26;
898 pub const B_DEV_FIFO_UNDERRUN: status_t = B_DEVICE_ERROR_BASE + 27;
899 pub const B_DEV_PENDING: status_t = B_DEVICE_ERROR_BASE + 28;
900 pub const B_DEV_MULTIPLE_ERRORS: status_t = B_DEVICE_ERROR_BASE + 29;
901 pub const B_DEV_TOO_LATE: status_t = B_DEVICE_ERROR_BASE + 30;
902
903 // translation kit errors
904 pub const B_TRANSLATION_BASE_ERROR: status_t = B_TRANSLATION_ERROR_BASE + 0;
905 pub const B_NO_TRANSLATOR: status_t = B_TRANSLATION_ERROR_BASE + 1;
906 pub const B_ILLEGAL_DATA: status_t = B_TRANSLATION_ERROR_BASE + 2;
907
908 // support/TypeConstants.h
909 pub const B_AFFINE_TRANSFORM_TYPE: u32 = haiku_constant!('A', 'M', 'T', 'X');
910 pub const B_ALIGNMENT_TYPE: u32 = haiku_constant!('A', 'L', 'G', 'N');
911 pub const B_ANY_TYPE: u32 = haiku_constant!('A', 'N', 'Y', 'T');
912 pub const B_ATOM_TYPE: u32 = haiku_constant!('A', 'T', 'O', 'M');
913 pub const B_ATOMREF_TYPE: u32 = haiku_constant!('A', 'T', 'M', 'R');
914 pub const B_BOOL_TYPE: u32 = haiku_constant!('B', 'O', 'O', 'L');
915 pub const B_CHAR_TYPE: u32 = haiku_constant!('C', 'H', 'A', 'R');
916 pub const B_COLOR_8_BIT_TYPE: u32 = haiku_constant!('C', 'L', 'R', 'B');
917 pub const B_DOUBLE_TYPE: u32 = haiku_constant!('D', 'B', 'L', 'E');
918 pub const B_FLOAT_TYPE: u32 = haiku_constant!('F', 'L', 'O', 'T');
919 pub const B_GRAYSCALE_8_BIT_TYPE: u32 = haiku_constant!('G', 'R', 'Y', 'B');
920 pub const B_INT16_TYPE: u32 = haiku_constant!('S', 'H', 'R', 'T');
921 pub const B_INT32_TYPE: u32 = haiku_constant!('L', 'O', 'N', 'G');
922 pub const B_INT64_TYPE: u32 = haiku_constant!('L', 'L', 'N', 'G');
923 pub const B_INT8_TYPE: u32 = haiku_constant!('B', 'Y', 'T', 'E');
924 pub const B_LARGE_ICON_TYPE: u32 = haiku_constant!('I', 'C', 'O', 'N');
925 pub const B_MEDIA_PARAMETER_GROUP_TYPE: u32 = haiku_constant!('B', 'M', 'C', 'G');
926 pub const B_MEDIA_PARAMETER_TYPE: u32 = haiku_constant!('B', 'M', 'C', 'T');
927 pub const B_MEDIA_PARAMETER_WEB_TYPE: u32 = haiku_constant!('B', 'M', 'C', 'W');
928 pub const B_MESSAGE_TYPE: u32 = haiku_constant!('M', 'S', 'G', 'G');
929 pub const B_MESSENGER_TYPE: u32 = haiku_constant!('M', 'S', 'N', 'G');
930 pub const B_MIME_TYPE: u32 = haiku_constant!('M', 'I', 'M', 'E');
931 pub const B_MINI_ICON_TYPE: u32 = haiku_constant!('M', 'I', 'C', 'N');
932 pub const B_MONOCHROME_1_BIT_TYPE: u32 = haiku_constant!('M', 'N', 'O', 'B');
933 pub const B_OBJECT_TYPE: u32 = haiku_constant!('O', 'P', 'T', 'R');
934 pub const B_OFF_T_TYPE: u32 = haiku_constant!('O', 'F', 'F', 'T');
935 pub const B_PATTERN_TYPE: u32 = haiku_constant!('P', 'A', 'T', 'N');
936 pub const B_POINTER_TYPE: u32 = haiku_constant!('P', 'N', 'T', 'R');
937 pub const B_POINT_TYPE: u32 = haiku_constant!('B', 'P', 'N', 'T');
938 pub const B_PROPERTY_INFO_TYPE: u32 = haiku_constant!('S', 'C', 'T', 'D');
939 pub const B_RAW_TYPE: u32 = haiku_constant!('R', 'A', 'W', 'T');
940 pub const B_RECT_TYPE: u32 = haiku_constant!('R', 'E', 'C', 'T');
941 pub const B_REF_TYPE: u32 = haiku_constant!('R', 'R', 'E', 'F');
942 pub const B_RGB_32_BIT_TYPE: u32 = haiku_constant!('R', 'G', 'B', 'B');
943 pub const B_RGB_COLOR_TYPE: u32 = haiku_constant!('R', 'G', 'B', 'C');
944 pub const B_SIZE_TYPE: u32 = haiku_constant!('S', 'I', 'Z', 'E');
945 pub const B_SIZE_T_TYPE: u32 = haiku_constant!('S', 'I', 'Z', 'T');
946 pub const B_SSIZE_T_TYPE: u32 = haiku_constant!('S', 'S', 'Z', 'T');
947 pub const B_STRING_TYPE: u32 = haiku_constant!('C', 'S', 'T', 'R');
948 pub const B_STRING_LIST_TYPE: u32 = haiku_constant!('S', 'T', 'R', 'L');
949 pub const B_TIME_TYPE: u32 = haiku_constant!('T', 'I', 'M', 'E');
950 pub const B_UINT16_TYPE: u32 = haiku_constant!('U', 'S', 'H', 'T');
951 pub const B_UINT32_TYPE: u32 = haiku_constant!('U', 'L', 'N', 'G');
952 pub const B_UINT64_TYPE: u32 = haiku_constant!('U', 'L', 'L', 'G');
953 pub const B_UINT8_TYPE: u32 = haiku_constant!('U', 'B', 'Y', 'T');
954 pub const B_VECTOR_ICON_TYPE: u32 = haiku_constant!('V', 'I', 'C', 'N');
955 pub const B_XATTR_TYPE: u32 = haiku_constant!('X', 'A', 'T', 'R');
956 pub const B_NETWORK_ADDRESS_TYPE: u32 = haiku_constant!('N', 'W', 'A', 'D');
957 pub const B_MIME_STRING_TYPE: u32 = haiku_constant!('M', 'I', 'M', 'S');
958 pub const B_ASCII_TYPE: u32 = haiku_constant!('T', 'E', 'X', 'T');
959 pub const B_APP_IMAGE_SYMBOL: *const ::c_void = core::ptr::null();
960
961 extern "C" {
962 // kernel/OS.h
create_area( name: *const ::c_char, startAddress: *mut *mut ::c_void, addressSpec: u32, size: usize, lock: u32, protection: u32, ) -> area_id963 pub fn create_area(
964 name: *const ::c_char,
965 startAddress: *mut *mut ::c_void,
966 addressSpec: u32,
967 size: usize,
968 lock: u32,
969 protection: u32,
970 ) -> area_id;
clone_area( name: *const ::c_char, destAddress: *mut *mut ::c_void, addressSpec: u32, protection: u32, source: area_id, ) -> area_id971 pub fn clone_area(
972 name: *const ::c_char,
973 destAddress: *mut *mut ::c_void,
974 addressSpec: u32,
975 protection: u32,
976 source: area_id,
977 ) -> area_id;
find_area(name: *const ::c_char) -> area_id978 pub fn find_area(name: *const ::c_char) -> area_id;
area_for(address: *mut ::c_void) -> area_id979 pub fn area_for(address: *mut ::c_void) -> area_id;
delete_area(id: area_id) -> status_t980 pub fn delete_area(id: area_id) -> status_t;
resize_area(id: area_id, newSize: usize) -> status_t981 pub fn resize_area(id: area_id, newSize: usize) -> status_t;
set_area_protection(id: area_id, newProtection: u32) -> status_t982 pub fn set_area_protection(id: area_id, newProtection: u32) -> status_t;
_get_area_info(id: area_id, areaInfo: *mut area_info, size: usize) -> status_t983 pub fn _get_area_info(id: area_id, areaInfo: *mut area_info, size: usize) -> status_t;
_get_next_area_info( team: team_id, cookie: *mut isize, areaInfo: *mut area_info, size: usize, ) -> status_t984 pub fn _get_next_area_info(
985 team: team_id,
986 cookie: *mut isize,
987 areaInfo: *mut area_info,
988 size: usize,
989 ) -> status_t;
990
create_port(capacity: i32, name: *const ::c_char) -> port_id991 pub fn create_port(capacity: i32, name: *const ::c_char) -> port_id;
find_port(name: *const ::c_char) -> port_id992 pub fn find_port(name: *const ::c_char) -> port_id;
read_port( port: port_id, code: *mut i32, buffer: *mut ::c_void, bufferSize: ::size_t, ) -> ::ssize_t993 pub fn read_port(
994 port: port_id,
995 code: *mut i32,
996 buffer: *mut ::c_void,
997 bufferSize: ::size_t,
998 ) -> ::ssize_t;
read_port_etc( port: port_id, code: *mut i32, buffer: *mut ::c_void, bufferSize: ::size_t, flags: u32, timeout: bigtime_t, ) -> ::ssize_t999 pub fn read_port_etc(
1000 port: port_id,
1001 code: *mut i32,
1002 buffer: *mut ::c_void,
1003 bufferSize: ::size_t,
1004 flags: u32,
1005 timeout: bigtime_t,
1006 ) -> ::ssize_t;
write_port( port: port_id, code: i32, buffer: *const ::c_void, bufferSize: ::size_t, ) -> status_t1007 pub fn write_port(
1008 port: port_id,
1009 code: i32,
1010 buffer: *const ::c_void,
1011 bufferSize: ::size_t,
1012 ) -> status_t;
write_port_etc( port: port_id, code: i32, buffer: *const ::c_void, bufferSize: ::size_t, flags: u32, timeout: bigtime_t, ) -> status_t1013 pub fn write_port_etc(
1014 port: port_id,
1015 code: i32,
1016 buffer: *const ::c_void,
1017 bufferSize: ::size_t,
1018 flags: u32,
1019 timeout: bigtime_t,
1020 ) -> status_t;
close_port(port: port_id) -> status_t1021 pub fn close_port(port: port_id) -> status_t;
delete_port(port: port_id) -> status_t1022 pub fn delete_port(port: port_id) -> status_t;
port_buffer_size(port: port_id) -> ::ssize_t1023 pub fn port_buffer_size(port: port_id) -> ::ssize_t;
port_buffer_size_etc(port: port_id, flags: u32, timeout: bigtime_t) -> ::ssize_t1024 pub fn port_buffer_size_etc(port: port_id, flags: u32, timeout: bigtime_t) -> ::ssize_t;
port_count(port: port_id) -> ::ssize_t1025 pub fn port_count(port: port_id) -> ::ssize_t;
set_port_owner(port: port_id, team: team_id) -> status_t1026 pub fn set_port_owner(port: port_id, team: team_id) -> status_t;
1027
_get_port_info(port: port_id, buf: *mut port_info, portInfoSize: ::size_t) -> status_t1028 pub fn _get_port_info(port: port_id, buf: *mut port_info, portInfoSize: ::size_t) -> status_t;
_get_next_port_info( port: port_id, cookie: *mut i32, portInfo: *mut port_info, portInfoSize: ::size_t, ) -> status_t1029 pub fn _get_next_port_info(
1030 port: port_id,
1031 cookie: *mut i32,
1032 portInfo: *mut port_info,
1033 portInfoSize: ::size_t,
1034 ) -> status_t;
_get_port_message_info_etc( port: port_id, info: *mut port_message_info, infoSize: ::size_t, flags: u32, timeout: bigtime_t, ) -> status_t1035 pub fn _get_port_message_info_etc(
1036 port: port_id,
1037 info: *mut port_message_info,
1038 infoSize: ::size_t,
1039 flags: u32,
1040 timeout: bigtime_t,
1041 ) -> status_t;
1042
create_sem(count: i32, name: *const ::c_char) -> sem_id1043 pub fn create_sem(count: i32, name: *const ::c_char) -> sem_id;
delete_sem(id: sem_id) -> status_t1044 pub fn delete_sem(id: sem_id) -> status_t;
acquire_sem(id: sem_id) -> status_t1045 pub fn acquire_sem(id: sem_id) -> status_t;
acquire_sem_etc(id: sem_id, count: i32, flags: u32, timeout: bigtime_t) -> status_t1046 pub fn acquire_sem_etc(id: sem_id, count: i32, flags: u32, timeout: bigtime_t) -> status_t;
release_sem(id: sem_id) -> status_t1047 pub fn release_sem(id: sem_id) -> status_t;
release_sem_etc(id: sem_id, count: i32, flags: u32) -> status_t1048 pub fn release_sem_etc(id: sem_id, count: i32, flags: u32) -> status_t;
switch_sem(semToBeReleased: sem_id, id: sem_id) -> status_t1049 pub fn switch_sem(semToBeReleased: sem_id, id: sem_id) -> status_t;
switch_sem_etc( semToBeReleased: sem_id, id: sem_id, count: i32, flags: u32, timeout: bigtime_t, ) -> status_t1050 pub fn switch_sem_etc(
1051 semToBeReleased: sem_id,
1052 id: sem_id,
1053 count: i32,
1054 flags: u32,
1055 timeout: bigtime_t,
1056 ) -> status_t;
get_sem_count(id: sem_id, threadCount: *mut i32) -> status_t1057 pub fn get_sem_count(id: sem_id, threadCount: *mut i32) -> status_t;
set_sem_owner(id: sem_id, team: team_id) -> status_t1058 pub fn set_sem_owner(id: sem_id, team: team_id) -> status_t;
_get_sem_info(id: sem_id, info: *mut sem_info, infoSize: ::size_t) -> status_t1059 pub fn _get_sem_info(id: sem_id, info: *mut sem_info, infoSize: ::size_t) -> status_t;
_get_next_sem_info( team: team_id, cookie: *mut i32, info: *mut sem_info, infoSize: ::size_t, ) -> status_t1060 pub fn _get_next_sem_info(
1061 team: team_id,
1062 cookie: *mut i32,
1063 info: *mut sem_info,
1064 infoSize: ::size_t,
1065 ) -> status_t;
1066
kill_team(team: team_id) -> status_t1067 pub fn kill_team(team: team_id) -> status_t;
_get_team_info(team: team_id, info: *mut team_info, size: ::size_t) -> status_t1068 pub fn _get_team_info(team: team_id, info: *mut team_info, size: ::size_t) -> status_t;
_get_next_team_info(cookie: *mut i32, info: *mut team_info, size: ::size_t) -> status_t1069 pub fn _get_next_team_info(cookie: *mut i32, info: *mut team_info, size: ::size_t) -> status_t;
1070
spawn_thread( func: thread_func, name: *const ::c_char, priority: i32, data: *mut ::c_void, ) -> thread_id1071 pub fn spawn_thread(
1072 func: thread_func,
1073 name: *const ::c_char,
1074 priority: i32,
1075 data: *mut ::c_void,
1076 ) -> thread_id;
kill_thread(thread: thread_id) -> status_t1077 pub fn kill_thread(thread: thread_id) -> status_t;
resume_thread(thread: thread_id) -> status_t1078 pub fn resume_thread(thread: thread_id) -> status_t;
suspend_thread(thread: thread_id) -> status_t1079 pub fn suspend_thread(thread: thread_id) -> status_t;
1080
rename_thread(thread: thread_id, newName: *const ::c_char) -> status_t1081 pub fn rename_thread(thread: thread_id, newName: *const ::c_char) -> status_t;
set_thread_priority(thread: thread_id, newPriority: i32) -> status_t1082 pub fn set_thread_priority(thread: thread_id, newPriority: i32) -> status_t;
suggest_thread_priority( what: u32, period: i32, jitter: ::bigtime_t, length: ::bigtime_t, ) -> i321083 pub fn suggest_thread_priority(
1084 what: u32,
1085 period: i32,
1086 jitter: ::bigtime_t,
1087 length: ::bigtime_t,
1088 ) -> i32;
estimate_max_scheduling_latency(th: ::thread_id) -> ::bigtime_t1089 pub fn estimate_max_scheduling_latency(th: ::thread_id) -> ::bigtime_t;
exit_thread(status: status_t)1090 pub fn exit_thread(status: status_t);
wait_for_thread(thread: thread_id, returnValue: *mut status_t) -> status_t1091 pub fn wait_for_thread(thread: thread_id, returnValue: *mut status_t) -> status_t;
on_exit_thread(callback: extern "C" fn(*mut ::c_void), data: *mut ::c_void) -> status_t1092 pub fn on_exit_thread(callback: extern "C" fn(*mut ::c_void), data: *mut ::c_void) -> status_t;
1093
find_thread(name: *const ::c_char) -> thread_id1094 pub fn find_thread(name: *const ::c_char) -> thread_id;
1095
get_scheduler_mode() -> i321096 pub fn get_scheduler_mode() -> i32;
set_scheduler_mode(mode: i32) -> status_t1097 pub fn set_scheduler_mode(mode: i32) -> status_t;
1098
send_data( thread: thread_id, code: i32, buffer: *const ::c_void, bufferSize: ::size_t, ) -> status_t1099 pub fn send_data(
1100 thread: thread_id,
1101 code: i32,
1102 buffer: *const ::c_void,
1103 bufferSize: ::size_t,
1104 ) -> status_t;
receive_data(sender: *mut thread_id, buffer: *mut ::c_void, bufferSize: ::size_t) -> i321105 pub fn receive_data(sender: *mut thread_id, buffer: *mut ::c_void, bufferSize: ::size_t)
1106 -> i32;
has_data(thread: thread_id) -> bool1107 pub fn has_data(thread: thread_id) -> bool;
1108
snooze(amount: bigtime_t) -> status_t1109 pub fn snooze(amount: bigtime_t) -> status_t;
snooze_etc(amount: bigtime_t, timeBase: ::c_int, flags: u32) -> status_t1110 pub fn snooze_etc(amount: bigtime_t, timeBase: ::c_int, flags: u32) -> status_t;
snooze_until(time: bigtime_t, timeBase: ::c_int) -> status_t1111 pub fn snooze_until(time: bigtime_t, timeBase: ::c_int) -> status_t;
1112
_get_thread_info(id: thread_id, info: *mut thread_info, size: ::size_t) -> status_t1113 pub fn _get_thread_info(id: thread_id, info: *mut thread_info, size: ::size_t) -> status_t;
_get_next_thread_info( team: team_id, cookie: *mut i32, info: *mut thread_info, size: ::size_t, ) -> status_t1114 pub fn _get_next_thread_info(
1115 team: team_id,
1116 cookie: *mut i32,
1117 info: *mut thread_info,
1118 size: ::size_t,
1119 ) -> status_t;
1120
get_pthread_thread_id(thread: ::pthread_t) -> thread_id1121 pub fn get_pthread_thread_id(thread: ::pthread_t) -> thread_id;
1122
_get_team_usage_info( team: team_id, who: i32, info: *mut team_usage_info, size: ::size_t, ) -> status_t1123 pub fn _get_team_usage_info(
1124 team: team_id,
1125 who: i32,
1126 info: *mut team_usage_info,
1127 size: ::size_t,
1128 ) -> status_t;
1129
real_time_clock() -> ::c_ulong1130 pub fn real_time_clock() -> ::c_ulong;
set_real_time_clock(secsSinceJan1st1970: ::c_ulong)1131 pub fn set_real_time_clock(secsSinceJan1st1970: ::c_ulong);
real_time_clock_usecs() -> bigtime_t1132 pub fn real_time_clock_usecs() -> bigtime_t;
system_time() -> bigtime_t1133 pub fn system_time() -> bigtime_t;
system_time_nsecs() -> nanotime_t1134 pub fn system_time_nsecs() -> nanotime_t;
1135 // set_timezone() is deprecated and a no-op
1136
set_alarm(when: bigtime_t, flags: u32) -> bigtime_t1137 pub fn set_alarm(when: bigtime_t, flags: u32) -> bigtime_t;
debugger(message: *const ::c_char)1138 pub fn debugger(message: *const ::c_char);
disable_debugger(state: ::c_int) -> ::c_int1139 pub fn disable_debugger(state: ::c_int) -> ::c_int;
1140
get_system_info(info: *mut system_info) -> status_t1141 pub fn get_system_info(info: *mut system_info) -> status_t;
_get_cpu_info_etc( firstCPU: u32, cpuCount: u32, info: *mut cpu_info, size: ::size_t, ) -> status_t1142 pub fn _get_cpu_info_etc(
1143 firstCPU: u32,
1144 cpuCount: u32,
1145 info: *mut cpu_info,
1146 size: ::size_t,
1147 ) -> status_t;
get_cpu_topology_info( topologyInfos: *mut cpu_topology_node_info, topologyInfoCount: *mut u32, ) -> status_t1148 pub fn get_cpu_topology_info(
1149 topologyInfos: *mut cpu_topology_node_info,
1150 topologyInfoCount: *mut u32,
1151 ) -> status_t;
is_computer_on() -> i321152 pub fn is_computer_on() -> i32;
is_computer_on_fire() -> ::c_double1153 pub fn is_computer_on_fire() -> ::c_double;
send_signal(threadID: thread_id, signal: ::c_uint) -> ::c_int1154 pub fn send_signal(threadID: thread_id, signal: ::c_uint) -> ::c_int;
set_signal_stack(base: *mut ::c_void, size: ::size_t)1155 pub fn set_signal_stack(base: *mut ::c_void, size: ::size_t);
1156
wait_for_objects(infos: *mut object_wait_info, numInfos: ::c_int) -> ::ssize_t1157 pub fn wait_for_objects(infos: *mut object_wait_info, numInfos: ::c_int) -> ::ssize_t;
wait_for_objects_etc( infos: *mut object_wait_info, numInfos: ::c_int, flags: u32, timeout: bigtime_t, ) -> ::ssize_t1158 pub fn wait_for_objects_etc(
1159 infos: *mut object_wait_info,
1160 numInfos: ::c_int,
1161 flags: u32,
1162 timeout: bigtime_t,
1163 ) -> ::ssize_t;
1164
1165 // kernel/fs_attr.h
fs_read_attr( fd: ::c_int, attribute: *const ::c_char, type_: u32, pos: ::off_t, buffer: *mut ::c_void, readBytes: ::size_t, ) -> ::ssize_t1166 pub fn fs_read_attr(
1167 fd: ::c_int,
1168 attribute: *const ::c_char,
1169 type_: u32,
1170 pos: ::off_t,
1171 buffer: *mut ::c_void,
1172 readBytes: ::size_t,
1173 ) -> ::ssize_t;
fs_write_attr( fd: ::c_int, attribute: *const ::c_char, type_: u32, pos: ::off_t, buffer: *const ::c_void, writeBytes: ::size_t, ) -> ::ssize_t1174 pub fn fs_write_attr(
1175 fd: ::c_int,
1176 attribute: *const ::c_char,
1177 type_: u32,
1178 pos: ::off_t,
1179 buffer: *const ::c_void,
1180 writeBytes: ::size_t,
1181 ) -> ::ssize_t;
fs_remove_attr(fd: ::c_int, attribute: *const ::c_char) -> ::c_int1182 pub fn fs_remove_attr(fd: ::c_int, attribute: *const ::c_char) -> ::c_int;
fs_stat_attr( fd: ::c_int, attribute: *const ::c_char, attrInfo: *mut attr_info, ) -> ::c_int1183 pub fn fs_stat_attr(
1184 fd: ::c_int,
1185 attribute: *const ::c_char,
1186 attrInfo: *mut attr_info,
1187 ) -> ::c_int;
1188
fs_open_attr( path: *const ::c_char, attribute: *const ::c_char, type_: u32, openMode: ::c_int, ) -> ::c_int1189 pub fn fs_open_attr(
1190 path: *const ::c_char,
1191 attribute: *const ::c_char,
1192 type_: u32,
1193 openMode: ::c_int,
1194 ) -> ::c_int;
fs_fopen_attr( fd: ::c_int, attribute: *const ::c_char, type_: u32, openMode: ::c_int, ) -> ::c_int1195 pub fn fs_fopen_attr(
1196 fd: ::c_int,
1197 attribute: *const ::c_char,
1198 type_: u32,
1199 openMode: ::c_int,
1200 ) -> ::c_int;
fs_close_attr(fd: ::c_int) -> ::c_int1201 pub fn fs_close_attr(fd: ::c_int) -> ::c_int;
1202
fs_open_attr_dir(path: *const ::c_char) -> *mut ::DIR1203 pub fn fs_open_attr_dir(path: *const ::c_char) -> *mut ::DIR;
fs_lopen_attr_dir(path: *const ::c_char) -> *mut ::DIR1204 pub fn fs_lopen_attr_dir(path: *const ::c_char) -> *mut ::DIR;
fs_fopen_attr_dir(fd: ::c_int) -> *mut ::DIR1205 pub fn fs_fopen_attr_dir(fd: ::c_int) -> *mut ::DIR;
fs_close_attr_dir(dir: *mut ::DIR) -> ::c_int1206 pub fn fs_close_attr_dir(dir: *mut ::DIR) -> ::c_int;
fs_read_attr_dir(dir: *mut ::DIR) -> *mut ::dirent1207 pub fn fs_read_attr_dir(dir: *mut ::DIR) -> *mut ::dirent;
fs_rewind_attr_dir(dir: *mut ::DIR)1208 pub fn fs_rewind_attr_dir(dir: *mut ::DIR);
1209
1210 // kernel/fs_image.h
fs_create_index( device: ::dev_t, name: *const ::c_char, type_: u32, flags: u32, ) -> ::c_int1211 pub fn fs_create_index(
1212 device: ::dev_t,
1213 name: *const ::c_char,
1214 type_: u32,
1215 flags: u32,
1216 ) -> ::c_int;
fs_remove_index(device: ::dev_t, name: *const ::c_char) -> ::c_int1217 pub fn fs_remove_index(device: ::dev_t, name: *const ::c_char) -> ::c_int;
fs_stat_index( device: ::dev_t, name: *const ::c_char, indexInfo: *mut index_info, ) -> ::c_int1218 pub fn fs_stat_index(
1219 device: ::dev_t,
1220 name: *const ::c_char,
1221 indexInfo: *mut index_info,
1222 ) -> ::c_int;
1223
fs_open_index_dir(device: ::dev_t) -> *mut ::DIR1224 pub fn fs_open_index_dir(device: ::dev_t) -> *mut ::DIR;
fs_close_index_dir(indexDirectory: *mut ::DIR) -> ::c_int1225 pub fn fs_close_index_dir(indexDirectory: *mut ::DIR) -> ::c_int;
fs_read_index_dir(indexDirectory: *mut ::DIR) -> *mut ::dirent1226 pub fn fs_read_index_dir(indexDirectory: *mut ::DIR) -> *mut ::dirent;
fs_rewind_index_dir(indexDirectory: *mut ::DIR)1227 pub fn fs_rewind_index_dir(indexDirectory: *mut ::DIR);
1228
1229 // kernel/fs_info.h
dev_for_path(path: *const ::c_char) -> ::dev_t1230 pub fn dev_for_path(path: *const ::c_char) -> ::dev_t;
next_dev(pos: *mut i32) -> ::dev_t1231 pub fn next_dev(pos: *mut i32) -> ::dev_t;
fs_stat_dev(dev: ::dev_t, info: *mut fs_info) -> ::c_int1232 pub fn fs_stat_dev(dev: ::dev_t, info: *mut fs_info) -> ::c_int;
1233
1234 // kernel/fs_query.h
fs_open_query(device: ::dev_t, query: *const ::c_char, flags: u32) -> *mut ::DIR1235 pub fn fs_open_query(device: ::dev_t, query: *const ::c_char, flags: u32) -> *mut ::DIR;
fs_open_live_query( device: ::dev_t, query: *const ::c_char, flags: u32, port: port_id, token: i32, ) -> *mut ::DIR1236 pub fn fs_open_live_query(
1237 device: ::dev_t,
1238 query: *const ::c_char,
1239 flags: u32,
1240 port: port_id,
1241 token: i32,
1242 ) -> *mut ::DIR;
fs_close_query(d: *mut ::DIR) -> ::c_int1243 pub fn fs_close_query(d: *mut ::DIR) -> ::c_int;
fs_read_query(d: *mut ::DIR) -> *mut ::dirent1244 pub fn fs_read_query(d: *mut ::DIR) -> *mut ::dirent;
get_path_for_dirent(dent: *mut ::dirent, buf: *mut ::c_char, len: ::size_t) -> status_t1245 pub fn get_path_for_dirent(dent: *mut ::dirent, buf: *mut ::c_char, len: ::size_t) -> status_t;
1246
1247 // kernel/fs_volume.h
fs_mount_volume( where_: *const ::c_char, device: *const ::c_char, filesystem: *const ::c_char, flags: u32, parameters: *const ::c_char, ) -> ::dev_t1248 pub fn fs_mount_volume(
1249 where_: *const ::c_char,
1250 device: *const ::c_char,
1251 filesystem: *const ::c_char,
1252 flags: u32,
1253 parameters: *const ::c_char,
1254 ) -> ::dev_t;
fs_unmount_volume(path: *const ::c_char, flags: u32) -> status_t1255 pub fn fs_unmount_volume(path: *const ::c_char, flags: u32) -> status_t;
1256
1257 // kernel/image.h
load_image( argc: i32, argv: *mut *const ::c_char, environ: *mut *const ::c_char, ) -> thread_id1258 pub fn load_image(
1259 argc: i32,
1260 argv: *mut *const ::c_char,
1261 environ: *mut *const ::c_char,
1262 ) -> thread_id;
load_add_on(path: *const ::c_char) -> image_id1263 pub fn load_add_on(path: *const ::c_char) -> image_id;
unload_add_on(image: image_id) -> status_t1264 pub fn unload_add_on(image: image_id) -> status_t;
get_image_symbol( image: image_id, name: *const ::c_char, symbolType: i32, symbolLocation: *mut *mut ::c_void, ) -> status_t1265 pub fn get_image_symbol(
1266 image: image_id,
1267 name: *const ::c_char,
1268 symbolType: i32,
1269 symbolLocation: *mut *mut ::c_void,
1270 ) -> status_t;
get_nth_image_symbol( image: image_id, n: i32, nameBuffer: *mut ::c_char, nameLength: *mut i32, symbolType: *mut i32, symbolLocation: *mut *mut ::c_void, ) -> status_t1271 pub fn get_nth_image_symbol(
1272 image: image_id,
1273 n: i32,
1274 nameBuffer: *mut ::c_char,
1275 nameLength: *mut i32,
1276 symbolType: *mut i32,
1277 symbolLocation: *mut *mut ::c_void,
1278 ) -> status_t;
clear_caches(address: *mut ::c_void, length: ::size_t, flags: u32)1279 pub fn clear_caches(address: *mut ::c_void, length: ::size_t, flags: u32);
_get_image_info(image: image_id, info: *mut image_info, size: ::size_t) -> status_t1280 pub fn _get_image_info(image: image_id, info: *mut image_info, size: ::size_t) -> status_t;
_get_next_image_info( team: team_id, cookie: *mut i32, info: *mut image_info, size: ::size_t, ) -> status_t1281 pub fn _get_next_image_info(
1282 team: team_id,
1283 cookie: *mut i32,
1284 info: *mut image_info,
1285 size: ::size_t,
1286 ) -> status_t;
find_path( codePointer: *const ::c_void, baseDirectory: path_base_directory, subPath: *const ::c_char, pathBuffer: *mut ::c_char, bufferSize: usize, ) -> status_t1287 pub fn find_path(
1288 codePointer: *const ::c_void,
1289 baseDirectory: path_base_directory,
1290 subPath: *const ::c_char,
1291 pathBuffer: *mut ::c_char,
1292 bufferSize: usize,
1293 ) -> status_t;
find_path_etc( codePointer: *const ::c_void, dependency: *const ::c_char, architecture: *const ::c_char, baseDirectory: path_base_directory, subPath: *const ::c_char, flags: u32, pathBuffer: *mut ::c_char, bufferSize: ::size_t, ) -> status_t1294 pub fn find_path_etc(
1295 codePointer: *const ::c_void,
1296 dependency: *const ::c_char,
1297 architecture: *const ::c_char,
1298 baseDirectory: path_base_directory,
1299 subPath: *const ::c_char,
1300 flags: u32,
1301 pathBuffer: *mut ::c_char,
1302 bufferSize: ::size_t,
1303 ) -> status_t;
find_path_for_path( path: *const ::c_char, baseDirectory: path_base_directory, subPath: *const ::c_char, pathBuffer: *mut ::c_char, bufferSize: ::size_t, ) -> status_t1304 pub fn find_path_for_path(
1305 path: *const ::c_char,
1306 baseDirectory: path_base_directory,
1307 subPath: *const ::c_char,
1308 pathBuffer: *mut ::c_char,
1309 bufferSize: ::size_t,
1310 ) -> status_t;
find_path_for_path_etc( path: *const ::c_char, dependency: *const ::c_char, architectur: *const ::c_char, baseDirectory: path_base_directory, subPath: *const ::c_char, flags: u32, pathBuffer: *mut ::c_char, bufferSize: ::size_t, ) -> status_t1311 pub fn find_path_for_path_etc(
1312 path: *const ::c_char,
1313 dependency: *const ::c_char,
1314 architectur: *const ::c_char,
1315 baseDirectory: path_base_directory,
1316 subPath: *const ::c_char,
1317 flags: u32,
1318 pathBuffer: *mut ::c_char,
1319 bufferSize: ::size_t,
1320 ) -> status_t;
find_paths( baseDirectory: path_base_directory, subPath: *const ::c_char, _paths: *mut *mut *mut ::c_char, pathCount: *mut ::size_t, ) -> status_t1321 pub fn find_paths(
1322 baseDirectory: path_base_directory,
1323 subPath: *const ::c_char,
1324 _paths: *mut *mut *mut ::c_char,
1325 pathCount: *mut ::size_t,
1326 ) -> status_t;
find_paths_etc( architecture: *const ::c_char, baseDirectory: path_base_directory, subPath: *const ::c_char, flags: u32, _paths: *mut *mut *mut ::c_char, pathCount: *mut ::size_t, ) -> status_t1327 pub fn find_paths_etc(
1328 architecture: *const ::c_char,
1329 baseDirectory: path_base_directory,
1330 subPath: *const ::c_char,
1331 flags: u32,
1332 _paths: *mut *mut *mut ::c_char,
1333 pathCount: *mut ::size_t,
1334 ) -> status_t;
find_directory( which: directory_which, volume: ::dev_t, createIt: bool, pathString: *mut ::c_char, length: i32, ) -> status_t1335 pub fn find_directory(
1336 which: directory_which,
1337 volume: ::dev_t,
1338 createIt: bool,
1339 pathString: *mut ::c_char,
1340 length: i32,
1341 ) -> status_t;
1342 }
1343
1344 cfg_if! {
1345 if #[cfg(libc_union)] {
1346 extern "C" {
1347 pub fn get_cpuid(info: *mut cpuid_info, eaxRegister: u32, cpuNum: u32) -> status_t;
1348 }
1349 }
1350 }
1351
1352 // The following functions are defined as macros in C/C++
1353 #[inline]
get_cpu_info(firstCPU: u32, cpuCount: u32, info: *mut cpu_info) -> status_t1354 pub unsafe fn get_cpu_info(firstCPU: u32, cpuCount: u32, info: *mut cpu_info) -> status_t {
1355 _get_cpu_info_etc(
1356 firstCPU,
1357 cpuCount,
1358 info,
1359 core::mem::size_of::<cpu_info>() as ::size_t,
1360 )
1361 }
1362
1363 #[inline]
get_area_info(id: area_id, info: *mut area_info) -> status_t1364 pub unsafe fn get_area_info(id: area_id, info: *mut area_info) -> status_t {
1365 _get_area_info(id, info, core::mem::size_of::<area_info>() as usize)
1366 }
1367
1368 #[inline]
get_next_area_info( team: team_id, cookie: *mut isize, info: *mut area_info, ) -> status_t1369 pub unsafe fn get_next_area_info(
1370 team: team_id,
1371 cookie: *mut isize,
1372 info: *mut area_info,
1373 ) -> status_t {
1374 _get_next_area_info(
1375 team,
1376 cookie,
1377 info,
1378 core::mem::size_of::<area_info>() as usize,
1379 )
1380 }
1381
1382 #[inline]
get_port_info(port: port_id, buf: *mut port_info) -> status_t1383 pub unsafe fn get_port_info(port: port_id, buf: *mut port_info) -> status_t {
1384 _get_port_info(port, buf, core::mem::size_of::<port_info>() as ::size_t)
1385 }
1386
1387 #[inline]
get_next_port_info( port: port_id, cookie: *mut i32, portInfo: *mut port_info, ) -> status_t1388 pub unsafe fn get_next_port_info(
1389 port: port_id,
1390 cookie: *mut i32,
1391 portInfo: *mut port_info,
1392 ) -> status_t {
1393 _get_next_port_info(
1394 port,
1395 cookie,
1396 portInfo,
1397 core::mem::size_of::<port_info>() as ::size_t,
1398 )
1399 }
1400
1401 #[inline]
get_port_message_info_etc( port: port_id, info: *mut port_message_info, flags: u32, timeout: bigtime_t, ) -> status_t1402 pub unsafe fn get_port_message_info_etc(
1403 port: port_id,
1404 info: *mut port_message_info,
1405 flags: u32,
1406 timeout: bigtime_t,
1407 ) -> status_t {
1408 _get_port_message_info_etc(
1409 port,
1410 info,
1411 core::mem::size_of::<port_message_info>() as ::size_t,
1412 flags,
1413 timeout,
1414 )
1415 }
1416
1417 #[inline]
get_sem_info(id: sem_id, info: *mut sem_info) -> status_t1418 pub unsafe fn get_sem_info(id: sem_id, info: *mut sem_info) -> status_t {
1419 _get_sem_info(id, info, core::mem::size_of::<sem_info>() as ::size_t)
1420 }
1421
1422 #[inline]
get_next_sem_info(team: team_id, cookie: *mut i32, info: *mut sem_info) -> status_t1423 pub unsafe fn get_next_sem_info(team: team_id, cookie: *mut i32, info: *mut sem_info) -> status_t {
1424 _get_next_sem_info(
1425 team,
1426 cookie,
1427 info,
1428 core::mem::size_of::<sem_info>() as ::size_t,
1429 )
1430 }
1431
1432 #[inline]
get_team_info(team: team_id, info: *mut team_info) -> status_t1433 pub unsafe fn get_team_info(team: team_id, info: *mut team_info) -> status_t {
1434 _get_team_info(team, info, core::mem::size_of::<team_info>() as ::size_t)
1435 }
1436
1437 #[inline]
get_next_team_info(cookie: *mut i32, info: *mut team_info) -> status_t1438 pub unsafe fn get_next_team_info(cookie: *mut i32, info: *mut team_info) -> status_t {
1439 _get_next_team_info(cookie, info, core::mem::size_of::<team_info>() as ::size_t)
1440 }
1441
1442 #[inline]
get_team_usage_info(team: team_id, who: i32, info: *mut team_usage_info) -> status_t1443 pub unsafe fn get_team_usage_info(team: team_id, who: i32, info: *mut team_usage_info) -> status_t {
1444 _get_team_usage_info(
1445 team,
1446 who,
1447 info,
1448 core::mem::size_of::<team_usage_info>() as ::size_t,
1449 )
1450 }
1451
1452 #[inline]
get_thread_info(id: thread_id, info: *mut thread_info) -> status_t1453 pub unsafe fn get_thread_info(id: thread_id, info: *mut thread_info) -> status_t {
1454 _get_thread_info(id, info, core::mem::size_of::<thread_info>() as ::size_t)
1455 }
1456
1457 #[inline]
get_next_thread_info( team: team_id, cookie: *mut i32, info: *mut thread_info, ) -> status_t1458 pub unsafe fn get_next_thread_info(
1459 team: team_id,
1460 cookie: *mut i32,
1461 info: *mut thread_info,
1462 ) -> status_t {
1463 _get_next_thread_info(
1464 team,
1465 cookie,
1466 info,
1467 core::mem::size_of::<thread_info>() as ::size_t,
1468 )
1469 }
1470
1471 // kernel/image.h
1472 #[inline]
get_image_info(image: image_id, info: *mut image_info) -> status_t1473 pub unsafe fn get_image_info(image: image_id, info: *mut image_info) -> status_t {
1474 _get_image_info(image, info, core::mem::size_of::<image_info>() as ::size_t)
1475 }
1476
1477 #[inline]
get_next_image_info( team: team_id, cookie: *mut i32, info: *mut image_info, ) -> status_t1478 pub unsafe fn get_next_image_info(
1479 team: team_id,
1480 cookie: *mut i32,
1481 info: *mut image_info,
1482 ) -> status_t {
1483 _get_next_image_info(
1484 team,
1485 cookie,
1486 info,
1487 core::mem::size_of::<image_info>() as ::size_t,
1488 )
1489 }
1490