libs/libc/aio: fix aio_cancel compatible issue

1. make the aio_cancel implementation can pass the
ltp/open_posix_testsuite/aio_cancel testcases
2. the modification are referred to https://pubs.opengroup.org/onlinepubs/9699919799/functions/aio_cancel.html

Signed-off-by: guoshichao <guoshichao@xiaomi.com>
This commit is contained in:
guoshichao 2023-06-09 21:04:16 +08:00 committed by Xiang Xiao
parent cf6a134684
commit d5f45dc33b
3 changed files with 19 additions and 4 deletions

View File

@ -81,6 +81,12 @@
int aio_cancel(int fildes, FAR struct aiocb *aiocbp) int aio_cancel(int fildes, FAR struct aiocb *aiocbp)
{ {
if (fildes < 0)
{
set_errno(EBADF);
return ERROR;
}
FAR struct aio_container_s *aioc; FAR struct aio_container_s *aioc;
FAR struct aio_container_s *next; FAR struct aio_container_s *next;
pid_t pid; pid_t pid;
@ -95,7 +101,7 @@ int aio_cancel(int fildes, FAR struct aiocb *aiocbp)
ret = AIO_ALLDONE; ret = AIO_ALLDONE;
sched_lock(); sched_lock();
ret = aio_lock(); aio_lock();
if (aiocbp) if (aiocbp)
{ {

View File

@ -61,14 +61,15 @@
#undef _POSIX_FSYNC #undef _POSIX_FSYNC
#define _POSIX_SYNCHRONIZED_IO 1 #define _POSIX_SYNCHRONIZED_IO 1
#define _POSIX_VERSION 201712L
#define _POSIX_PRIORITIZED_IO _POSIX_VERSION
#ifdef CONFIG_FS_AIO #ifdef CONFIG_FS_AIO
# define _POSIX_ASYNCHRONOUS_IO 1 # define _POSIX_ASYNCHRONOUS_IO _POSIX_VERSION
#else #else
# undef _POSIX_ASYNCHRONOUS_IO # undef _POSIX_ASYNCHRONOUS_IO
#endif #endif
#undef _POSIX_PRIORITIZED_IO
#ifdef CONFIG_SCHED_SPORADIC #ifdef CONFIG_SCHED_SPORADIC
# define _POSIX_SPORADIC_SERVER 1 # define _POSIX_SPORADIC_SERVER 1
# define _POSIX_THREAD_SPORADIC_SERVER 1 # define _POSIX_THREAD_SPORADIC_SERVER 1

View File

@ -215,6 +215,14 @@ long sysconf(int name)
switch (name) switch (name)
{ {
#ifdef CONFIG_FS_AIO
case _SC_ASYNCHRONOUS_IO:
return _POSIX_ASYNCHRONOUS_IO;
#endif
case _SC_PRIORITIZED_IO:
return _POSIX_PRIORITIZED_IO;
case _SC_AIO_MAX:
return _POSIX_AIO_MAX;
case _SC_CLK_TCK: case _SC_CLK_TCK:
return CLOCKS_PER_SEC; return CLOCKS_PER_SEC;