1/*- 2 * Copyright (c) 2006 David Xu <davidxu@freebsd.org> 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 9 unchanged lines hidden (view full) --- 18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 * |
26 * $FreeBSD: head/lib/librt/mq.c 156141 2006-03-01 08:06:09Z davidxu $ |
27 */ 28 29#include <sys/cdefs.h> 30#include <sys/types.h> 31#include <sys/syscall.h> 32#include <sys/mqueue.h> 33 34#include "namespace.h" 35#include <errno.h> 36#include <pthread.h> 37#include <stddef.h> 38#include <stdlib.h> 39#include <signal.h> 40#include <unistd.h> 41#include "sigev_thread.h" 42#include "un-namespace.h" 43 44extern int __sys_kmq_notify(int, const struct sigevent *); |
45extern int __sys_kmq_open(const char *, int, mode_t, 46 const struct mq_attr *); |
47extern int __sys_kmq_setattr(int, const struct mq_attr *__restrict, 48 struct mq_attr *__restrict); 49extern ssize_t __sys_kmq_timedreceive(int, char *__restrict, size_t, 50 unsigned *__restrict, const struct timespec *__restrict); 51extern int __sys_kmq_timedsend(int, const char *, size_t, unsigned, 52 const struct timespec *); 53extern int __sys_kmq_unlink(const char *); 54extern int __sys_close(int fd); --- 20 unchanged lines hidden (view full) --- 75__weak_reference(__mq_unlink, mq_unlink); 76__weak_reference(__mq_unlink, _mq_unlink); 77__weak_reference(__mq_send, mq_send); 78__weak_reference(__mq_send, _mq_send); 79__weak_reference(__mq_receive, mq_receive); 80__weak_reference(__mq_receive, _mq_receive); 81 82mqd_t |
83__mq_open(const char *name, int oflag, mode_t mode, 84 const struct mq_attr *attr) |
85{ 86 struct __mq *mq; 87 int err; 88 89 mq = malloc(sizeof(struct __mq)); 90 if (mq == NULL) 91 return (NULL); 92 |
93 mq->oshandle = __sys_kmq_open(name, oflag, mode, attr); |
94 if (mq->oshandle != -1) { 95 mq->node = NULL; 96 return (mq); 97 } 98 err = errno; 99 free(mq); 100 errno = err; 101 return ((mqd_t)-1L); --- 132 unchanged lines hidden --- |