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 156136 2006-03-01 06:37:34Z 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);
46extern int __sys_kmq_setattr(int, const struct mq_attr *__restrict,
47 struct mq_attr *__restrict);
48extern ssize_t __sys_kmq_timedreceive(int, char *__restrict, size_t,
49 unsigned *__restrict, const struct timespec *__restrict);
50extern int __sys_kmq_timedsend(int, const char *, size_t, unsigned,
51 const struct timespec *);
52extern int __sys_kmq_unlink(const char *);
53extern int __sys_close(int fd);
--- 20 unchanged lines hidden (view full) ---
74__weak_reference(__mq_unlink, mq_unlink);
75__weak_reference(__mq_unlink, _mq_unlink);
76__weak_reference(__mq_send, mq_send);
77__weak_reference(__mq_send, _mq_send);
78__weak_reference(__mq_receive, mq_receive);
79__weak_reference(__mq_receive, _mq_receive);
80
81mqd_t
82__mq_open(const char *name, int oflag, mode_t mode)
83{
84 struct __mq *mq;
85 int err;
86
87 mq = malloc(sizeof(struct __mq));
88 if (mq == NULL)
89 return (NULL);
90
91 mq->oshandle = __sys_kmq_open(name, oflag, mode);
92 if (mq->oshandle != -1) {
93 mq->node = NULL;
94 return (mq);
95 }
96 err = errno;
97 free(mq);
98 errno = err;
99 return ((mqd_t)-1L);
--- 132 unchanged lines hidden ---
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 156136 2006-03-01 06:37:34Z 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);
46extern int __sys_kmq_setattr(int, const struct mq_attr *__restrict,
47 struct mq_attr *__restrict);
48extern ssize_t __sys_kmq_timedreceive(int, char *__restrict, size_t,
49 unsigned *__restrict, const struct timespec *__restrict);
50extern int __sys_kmq_timedsend(int, const char *, size_t, unsigned,
51 const struct timespec *);
52extern int __sys_kmq_unlink(const char *);
53extern int __sys_close(int fd);
--- 20 unchanged lines hidden (view full) ---
74__weak_reference(__mq_unlink, mq_unlink);
75__weak_reference(__mq_unlink, _mq_unlink);
76__weak_reference(__mq_send, mq_send);
77__weak_reference(__mq_send, _mq_send);
78__weak_reference(__mq_receive, mq_receive);
79__weak_reference(__mq_receive, _mq_receive);
80
81mqd_t
82__mq_open(const char *name, int oflag, mode_t mode)
83{
84 struct __mq *mq;
85 int err;
86
87 mq = malloc(sizeof(struct __mq));
88 if (mq == NULL)
89 return (NULL);
90
91 mq->oshandle = __sys_kmq_open(name, oflag, mode);
92 if (mq->oshandle != -1) {
93 mq->node = NULL;
94 return (mq);
95 }
96 err = errno;
97 free(mq);
98 errno = err;
99 return ((mqd_t)-1L);
--- 132 unchanged lines hidden ---