Port: Add Solaris support to socket compat
[lttng-tools.git] / src / common / compat / clone.h
CommitLineData
3fa91327
DG
1/*
2 * Copyright (C) 2011 - David Goulet <dgoulet@efficios.com>
3 *
d14d33bf
AM
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License, version 2 only,
6 * as published by the Free Software Foundation.
3fa91327
DG
7 *
8 * This program is distributed in the hope that it will be useful, but WITHOUT
9 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
11 * more details.
12 *
d14d33bf
AM
13 * You should have received a copy of the GNU General Public License along
14 * with this program; if not, write to the Free Software Foundation, Inc.,
15 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
3fa91327
DG
16 */
17
18#ifndef _COMPAT_CLONE_H
19#define _COMPAT_CLONE_H
20
21#ifdef __linux__
22
23#include <sched.h>
24
89831a74 25static inline
45aad3a7 26pid_t lttng_clone_files(int (*fn)(void *), void *child_stack, void *arg)
89831a74
MD
27{
28 return clone(fn, child_stack, CLONE_FILES | SIGCHLD, arg);
29}
30
7657ae75 31#elif defined(__FreeBSD__)
3fa91327
DG
32
33#include <unistd.h>
34
89831a74 35static inline
45aad3a7 36pid_t lttng_clone_files(int (*fn)(void *), void *child_stack, void *arg)
3fa91327 37{
45aad3a7
MD
38 pid_t pid;
39
40 pid = rfork(RFPROC | RFTHREAD);
41 if (pid == 0) {
42 /* child */
43 int ret;
44
45 ret = fn(arg);
46 exit(ret);
47 } else if (pid > 0) {
48 /* parent */
49 /*
50 * Just return, the caller will wait for the child.
51 */
52 return pid;
53 } else {
54 /* Error */
55 return pid;
56 }
3fa91327
DG
57}
58
59#else
7657ae75 60#error "Please add support for your OS."
3fa91327
DG
61#endif /* __linux__ , __FreeBSD__ */
62
63#endif /* _COMPAT_CLONE_H */
This page took 0.035362 seconds and 4 git commands to generate.