[rtems commit] posix: _POSIX_Message_queue_Create_support()

Sebastian Huber sebh at rtems.org
Mon May 2 10:06:12 UTC 2016


Module:    rtems
Branch:    master
Commit:    3e36a16774290447e98a0261e625c38d00f2e19b
Changeset: http://git.rtems.org/rtems/commit/?id=3e36a16774290447e98a0261e625c38d00f2e19b

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Mon Apr 25 06:33:28 2016 +0200

posix: _POSIX_Message_queue_Create_support()

Make  _POSIX_Message_queue_Create_support() static since it is only used
by mq_open().

---

 cpukit/posix/Makefile.am                      |   2 +-
 cpukit/posix/include/rtems/posix/mqueueimpl.h |  14 ---
 cpukit/posix/src/mqueuecreatesupp.c           | 136 --------------------------
 cpukit/posix/src/mqueueopen.c                 |  89 +++++++++++++++++
 4 files changed, 90 insertions(+), 151 deletions(-)

diff --git a/cpukit/posix/Makefile.am b/cpukit/posix/Makefile.am
index 12427d5..d354f7e 100644
--- a/cpukit/posix/Makefile.am
+++ b/cpukit/posix/Makefile.am
@@ -96,7 +96,7 @@ libposix_a_SOURCES += src/munmap.c
 
 ## MESSAGE_QUEUE_C_FILES
 libposix_a_SOURCES += src/mqueue.c src/mqueueclose.c \
-    src/mqueuecreatesupp.c src/mqueuedeletesupp.c src/mqueuegetattr.c \
+    src/mqueuedeletesupp.c src/mqueuegetattr.c \
     src/mqueuenotify.c src/mqueueopen.c \
     src/mqueuereceive.c src/mqueuerecvsupp.c src/mqueuesend.c \
     src/mqueuesendsupp.c src/mqueuesetattr.c src/mqueuetimedreceive.c \
diff --git a/cpukit/posix/include/rtems/posix/mqueueimpl.h b/cpukit/posix/include/rtems/posix/mqueueimpl.h
index cf0f76a..1cdf619 100644
--- a/cpukit/posix/include/rtems/posix/mqueueimpl.h
+++ b/cpukit/posix/include/rtems/posix/mqueueimpl.h
@@ -40,20 +40,6 @@ extern Objects_Information _POSIX_Message_queue_Information;
 extern Objects_Information _POSIX_Message_queue_Information_fds;
 
 /**
- *  @brief POSIX Message Queue Create Support
- *
- *  This routine performs the creation of a message queue utilizing the
- *  core message queue.
- */
-int _POSIX_Message_queue_Create_support(
-  const char                    *name,
-  size_t                         name_len,
-  int                            pshared,
-  struct mq_attr                *attr,
-  POSIX_Message_queue_Control  **message_queue
-);
-
-/**
  * @brief Delete a POSIX Message Queue
  *
  * This routine supports the mq_unlink and mq_close routines by
diff --git a/cpukit/posix/src/mqueuecreatesupp.c b/cpukit/posix/src/mqueuecreatesupp.c
deleted file mode 100644
index 06192ec..0000000
--- a/cpukit/posix/src/mqueuecreatesupp.c
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- *  NOTE:  The structure of the routines is identical to that of POSIX
- *         Message_queues to leave the option of having unnamed message
- *         queues at a future date.  They are currently not part of the
- *         POSIX standard but unnamed message_queues are.  This is also
- *         the reason for the apparently unnecessary tracking of
- *         the process_shared attribute.  [In addition to the fact that
- *         it would be trivial to add pshared to the mq_attr structure
- *         and have process private message queues.]
- *
- *         This code ignores the O_RDONLY/O_WRONLY/O_RDWR flag at open
- *         time.
- *
- *  COPYRIGHT (c) 1989-2009.
- *  On-Line Applications Research Corporation (OAR).
- *
- *  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.
- */
-
-#if HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-#include <stdarg.h>
-#include <stdlib.h>
-
-#include <pthread.h>
-#include <limits.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <mqueue.h>
-
-#include <rtems/system.h>
-#include <rtems/score/watchdog.h>
-#include <rtems/score/wkspace.h>
-#include <rtems/seterr.h>
-#include <rtems/posix/mqueueimpl.h>
-
-/*
- *  _POSIX_Message_queue_Create_support
- *
- *  This routine does the actual creation and initialization of
- *  a poxix message queue.
- */
-
-int _POSIX_Message_queue_Create_support(
-  const char                    *name_arg,
-  size_t                         name_len,
-  int                            pshared,
-  struct mq_attr                *attr_ptr,
-  POSIX_Message_queue_Control  **message_queue
-)
-{
-  POSIX_Message_queue_Control   *the_mq;
-  struct mq_attr                 attr;
-  char                          *name;
-
-  /* length of name has already been validated */
-
-  /*
-   *  There is no real basis for the default values.  They will work
-   *  but were not compared against any existing implementation for
-   *  compatibility.  See README.mqueue for an example program we
-   *  think will print out the defaults.  Report anything you find with it.
-   */
-  if ( attr_ptr == NULL ) {
-    attr.mq_maxmsg  = 10;
-    attr.mq_msgsize = 16;
-  } else {
-    if ( attr_ptr->mq_maxmsg <= 0 ){
-      rtems_set_errno_and_return_minus_one( EINVAL );
-    }
-
-    if ( attr_ptr->mq_msgsize <= 0 ){
-      rtems_set_errno_and_return_minus_one( EINVAL );
-    }
-
-    attr = *attr_ptr;
-  }
-
-  the_mq = _POSIX_Message_queue_Allocate();
-  if ( !the_mq ) {
-    _Objects_Allocator_unlock();
-    rtems_set_errno_and_return_minus_one( ENFILE );
-  }
-
-  /*
-   * Make a copy of the user's string for name just in case it was
-   * dynamically constructed.
-   */
-  name = _Workspace_String_duplicate( name_arg, name_len );
-  if ( !name ) {
-    _POSIX_Message_queue_Free( the_mq );
-    _Objects_Allocator_unlock();
-    rtems_set_errno_and_return_minus_one( ENOMEM );
-  }
-
-  the_mq->process_shared  = pshared;
-  the_mq->named = true;
-  the_mq->open_count = 1;
-  the_mq->linked = true;
-
-  /*
-   *  NOTE: That thread blocking discipline should be based on the
-   *  current scheduling policy.
-   *
-   *  Joel: Cite POSIX or OpenGroup on above statement so we can determine
-   *        if it is a real requirement.
-   */
-  if ( !_CORE_message_queue_Initialize(
-           &the_mq->Message_queue,
-           CORE_MESSAGE_QUEUE_DISCIPLINES_FIFO,
-           attr.mq_maxmsg,
-           attr.mq_msgsize
-      ) ) {
-
-    _POSIX_Message_queue_Free( the_mq );
-    _Workspace_Free(name);
-    _Objects_Allocator_unlock();
-    rtems_set_errno_and_return_minus_one( ENOSPC );
-  }
-
-  _Objects_Open_string(
-    &_POSIX_Message_queue_Information,
-    &the_mq->Object,
-    name
-  );
-
-  *message_queue = the_mq;
-
-  _Objects_Allocator_unlock();
-  return 0;
-}
diff --git a/cpukit/posix/src/mqueueopen.c b/cpukit/posix/src/mqueueopen.c
index d327e13..bfdff03 100644
--- a/cpukit/posix/src/mqueueopen.c
+++ b/cpukit/posix/src/mqueueopen.c
@@ -45,6 +45,95 @@
 
 #define MQ_OPEN_FAILED ((mqd_t) -1)
 
+static int _POSIX_Message_queue_Create_support(
+  const char                    *name_arg,
+  size_t                         name_len,
+  int                            pshared,
+  struct mq_attr                *attr_ptr,
+  POSIX_Message_queue_Control  **message_queue
+)
+{
+  POSIX_Message_queue_Control   *the_mq;
+  struct mq_attr                 attr;
+  char                          *name;
+
+  /* length of name has already been validated */
+
+  /*
+   *  There is no real basis for the default values.  They will work
+   *  but were not compared against any existing implementation for
+   *  compatibility.  See README.mqueue for an example program we
+   *  think will print out the defaults.  Report anything you find with it.
+   */
+  if ( attr_ptr == NULL ) {
+    attr.mq_maxmsg  = 10;
+    attr.mq_msgsize = 16;
+  } else {
+    if ( attr_ptr->mq_maxmsg <= 0 ){
+      rtems_set_errno_and_return_minus_one( EINVAL );
+    }
+
+    if ( attr_ptr->mq_msgsize <= 0 ){
+      rtems_set_errno_and_return_minus_one( EINVAL );
+    }
+
+    attr = *attr_ptr;
+  }
+
+  the_mq = _POSIX_Message_queue_Allocate();
+  if ( !the_mq ) {
+    _Objects_Allocator_unlock();
+    rtems_set_errno_and_return_minus_one( ENFILE );
+  }
+
+  /*
+   * Make a copy of the user's string for name just in case it was
+   * dynamically constructed.
+   */
+  name = _Workspace_String_duplicate( name_arg, name_len );
+  if ( !name ) {
+    _POSIX_Message_queue_Free( the_mq );
+    _Objects_Allocator_unlock();
+    rtems_set_errno_and_return_minus_one( ENOMEM );
+  }
+
+  the_mq->process_shared  = pshared;
+  the_mq->named = true;
+  the_mq->open_count = 1;
+  the_mq->linked = true;
+
+  /*
+   *  NOTE: That thread blocking discipline should be based on the
+   *  current scheduling policy.
+   *
+   *  Joel: Cite POSIX or OpenGroup on above statement so we can determine
+   *        if it is a real requirement.
+   */
+  if ( !_CORE_message_queue_Initialize(
+           &the_mq->Message_queue,
+           CORE_MESSAGE_QUEUE_DISCIPLINES_FIFO,
+           attr.mq_maxmsg,
+           attr.mq_msgsize
+      ) ) {
+
+    _POSIX_Message_queue_Free( the_mq );
+    _Workspace_Free(name);
+    _Objects_Allocator_unlock();
+    rtems_set_errno_and_return_minus_one( ENOSPC );
+  }
+
+  _Objects_Open_string(
+    &_POSIX_Message_queue_Information,
+    &the_mq->Object,
+    name
+  );
+
+  *message_queue = the_mq;
+
+  _Objects_Allocator_unlock();
+  return 0;
+}
+
 /*
  *  15.2.2 Open a Message Queue, P1003.1b-1993, p. 272
  */



More information about the vc mailing list