@@ -26,17 +26,76 @@ version (CRuntime_Glibc)
26
26
int aio_fildes;
27
27
int aio_lio_opcode;
28
28
int aio_reqprio;
29
- void * aio_buf; // volatile
29
+ void * aio_buf; // volatile
30
30
size_t aio_nbytes;
31
31
sigevent aio_sigevent;
32
32
33
33
ubyte [24 ] internal_members_padding;
34
34
off_t aio_offset;
35
35
ubyte [32 ] __glibc_reserved;
36
36
}
37
+ } else
38
+ static assert (false , " Unsupported CPU Type" );
39
+ }
40
+ else version (FreeBSD )
41
+ {
42
+ struct __aiocb_private
43
+ {
44
+ long status;
45
+ long error;
46
+ void * kernelinfo;
47
+ }
48
+
49
+ struct aiocb
50
+ {
51
+ int aio_fildes;
52
+ off_t aio_offset;
53
+ void * aio_buf; // volatile
54
+ size_t aio_nbytes;
55
+ private int [2 ] __spare;
56
+ private void * _spare2__;
57
+ int aio_lio_opcode;
58
+ int aio_reqprio;
59
+ private __aiocb_private _aiocb_private;
60
+ sigevent aio_sigevent;
37
61
}
38
- else
39
- static assert (0 );
62
+
63
+ version = bsd_posix;
64
+ }
65
+ else version (NetBSD )
66
+ {
67
+ struct aiocb
68
+ {
69
+ off_t aio_offset;
70
+ void * aio_buf; // volatile
71
+ size_t aio_nbytes;
72
+ int aio_fildes;
73
+ int aio_lio_opcode;
74
+ int aio_reqprio;
75
+ sigevent aio_sigevent;
76
+ private int _state;
77
+ private int _errno;
78
+ private ssize_t _retval;
79
+ }
80
+
81
+ version = bsd_posix;
82
+ }
83
+ else version (DragonFlyBSD )
84
+ {
85
+ struct aiocb
86
+ {
87
+ int aio_fildes;
88
+ off_t aio_offset;
89
+ void * aio_buf; // volatile
90
+ size_t aio_nbytes;
91
+ sigevent aio_sigevent;
92
+ int aio_lio_opcode;
93
+ int aio_reqprio;
94
+ private int _aio_val;
95
+ private int _aio_err;
96
+ }
97
+
98
+ version = bsd_posix;
40
99
}
41
100
else
42
101
static assert (false , " Unsupported platform" );
@@ -47,28 +106,62 @@ enum
47
106
AIO_CANCELED ,
48
107
AIO_NOTCANCELED ,
49
108
AIO_ALLDONE
50
- };
109
+ }
51
110
52
111
/* Operation codes for `aio_lio_opcode'. */
53
- enum
112
+ version ( CRuntime_Glibc )
54
113
{
55
- LIO_READ ,
56
- LIO_WRITE ,
57
- LIO_NOP
58
- };
114
+ enum
115
+ {
116
+ LIO_READ ,
117
+ LIO_WRITE ,
118
+ LIO_NOP
119
+ }
120
+ }
121
+ else version (bsd_posix)
122
+ {
123
+ enum
124
+ {
125
+ LIO_NOP ,
126
+ LIO_WRITE ,
127
+ LIO_READ
128
+ }
129
+ }
59
130
60
131
/* Synchronization options for `lio_listio' function. */
61
- enum
132
+ version (CRuntime_Glibc )
133
+ {
134
+ enum
135
+ {
136
+ LIO_WAIT ,
137
+ LIO_NOWAIT
138
+ }
139
+ }
140
+ else version (bsd_posix)
62
141
{
63
- LIO_WAIT ,
64
- LIO_NOWAIT
65
- };
142
+ enum
143
+ {
144
+ LIO_NOWAIT ,
145
+ LIO_WAIT
146
+ }
147
+ }
66
148
67
- int aio_read (aiocb * aiocbp);
68
- int aio_write (aiocb * aiocbp);
69
- int aio_fsync (int op, aiocb * aiocbp);
149
+ int aio_read (aiocb* aiocbp);
150
+ int aio_write (aiocb* aiocbp);
151
+ int aio_fsync (int op, aiocb* aiocbp);
70
152
int aio_error (const (aiocb)* aiocbp);
71
- ssize_t aio_return (const ( aiocb) * aiocbp);
153
+ ssize_t aio_return (aiocb* aiocbp);
72
154
int aio_suspend (const (aiocb* )* aiocb_list, int nitems, const (timespec)* timeout);
73
- int aio_cancel (int fd, aiocb * aiocbp);
74
- int lio_listio (int mode, const (aiocb* )* aiocb_list, int nitems, sigevent * sevp);
155
+ int aio_cancel (int fd, aiocb* aiocbp);
156
+ int lio_listio (int mode, const (aiocb* )* aiocb_list, int nitems, sigevent* sevp);
157
+
158
+ /* functions outside/extending posix requirement */
159
+ version (FreeBSD )
160
+ {
161
+ int aio_waitcomplete (aiocb** aiocb_list, const (timespec)* timeout);
162
+ int aio_mlock (aiocb* aiocbp);
163
+ }
164
+ else version (DragonFlyBSD )
165
+ {
166
+ int aio_waitcomplete (aiocb** aiocb_list, const (timespec)* timeout);
167
+ }
0 commit comments