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

Commit c06ed31

Browse files
authored
Merge pull request #2133 from dkgroot-dlang/port_aio
Added aio.h implementations for FreeBSD, NetBSD and DragonFly merged-on-behalf-of: Iain Buclaw <ibuclaw@gdcproject.org>
2 parents 8c86106 + 8edf155 commit c06ed31

File tree

1 file changed

+112
-19
lines changed

1 file changed

+112
-19
lines changed

src/core/sys/posix/aio.d

Lines changed: 112 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,76 @@ version (CRuntime_Glibc)
2626
int aio_fildes;
2727
int aio_lio_opcode;
2828
int aio_reqprio;
29-
void *aio_buf; //volatile
29+
void* aio_buf; //volatile
3030
size_t aio_nbytes;
3131
sigevent aio_sigevent;
3232

3333
ubyte[24] internal_members_padding;
3434
off_t aio_offset;
3535
ubyte[32] __glibc_reserved;
3636
}
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;
3761
}
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;
4099
}
41100
else
42101
static assert(false, "Unsupported platform");
@@ -47,28 +106,62 @@ enum
47106
AIO_CANCELED,
48107
AIO_NOTCANCELED,
49108
AIO_ALLDONE
50-
};
109+
}
51110

52111
/* Operation codes for `aio_lio_opcode'. */
53-
enum
112+
version (CRuntime_Glibc)
54113
{
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+
}
59130

60131
/* 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)
62141
{
63-
LIO_WAIT,
64-
LIO_NOWAIT
65-
};
142+
enum
143+
{
144+
LIO_NOWAIT,
145+
LIO_WAIT
146+
}
147+
}
66148

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);
70152
int aio_error(const(aiocb)* aiocbp);
71-
ssize_t aio_return(const(aiocb)* aiocbp);
153+
ssize_t aio_return(aiocb* aiocbp);
72154
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

Comments
 (0)