Skip to content
This repository was archived by the owner on Oct 12, 2022. It is now read-only.

Commit ba350f4

Browse files
committed
core.sys.posix.aio: Update CRuntime_Glibc bindings to be LARGEFILE64 aware
1 parent db5a818 commit ba350f4

File tree

1 file changed

+77
-13
lines changed

1 file changed

+77
-13
lines changed

src/core/sys/posix/aio.d

Lines changed: 77 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
module core.sys.posix.aio;
1010

1111
private import core.sys.posix.signal;
12+
private import core.sys.posix.sys.types;
1213

1314
version (Posix):
1415

@@ -19,9 +20,30 @@ nothrow:
1920

2021
version (CRuntime_Glibc)
2122
{
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)
2345
{
24-
struct aiocb
46+
struct aiocb64
2547
{
2648
int aio_fildes;
2749
int aio_lio_opcode;
@@ -30,12 +52,16 @@ version (CRuntime_Glibc)
3052
size_t aio_nbytes;
3153
sigevent aio_sigevent;
3254

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+
3461
off_t aio_offset;
3562
ubyte[32] __glibc_reserved;
3663
}
37-
} else
38-
static assert(false, "Unsupported CPU Type");
64+
}
3965
}
4066
else version (FreeBSD)
4167
{
@@ -146,14 +172,52 @@ else version (BSD_Posix)
146172
}
147173
}
148174

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+
}
157221

158222
/* functions outside/extending posix requirement */
159223
version (FreeBSD)

0 commit comments

Comments
 (0)