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 ---
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 ---