Skip to content

Commit a541bf4

Browse files
committed
libc: remove uses of enum as per #4419
1 parent 5d2c5d4 commit a541bf4

File tree

9 files changed

+215
-279
lines changed

9 files changed

+215
-279
lines changed

src/macros.rs

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -223,10 +223,24 @@ macro_rules! e {
223223
///
224224
/// See <https://github.com/rust-lang/libc/issues/4419> for more.
225225
macro_rules! c_enum {
226-
(
226+
($(
227+
$(#[repr($repr:ty)])?
228+
pub enum $ty_name:ident {
229+
$($variant:ident $(= $value:expr)?,)+
230+
}
231+
)+) => {
232+
$(c_enum!(@expand;
233+
$(#[repr($repr)])?
234+
pub enum $ty_name {
235+
$($variant $(= $value)?,)+
236+
}
237+
);)+
238+
};
239+
240+
(@expand;
227241
$(#[repr($repr:ty)])?
228-
enum $ty_name:ident {
229-
$($variant:ident $(= $value:literal)?,)+
242+
pub enum $ty_name:ident {
243+
$($variant:ident $(= $value:expr)?,)+
230244
}
231245
) => {
232246
pub type $ty_name = c_enum!(@ty $($repr)?);
@@ -237,7 +251,7 @@ macro_rules! c_enum {
237251
(@one; $_ty_name:ident; $_idx:expr;) => {};
238252
(
239253
@one; $ty_name:ident; $default_val:expr;
240-
$variant:ident $(= $value:literal)?,
254+
$variant:ident $(= $value:expr)?,
241255
$($tail:tt)*
242256
) => {
243257
pub const $variant: $ty_name = {
@@ -379,7 +393,7 @@ mod tests {
379393
fn c_enumbasic() {
380394
// By default, variants get sequential values.
381395
c_enum! {
382-
enum e {
396+
pub enum e {
383397
VAR0,
384398
VAR1,
385399
VAR2,
@@ -396,7 +410,7 @@ mod tests {
396410
// By default, variants get sequential values.
397411
c_enum! {
398412
#[repr(u16)]
399-
enum e {
413+
pub enum e {
400414
VAR0,
401415
}
402416
}
@@ -408,7 +422,7 @@ mod tests {
408422
fn c_enumset_value() {
409423
// Setting an explicit value resets the count.
410424
c_enum! {
411-
enum e {
425+
pub enum e {
412426
VAR2 = 2,
413427
VAR3,
414428
VAR4,
@@ -425,7 +439,7 @@ mod tests {
425439
// C enums always take one more than the previous value, unless set to a specific
426440
// value. Duplicates are allowed.
427441
c_enum! {
428-
enum e {
442+
pub enum e {
429443
VAR0,
430444
VAR2_0 = 2,
431445
VAR3_0,

src/unix/aix/mod.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ pub type pthread_barrierattr_t = *mut c_void;
5858
pub type posix_spawn_file_actions_t = *mut c_char;
5959
pub type iconv_t = *mut c_void;
6060

61-
e! {
61+
c_enum! {
6262
#[repr(u32)]
6363
pub enum uio_rw {
6464
UIO_READ = 0,
@@ -67,6 +67,7 @@ e! {
6767
UIO_WRITE_NO_MOVE,
6868
UIO_PWRITE,
6969
}
70+
7071
#[repr(u32)]
7172
pub enum ACTION {
7273
FIND = 0,

src/unix/bsd/apple/mod.rs

Lines changed: 46 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -184,71 +184,52 @@ impl Clone for timezone {
184184
}
185185
}
186186

187-
#[cfg_attr(feature = "extra_traits", derive(Debug))]
188-
#[repr(u32)]
189-
pub enum qos_class_t {
190-
QOS_CLASS_USER_INTERACTIVE = 0x21,
191-
QOS_CLASS_USER_INITIATED = 0x19,
192-
QOS_CLASS_DEFAULT = 0x15,
193-
QOS_CLASS_UTILITY = 0x11,
194-
QOS_CLASS_BACKGROUND = 0x09,
195-
QOS_CLASS_UNSPECIFIED = 0x00,
196-
}
197-
impl Copy for qos_class_t {}
198-
impl Clone for qos_class_t {
199-
fn clone(&self) -> qos_class_t {
200-
*self
201-
}
202-
}
203-
204-
#[cfg_attr(feature = "extra_traits", derive(Debug))]
205-
#[repr(u32)]
206-
pub enum sysdir_search_path_directory_t {
207-
SYSDIR_DIRECTORY_APPLICATION = 1,
208-
SYSDIR_DIRECTORY_DEMO_APPLICATION = 2,
209-
SYSDIR_DIRECTORY_DEVELOPER_APPLICATION = 3,
210-
SYSDIR_DIRECTORY_ADMIN_APPLICATION = 4,
211-
SYSDIR_DIRECTORY_LIBRARY = 5,
212-
SYSDIR_DIRECTORY_DEVELOPER = 6,
213-
SYSDIR_DIRECTORY_USER = 7,
214-
SYSDIR_DIRECTORY_DOCUMENTATION = 8,
215-
SYSDIR_DIRECTORY_DOCUMENT = 9,
216-
SYSDIR_DIRECTORY_CORESERVICE = 10,
217-
SYSDIR_DIRECTORY_AUTOSAVED_INFORMATION = 11,
218-
SYSDIR_DIRECTORY_DESKTOP = 12,
219-
SYSDIR_DIRECTORY_CACHES = 13,
220-
SYSDIR_DIRECTORY_APPLICATION_SUPPORT = 14,
221-
SYSDIR_DIRECTORY_DOWNLOADS = 15,
222-
SYSDIR_DIRECTORY_INPUT_METHODS = 16,
223-
SYSDIR_DIRECTORY_MOVIES = 17,
224-
SYSDIR_DIRECTORY_MUSIC = 18,
225-
SYSDIR_DIRECTORY_PICTURES = 19,
226-
SYSDIR_DIRECTORY_PRINTER_DESCRIPTION = 20,
227-
SYSDIR_DIRECTORY_SHARED_PUBLIC = 21,
228-
SYSDIR_DIRECTORY_PREFERENCE_PANES = 22,
229-
SYSDIR_DIRECTORY_ALL_APPLICATIONS = 100,
230-
SYSDIR_DIRECTORY_ALL_LIBRARIES = 101,
231-
}
232-
impl Copy for sysdir_search_path_directory_t {}
233-
impl Clone for sysdir_search_path_directory_t {
234-
fn clone(&self) -> sysdir_search_path_directory_t {
235-
*self
236-
}
237-
}
238-
239-
#[cfg_attr(feature = "extra_traits", derive(Debug))]
240-
#[repr(u32)]
241-
pub enum sysdir_search_path_domain_mask_t {
242-
SYSDIR_DOMAIN_MASK_USER = (1 << 0),
243-
SYSDIR_DOMAIN_MASK_LOCAL = (1 << 1),
244-
SYSDIR_DOMAIN_MASK_NETWORK = (1 << 2),
245-
SYSDIR_DOMAIN_MASK_SYSTEM = (1 << 3),
246-
SYSDIR_DOMAIN_MASK_ALL = 0x0ffff,
247-
}
248-
impl Copy for sysdir_search_path_domain_mask_t {}
249-
impl Clone for sysdir_search_path_domain_mask_t {
250-
fn clone(&self) -> sysdir_search_path_domain_mask_t {
251-
*self
187+
c_enum! {
188+
#[repr(u32)]
189+
pub enum qos_class_t {
190+
QOS_CLASS_USER_INTERACTIVE = 0x21,
191+
QOS_CLASS_USER_INITIATED = 0x19,
192+
QOS_CLASS_DEFAULT = 0x15,
193+
QOS_CLASS_UTILITY = 0x11,
194+
QOS_CLASS_BACKGROUND = 0x09,
195+
QOS_CLASS_UNSPECIFIED = 0x00,
196+
}
197+
198+
#[repr(u32)]
199+
pub enum sysdir_search_path_directory_t {
200+
SYSDIR_DIRECTORY_APPLICATION = 1,
201+
SYSDIR_DIRECTORY_DEMO_APPLICATION = 2,
202+
SYSDIR_DIRECTORY_DEVELOPER_APPLICATION = 3,
203+
SYSDIR_DIRECTORY_ADMIN_APPLICATION = 4,
204+
SYSDIR_DIRECTORY_LIBRARY = 5,
205+
SYSDIR_DIRECTORY_DEVELOPER = 6,
206+
SYSDIR_DIRECTORY_USER = 7,
207+
SYSDIR_DIRECTORY_DOCUMENTATION = 8,
208+
SYSDIR_DIRECTORY_DOCUMENT = 9,
209+
SYSDIR_DIRECTORY_CORESERVICE = 10,
210+
SYSDIR_DIRECTORY_AUTOSAVED_INFORMATION = 11,
211+
SYSDIR_DIRECTORY_DESKTOP = 12,
212+
SYSDIR_DIRECTORY_CACHES = 13,
213+
SYSDIR_DIRECTORY_APPLICATION_SUPPORT = 14,
214+
SYSDIR_DIRECTORY_DOWNLOADS = 15,
215+
SYSDIR_DIRECTORY_INPUT_METHODS = 16,
216+
SYSDIR_DIRECTORY_MOVIES = 17,
217+
SYSDIR_DIRECTORY_MUSIC = 18,
218+
SYSDIR_DIRECTORY_PICTURES = 19,
219+
SYSDIR_DIRECTORY_PRINTER_DESCRIPTION = 20,
220+
SYSDIR_DIRECTORY_SHARED_PUBLIC = 21,
221+
SYSDIR_DIRECTORY_PREFERENCE_PANES = 22,
222+
SYSDIR_DIRECTORY_ALL_APPLICATIONS = 100,
223+
SYSDIR_DIRECTORY_ALL_LIBRARIES = 101,
224+
}
225+
226+
#[repr(u32)]
227+
pub enum sysdir_search_path_domain_mask_t {
228+
SYSDIR_DOMAIN_MASK_USER = 1 << 0,
229+
SYSDIR_DOMAIN_MASK_LOCAL = 1 << 1,
230+
SYSDIR_DOMAIN_MASK_NETWORK = 1 << 2,
231+
SYSDIR_DOMAIN_MASK_SYSTEM = 1 << 3,
232+
SYSDIR_DOMAIN_MASK_ALL = 0x0ffff,
252233
}
253234
}
254235

src/unix/bsd/freebsdlike/dragonfly/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ impl Clone for sem {
5454
}
5555
}
5656

57-
e! {
57+
c_enum! {
5858
#[repr(u32)]
5959
pub enum lwpstat {
6060
LSRUN = 1,

0 commit comments

Comments
 (0)