summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGregory Nutt <gnutt@nuttx.org>2014-09-29 16:46:01 -0600
committerGregory Nutt <gnutt@nuttx.org>2014-09-29 16:46:01 -0600
commitc231f3b08e9e945e20f2601b0cba4831c47d59e5 (patch)
treef3a0c92170ab385f8371a1de85bf14ce8c59f0c0
parentc4a856f4a7a9f94068c88fbbc51157171726427e (diff)
downloadpx4-nuttx-c231f3b08e9e945e20f2601b0cba4831c47d59e5.tar.gz
px4-nuttx-c231f3b08e9e945e20f2601b0cba4831c47d59e5.tar.bz2
px4-nuttx-c231f3b08e9e945e20f2601b0cba4831c47d59e5.zip
Eliminate a warning about an uninitilized variable
-rw-r--r--nuttx/fs/mqueue/mq_open.c176
1 files changed, 90 insertions, 86 deletions
diff --git a/nuttx/fs/mqueue/mq_open.c b/nuttx/fs/mqueue/mq_open.c
index 8588ebb73..076971287 100644
--- a/nuttx/fs/mqueue/mq_open.c
+++ b/nuttx/fs/mqueue/mq_open.c
@@ -108,13 +108,13 @@
* messages that may be placed in the message queue.
*
* Return Value:
- * A message queue descriptor or -1 (ERROR)
+ * A message queue descriptor or (mqd_t)-1 (ERROR)
*
* Assumptions:
*
****************************************************************************/
-mqd_t mq_open(const char *mq_name, int oflags, ...)
+mqd_t mq_open(FAR const char *mq_name, int oflags, ...)
{
FAR struct inode *inode;
FAR const char *relpath = NULL;
@@ -129,116 +129,119 @@ mqd_t mq_open(const char *mq_name, int oflags, ...)
/* Make sure that a non-NULL name is supplied */
- if (mq_name)
+ if (!mq_name)
{
- /* Make sure that the check for the existence of the message queue
- * and the creation of the message queue are atomic with respect to
- * other processes executing mq_open(). A simple sched_lock() should
- * be sufficientt.
- */
+ errcode = EINVAL;
+ goto errout;
+ }
+
+ /* Get the full path to the message queue */
- sched_lock();
+ snprintf(fullpath, MAX_MQUEUE_PATH, CONFIG_FS_MQUEUE_MPATH "/%s", mq_name);
- /* Get the full path to the message queue */
+ /* Make sure that the check for the existence of the message queue
+ * and the creation of the message queue are atomic with respect to
+ * other processes executing mq_open(). A simple sched_lock() should
+ * be sufficient.
+ */
- snprintf(fullpath, MAX_MQUEUE_PATH, CONFIG_FS_MQUEUE_MPATH "/%s", mq_name);
+ sched_lock();
+
+ /* Get the inode for this mqueue. This should succeed if the message
+ * queue has already been created.
+ */
+
+ inode = inode_find(fullpath, &relpath);
+ if (inode)
+ {
+ /* It exists. Verify that the inode is a message queue */
- /* Get the inode for this mqueue. This should succeed if the message
- * queue has already been created.
+ if (!INODE_IS_MQUEUE(inode))
+ {
+ errcode = ENXIO;
+ goto errout_with_inode;
+ }
+
+ /* It exists and is a message queue. Check if the caller wanted to
+ * create a new mqueue with this name.
*/
- inode = inode_find(fullpath, &relpath);
- if (inode)
+ if ((oflags & (O_CREAT|O_EXCL)) == (O_CREAT|O_EXCL))
{
- /* It exists. Verify that the inode is a message queue */
-
- if (!INODE_IS_MQUEUE(inode))
- {
- errcode = ENXIO;
- goto errout_with_inode;
- }
-
- /* It exists and is a message queue. Check if the caller wanted to
- * create a new mqueue with this name.
- */
-
- if ((oflags & (O_CREAT|O_EXCL)) == (O_CREAT|O_EXCL))
- {
- errcode = EEXIST;
- goto errout_with_inode;
- }
-
- /* Create a message queue descriptor for the current thread */
-
- msgq = inode->u.i_mqueue;
- mqdes = mq_descreate(NULL, msgq, oflags);
- if (!mqdes)
- {
- errcode = ENOMEM;
- goto errout_with_inode;
- }
+ errcode = EEXIST;
+ goto errout_with_inode;
}
- else
+
+ /* Create a message queue descriptor for the current thread */
+
+ msgq = inode->u.i_mqueue;
+ mqdes = mq_descreate(NULL, msgq, oflags);
+ if (!mqdes)
{
- /* The mqueue does not exists. Were we asked to create it? */
+ errcode = ENOMEM;
+ goto errout_with_inode;
+ }
+ }
+ else
+ {
+ /* The mqueue does not exists. Were we asked to create it? */
- if ((oflags & O_CREAT) == 0)
- {
- /* The mqueue does not exist and O_CREAT is not set */
+ if ((oflags & O_CREAT) == 0)
+ {
+ /* The mqueue does not exist and O_CREAT is not set */
- errcode = ENOENT;
- goto errout_with_lock;
- }
+ errcode = ENOENT;
+ goto errout_with_lock;
+ }
- /* Create the mqueue. First we have to extract the additional
- * parameters from the variable argument list.
- */
+ /* Create the mqueue. First we have to extract the additional
+ * parameters from the variable argument list.
+ */
- va_start(ap, oflags);
- mode = va_arg(ap, mode_t);
- attr = va_arg(ap, FAR struct mq_attr*);
- va_end(ap);
+ va_start(ap, oflags);
+ mode = va_arg(ap, mode_t);
+ attr = va_arg(ap, FAR struct mq_attr*);
+ va_end(ap);
- /* Create an inode in the pseudo-filesystem at this path */
+ /* Create an inode in the pseudo-filesystem at this path */
- inode_semtake();
- ret = inode_reserve(fullpath, &inode);
- inode_semgive();
+ inode_semtake();
+ ret = inode_reserve(fullpath, &inode);
+ inode_semgive();
- if (ret < 0)
- {
- errcode = -ret;
- goto errout_with_lock;
- }
+ if (ret < 0)
+ {
+ errcode = -ret;
+ goto errout_with_lock;
+ }
- /* Allocate memory for the new message queue. */
+ /* Allocate memory for the new message queue. */
- msgq = (FAR struct mqueue_inode_s*)mq_msgqalloc(mode, attr);
- if (!msgq)
- {
- errcode = ENOMEM;
- goto errout_with_inode;
- }
+ msgq = (FAR struct mqueue_inode_s*)mq_msgqalloc(mode, attr);
+ if (!msgq)
+ {
+ errcode = ENOMEM;
+ goto errout_with_inode;
+ }
- /* Create a message queue descriptor for the TCB */
+ /* Create a message queue descriptor for the TCB */
- mqdes = mq_descreate(NULL, msgq, oflags);
- if (!mqdes)
- {
- errcode = ENOMEM;
- goto errout_with_msgq;
- }
+ mqdes = mq_descreate(NULL, msgq, oflags);
+ if (!mqdes)
+ {
+ errcode = ENOMEM;
+ goto errout_with_msgq;
+ }
- /* Bind the message queue and the inode structure */
+ /* Bind the message queue and the inode structure */
- INODE_SET_MQUEUE(inode);
- inode->u.i_mqueue = msgq;
- msgq->inode = inode;
- }
+ INODE_SET_MQUEUE(inode);
+ inode->u.i_mqueue = msgq;
+ msgq->inode = inode;
- sched_unlock();
}
+ sched_unlock();
return mqdes;
errout_with_msgq:
@@ -248,6 +251,7 @@ errout_with_inode:
inode_release(inode);
errout_with_lock:
sched_unlock();
+errout:
set_errno(errcode);
return (mqd_t)ERROR;
}