9
9
module core.sys.posix.aio ;
10
10
11
11
private import core.sys.posix.signal ;
12
+ private import core.sys.posix.sys.types ;
12
13
13
14
version (Posix ):
14
15
@@ -19,9 +20,30 @@ nothrow:
19
20
20
21
version (CRuntime_Glibc )
21
22
{
22
- version (X86_64 )
23
+ import core.sys.posix.config ;
24
+
25
+ struct aiocb
26
+ {
27
+ int aio_fildes;
28
+ int aio_lio_opcode;
29
+ int aio_reqprio;
30
+ void * aio_buf; // volatile
31
+ size_t aio_nbytes;
32
+ sigevent aio_sigevent;
33
+
34
+ aiocb* __next_prio;
35
+ int __abs_prio;
36
+ int __policy;
37
+ int __error_code;
38
+ ssize_t __return_value;
39
+
40
+ off_t aio_offset;
41
+ ubyte [32 ] __glibc_reserved;
42
+ }
43
+
44
+ static if (__USE_LARGEFILE64)
23
45
{
24
- struct aiocb
46
+ struct aiocb64
25
47
{
26
48
int aio_fildes;
27
49
int aio_lio_opcode;
@@ -30,12 +52,16 @@ version (CRuntime_Glibc)
30
52
size_t aio_nbytes;
31
53
sigevent aio_sigevent;
32
54
33
- ubyte [24 ] internal_members_padding;
55
+ aiocb* __next_prio;
56
+ int __abs_prio;
57
+ int __policy;
58
+ int __error_code;
59
+ ssize_t __return_value;
60
+
34
61
off_t aio_offset;
35
62
ubyte [32 ] __glibc_reserved;
36
63
}
37
- } else
38
- static assert (false , " Unsupported CPU Type" );
64
+ }
39
65
}
40
66
else version (FreeBSD )
41
67
{
@@ -60,7 +86,7 @@ else version (FreeBSD)
60
86
sigevent aio_sigevent;
61
87
}
62
88
63
- version = bsd_posix ;
89
+ version = BSD_Posix ;
64
90
}
65
91
else version (NetBSD )
66
92
{
@@ -78,7 +104,7 @@ else version (NetBSD)
78
104
private ssize_t _retval;
79
105
}
80
106
81
- version = bsd_posix ;
107
+ version = BSD_Posix ;
82
108
}
83
109
else version (DragonFlyBSD )
84
110
{
@@ -95,7 +121,7 @@ else version (DragonFlyBSD)
95
121
private int _aio_err;
96
122
}
97
123
98
- version = bsd_posix ;
124
+ version = BSD_Posix ;
99
125
}
100
126
else
101
127
static assert (false , " Unsupported platform" );
@@ -118,7 +144,7 @@ version (CRuntime_Glibc)
118
144
LIO_NOP
119
145
}
120
146
}
121
- else version (bsd_posix )
147
+ else version (BSD_Posix )
122
148
{
123
149
enum
124
150
{
@@ -137,7 +163,7 @@ version (CRuntime_Glibc)
137
163
LIO_NOWAIT
138
164
}
139
165
}
140
- else version (bsd_posix )
166
+ else version (BSD_Posix )
141
167
{
142
168
enum
143
169
{
@@ -146,17 +172,75 @@ else version (bsd_posix)
146
172
}
147
173
}
148
174
149
- int aio_read (aiocb* aiocbp);
150
- int aio_write (aiocb* aiocbp);
151
- int aio_fsync (int op, aiocb* aiocbp);
152
- int aio_error (const (aiocb)* aiocbp);
153
- ssize_t aio_return (aiocb* aiocbp);
154
- int aio_suspend (const (aiocb* )* aiocb_list, int nitems, const (timespec)* timeout);
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 )
175
+ /* Functions implementing POSIX AIO. */
176
+ version (CRuntime_Glibc )
177
+ {
178
+ static if (__USE_LARGEFILE64)
179
+ {
180
+ int aio_read64 (aiocb64* aiocbp);
181
+ int aio_write64 (aiocb64* aiocbp);
182
+ int aio_fsync64 (int op, aiocb64* aiocbp);
183
+ int aio_error64 (const (aiocb64)* aiocbp);
184
+ ssize_t aio_return64 (aiocb64* aiocbp);
185
+ int aio_suspend64 (const (aiocb64* )* aiocb_list, int nitems, const (timespec)* timeout);
186
+ int aio_cancel64 (int fd, aiocb64* aiocbp);
187
+ int lio_listio64 (int mode, const (aiocb64* )* aiocb_list, int nitems, sigevent* sevp);
188
+
189
+ alias aio_read = aio_read64;
190
+ alias aio_write = aio_write64;
191
+ alias aio_fsync = aio_fsync64;
192
+ alias aio_error = aio_error64;
193
+ alias aio_return = aio_return64;
194
+ alias aio_suspend = aio_suspend64;
195
+ alias aio_cancel = aio_cancel64;
196
+ alias lio_listio = lio_listio64;
197
+ }
198
+ else
199
+ {
200
+ int aio_read (aiocb* aiocbp);
201
+ int aio_write (aiocb* aiocbp);
202
+ int aio_fsync (int op, aiocb* aiocbp);
203
+ int aio_error (const (aiocb)* aiocbp);
204
+ ssize_t aio_return (aiocb* aiocbp);
205
+ int aio_suspend (const (aiocb* )* aiocb_list, int nitems, const (timespec)* timeout);
206
+ int aio_cancel (int fd, aiocb* aiocbp);
207
+ int lio_listio (int mode, const (aiocb* )* aiocb_list, int nitems, sigevent* sevp);
208
+ }
209
+ }
210
+ else
211
+ {
212
+ int aio_read (aiocb* aiocbp);
213
+ int aio_write (aiocb* aiocbp);
214
+ int aio_fsync (int op, aiocb* aiocbp);
215
+ int aio_error (const (aiocb)* aiocbp);
216
+ ssize_t aio_return (aiocb* aiocbp);
217
+ int aio_suspend (const (aiocb* )* aiocb_list, int nitems, const (timespec)* timeout);
218
+ int aio_cancel (int fd, aiocb* aiocbp);
219
+ int lio_listio (int mode, const (aiocb* )* aiocb_list, int nitems, sigevent* sevp);
220
+ }
221
+
222
+ /* Functions outside/extending POSIX requirement. */
223
+ version (CRuntime_Glibc )
224
+ {
225
+ static if (__USE_GNU)
226
+ {
227
+ /* To customize the implementation one can use the following struct. */
228
+ struct aioinit
229
+ {
230
+ int aio_threads;
231
+ int aio_num;
232
+ int aio_locks;
233
+ int aio_usedba;
234
+ int aio_debug;
235
+ int aio_numusers;
236
+ int aio_idle_time;
237
+ int aio_reserved;
238
+ }
239
+
240
+ void aio_init (const (aioinit)* init);
241
+ }
242
+ }
243
+ else version (FreeBSD )
160
244
{
161
245
int aio_waitcomplete (aiocb** aiocb_list, const (timespec)* timeout);
162
246
int aio_mlock (aiocb* aiocbp);
0 commit comments