fix lio_listio return value in LIO_WAIT mode
[musl] / src / aio / lio_listio.c
index 8c851ca..64a6ebc 100644 (file)
@@ -1,5 +1,8 @@
 #include <aio.h>
 #include <errno.h>
+#include <limits.h>
+#include <unistd.h>
+#include <string.h>
 #include "pthread_impl.h"
 
 struct lio_state {
@@ -64,7 +67,7 @@ static void *wait_thread(void *p)
        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;
@@ -81,7 +84,7 @@ int lio_listio(int mode, struct aiocb *const cbs[], int cnt, struct sigevent *se
                }
                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++) {
@@ -106,7 +109,7 @@ int lio_listio(int mode, struct aiocb *const cbs[], int cnt, struct sigevent *se
        if (mode == LIO_WAIT) {
                ret = lio_wait(st);
                free(st);
-               return 0;
+               return ret;
        }
 
        if (st) {