#include <aio.h>
#include <errno.h>
+#include <unistd.h>
+#include <string.h>
#include "pthread_impl.h"
+#include "libc.h"
struct lio_state {
struct sigevent *sev;
static int lio_wait(struct lio_state *st)
{
- int i, err, got_err;
+ int i, err, got_err = 0;
int cnt = st->cnt;
struct aiocb **cbs = st->cbs;
.si_signo = sev->sigev_signo,
.si_value = sev->sigev_value,
.si_code = SI_ASYNCIO,
- .si_pid = __pthread_self()->pid,
+ .si_pid = getpid(),
.si_uid = getuid()
};
__syscall(SYS_rt_sigqueueinfo, si.si_pid, si.si_signo, &si);
return 0;
}
-int lio_listio(int mode, struct aiocb *const cbs[], int cnt, struct sigevent *sev)
+int lio_listio(int mode, struct aiocb *restrict const *restrict cbs, int cnt, struct sigevent *restrict sev)
{
int i, ret;
struct lio_state *st=0;
}
st->cnt = cnt;
st->sev = sev;
- memcpy(st->cbs, cbs, cnt*sizeof *cbs);
+ memcpy(st->cbs, (void*) cbs, cnt*sizeof *cbs);
}
for (i=0; i<cnt; i++) {
if (mode == LIO_WAIT) {
ret = lio_wait(st);
free(st);
- return 0;
+ return ret;
}
if (st) {
return 0;
}
+LFS64(lio_listio);