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