/* * Copyright 2010, Alin Rus * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at * http://www.rtems.org/license/LICENSE. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #define CONFIGURE_INIT #include "system.h" #include #include "tmacros.h" #include #include #include #include #include #include #include #include const char rtems_test_name[] = "PSXAIO 2"; /* forward declarations to avoid warnings */ struct aiocb *create_aiocb(int fd); void free_aiocb(struct aiocb *aiocbp); #define BUFSIZE 32 #define FD_COUNT 10 #define WRONG_FD 666 struct aiocb * create_aiocb (int fd) { struct aiocb *aiocbp; aiocbp = malloc (sizeof (struct aiocb)); memset (aiocbp, 0, sizeof (struct aiocb)); aiocbp->aio_buf = malloc (BUFSIZE * sizeof (char)); aiocbp->aio_nbytes = BUFSIZE; aiocbp->aio_offset = 0; aiocbp->aio_reqprio = 0; aiocbp->aio_fildes = fd; return aiocbp; } void free_aiocb (struct aiocb *aiocbp) { free ((char*) aiocbp->aio_buf); free (aiocbp); } void * POSIX_Init (void *argument) { int fd[FD_COUNT]; struct aiocb *aiocbp[FD_COUNT+1]; int status, i, policy = SCHED_FIFO; char filename[BUFSIZE]; struct sched_param param; status = rtems_aio_init (); rtems_test_assert (status == 0); param.sched_priority = 30; status = pthread_setschedparam (pthread_self(), policy, ¶m); rtems_test_assert (status == 0); status = mkdir ("/tmp", S_IRWXU); rtems_test_assert (!status); TEST_BEGIN(); puts ("Init: Open files"); for (i=0; iaio_fildes != fildes"); status = aio_cancel (fd[4],aiocbp[4]); rtems_test_assert (status == -1 ); puts ("Init: [NONE] aio_cancel FD on [IQ], aiocb not on chain"); aiocbp[10] = create_aiocb (fd[9]); status = aio_cancel (fd[9], aiocbp[10]); rtems_test_assert (status == -1); puts ("Init: [IQ] aio_cancel 6th file only one request"); status = aio_cancel (fd[5], aiocbp[6]); rtems_test_assert (status == AIO_CANCELED); puts ("Init: [WQ] aio_cancel 1st file only one request"); status = aio_cancel (fd[0], aiocbp[9]); rtems_test_assert (status == AIO_CANCELED); puts ("Init: [NONE] aio_cancel empty [IQ]"); status = aio_cancel (fd[5], aiocbp[6]); rtems_test_assert (status == AIO_ALLDONE); TEST_END(); for (i = 0; i < FD_COUNT; i++) { close (fd[i]); free_aiocb (aiocbp[i]); } free_aiocb (aiocbp[i]); rtems_test_exit (0); return NULL; }