diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-04-25 06:33:28 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-05-02 07:46:13 +0200 |
commit | 3e36a16774290447e98a0261e625c38d00f2e19b (patch) | |
tree | c907237968596fd8e4bb647f87186d88318d9a32 | |
parent | bsp/qoriq: Add and use qoriq_reset_qman_and_bman() (diff) | |
download | rtems-3e36a16774290447e98a0261e625c38d00f2e19b.tar.bz2 |
posix: _POSIX_Message_queue_Create_support()
Make _POSIX_Message_queue_Create_support() static since it is only used
by mq_open().
-rw-r--r-- | cpukit/posix/Makefile.am | 2 | ||||
-rw-r--r-- | cpukit/posix/include/rtems/posix/mqueueimpl.h | 14 | ||||
-rw-r--r-- | cpukit/posix/src/mqueuecreatesupp.c | 136 | ||||
-rw-r--r-- | 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 12427d5896..d354f7ec52 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 cf0f76af32..1cdf6191c7 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 06192ec222..0000000000 --- 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 d327e13fac..bfdff0382a 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 */ |