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
{
@@ -146,14 +172,52 @@ 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);
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
+ }
157
221
158
222
/* functions outside/extending posix requirement */
159
223
version (FreeBSD )
0 commit comments