summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGregory Nutt <gnutt@nuttx.org>2014-10-04 18:17:54 -0600
committerGregory Nutt <gnutt@nuttx.org>2014-10-04 18:17:54 -0600
commite6036f59e58942fb103e73b77d8cacb93b6dd0ed (patch)
tree0dd966001facedc4365f5c5c9017a5d0ed86a3d6
parent6d574ed8ce319ffcaf7fc5a861e39f3810f94488 (diff)
downloadnuttx-e6036f59e58942fb103e73b77d8cacb93b6dd0ed.tar.gz
nuttx-e6036f59e58942fb103e73b77d8cacb93b6dd0ed.tar.bz2
nuttx-e6036f59e58942fb103e73b77d8cacb93b6dd0ed.zip
Add initial implementatin of aio_return() and aio_error()
-rw-r--r--nuttx/libc/aio/Make.defs2
-rw-r--r--nuttx/libc/aio/aio_error.c114
-rw-r--r--nuttx/libc/aio/aio_read.c4
-rw-r--r--nuttx/libc/aio/aio_return.c118
-rw-r--r--nuttx/libc/aio/aio_write.c4
5 files changed, 237 insertions, 5 deletions
diff --git a/nuttx/libc/aio/Make.defs b/nuttx/libc/aio/Make.defs
index ee7e35916..667490d1f 100644
--- a/nuttx/libc/aio/Make.defs
+++ b/nuttx/libc/aio/Make.defs
@@ -37,7 +37,7 @@ ifeq ($(CONFIG_LIBC_AIO),y)
# Add the asynchronous I/O C files to the build
-CSRCS += aio_read.c aio_write.c
+CSRCS += aio_read.c aio_write.c aio_return.c aio_error.c
ifneq ($(CONFIG_PTHREAD_DISABLE),y)
CSRCS += lio_listio.c
diff --git a/nuttx/libc/aio/aio_error.c b/nuttx/libc/aio/aio_error.c
new file mode 100644
index 000000000..8b8f70f6a
--- /dev/null
+++ b/nuttx/libc/aio/aio_error.c
@@ -0,0 +1,114 @@
+/****************************************************************************
+ * libc/aio/aio_error.c
+ *
+ * Copyright (C) 2014 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <aio.h>
+#include <assert.h>
+#include <errno.h>
+
+#ifndef CONFIG_LIBC_AIO
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+/* Configuration ************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Variables
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Variables
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: aio_read
+ *
+ * Description:
+ * The aio_error() function returns the error status associated with the
+ * aiocb structure referenced by the aiocbp argument. The error status fo
+ * an asynchronous I/O operation is the errno value that would be set by
+ * the corresponding read(), write(), fdatasync(), or fsync() operation. If
+ * the operation has not yet completed, then the error status will be equal
+ * to EINPROGRESS.
+ *
+ * Input Parameters:
+ * aiocbp - A pointer to an instance of struct aiocb
+ *
+ * Returned Value:
+ * If the asynchronous I/O operation has completed successfully, then 0
+ * will be returned. If the asynchronous operation has completed
+ * unsuccessfully, then the error status, as described for read(),
+ * write(), fdatasync(), and fsync(), will be returned. If the
+ * asynchronous I/O operation has not yet completed, then EINPROGRESS will
+ * be returned.
+ *
+ * The aio_error() function may fail if:
+ *
+ * EINVAL - The aiocbp argument does not refer to an asynchronous
+ * operation whose return status has not yet been retrieved.
+ *
+ ****************************************************************************/
+
+int aio_error(FAR const struct aiocb *aiocbp)
+{
+ DEBUGASSERT(aiocbp);
+
+ if (aiocbp->aio_result < 0)
+ {
+ return -aiocbp->aio_result;
+ }
+
+ return OK;
+}
+
+#endif /* CONFIG_LIBC_AIO */
diff --git a/nuttx/libc/aio/aio_read.c b/nuttx/libc/aio/aio_read.c
index 82f5bb873..b1c4637ff 100644
--- a/nuttx/libc/aio/aio_read.c
+++ b/nuttx/libc/aio/aio_read.c
@@ -259,9 +259,9 @@ int aio_read(FAR struct aiocb *aiocbp);
DEBUGASSERT(aiocbp);
- /* The result -EBUSY means that the transfer has not yet completed */
+ /* The result -EINPROGRESS means that the transfer has not yet completed */
- aiocbp->aio_result = -EBUSY;
+ aiocbp->aio_result = -EINPROGRESS;
/* Save the ID of the calling, client thread */
diff --git a/nuttx/libc/aio/aio_return.c b/nuttx/libc/aio/aio_return.c
new file mode 100644
index 000000000..d26c80f47
--- /dev/null
+++ b/nuttx/libc/aio/aio_return.c
@@ -0,0 +1,118 @@
+/****************************************************************************
+ * libc/aio/aio_return.c
+ *
+ * Copyright (C) 2014 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <aio.h>
+#include <assert.h>
+#include <errno.h>
+
+#ifndef CONFIG_LIBC_AIO
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+/* Configuration ************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Variables
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Variables
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: aio_read
+ *
+ * Description:
+ * The aio_return() function returns the return status associated with
+ * the aiocb structure referenced by the aiocbp argument. The return
+ * status for an asynchronous I/O operation is the value that would be
+ * returned by the corresponding read(), write(), or fsync() function
+ * call. If the error status for the operation is equal to EINPROGRESS,
+ * then the return status for the operation is undefined. The aio_return()
+ * function may be called exactly once to retrieve the return status of
+ * a given asynchronous operation; thereafter, if the same aiocb structure
+ * is used in a call to aio_return() or aio_error(), an error may be
+ * returned. When the aiocb structure referred to by aiocbp is used to
+ * submit another asynchronous operation, then aio_return() may be
+ * successfully used to retrieve the return status of that operation.
+ *
+ * Input Parameters:
+ * aiocbp - A pointer to an instance of struct aiocb
+ *
+ * Returned Value:
+ * If the asynchronous I/O operation has completed, then the return
+ * status, as described for read(), write(), and fsync(), will be
+ * returned. If the asynchronous I/O operation has not yet completed,
+ * the results of aio_return() are undefined.
+ *
+ * The aio_return() function may fail if:
+ *
+ * EINVAL - The aiocbp argument does not refer to an asynchronous
+ * operation whose return status has not yet been retrieved.
+ *
+ ****************************************************************************/
+
+ssize_t aio_return(FAR struct aiocb *aiocbp)
+{
+ DEBUGASSERT(aiocbp);
+ if (aiocbp->aio_result < 0)
+ {
+ set_errno((int)-aiocbp->aio_result);
+ return (ssize_t)ERROR
+ }
+
+ return aiocbp->aio_result;
+}
+
+#endif /* CONFIG_LIBC_AIO */
diff --git a/nuttx/libc/aio/aio_write.c b/nuttx/libc/aio/aio_write.c
index eb8676eea..5576bec74 100644
--- a/nuttx/libc/aio/aio_write.c
+++ b/nuttx/libc/aio/aio_write.c
@@ -292,9 +292,9 @@ int aio_write(FAR struct aiocb *aiocbp);
DEBUGASSERT(aiocbp);
- /* The result -EBUSY means that the transfer has not yet completed */
+ /* The result -EINPROGRESS means that the transfer has not yet completed */
- aiocbp->aio_result = -EBUSY;
+ aiocbp->aio_result = -EINPROGRESS;
/* Save the ID of the calling, client thread */