vshost-util-vserver

Build script and sources for util-vserver.
git clone https://ccx.te2000.cz/git/vshost-util-vserver
Log | Files | Refs

sys_clone.h (1877B)


      1 // $Id$    --*- c -*--
      2 
      3 // Copyright (C) 2004 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
      4 //  
      5 // This program is free software; you can redistribute it and/or modify
      6 // it under the terms of the GNU General Public License as published by
      7 // the Free Software Foundation; version 2 of the License.
      8 //  
      9 // This program is distributed in the hope that it will be useful,
     10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
     11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     12 // GNU General Public License for more details.
     13 //  
     14 // You should have received a copy of the GNU General Public License
     15 // along with this program; if not, write to the Free Software
     16 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
     17 
     18 
     19 #ifndef H_UTIL_VSERVER_SRC_SYS_CLONE_H
     20 #define H_UTIL_VSERVER_SRC_SYS_CLONE_H
     21 
     22 #include <unistd.h>
     23 #include "lib/syscall-wrap.h"
     24 #define __NR__sys_clone		__NR_clone
     25 
     26 #ifndef ENSC_SYSCALL_TRADITIONAL
     27 #  include <errno.h>
     28 
     29 #  if defined(__s390__)
     30 inline static UNUSED ALWAYSINLINE
     31 _syscall2(int, _sys_clone, void *, child_stack, int, flags)
     32 #  else
     33 inline static UNUSED ALWAYSINLINE
     34 _syscall2(int, _sys_clone, int, flags, void *, child_stack)
     35 #  endif
     36 #endif
     37 
     38 inline static UNUSED ALWAYSINLINE
     39 int sys_clone(int flags, void *child_stack)
     40 {
     41   int ret;
     42 #ifdef __sparc__
     43   int parent = getpid();
     44 #endif
     45 
     46 #if   defined(__s390__) && defined(ENSC_SYSCALL_TRADITIONAL)
     47   ret = syscall(__NR__sys_clone, child_stack, flags);
     48 #elif defined(__s390__)
     49   ret = _sys_clone(child_stack, flags);
     50 #elif defined(ENSC_SYSCALL_TRADITIONAL)
     51   ret = syscall(__NR__sys_clone, flags, child_stack);
     52 #else
     53   ret = _sys_clone(flags, child_stack);
     54 #endif
     55 #ifdef __sparc__
     56   if (ret == parent)
     57     ret = 0;
     58 #endif
     59   return ret;
     60 }
     61 
     62 #undef __NR__sys_clone
     63 
     64 #define ENSC_HAVE_SYSCLONE		1
     65   
     66 #endif	//  H_UTIL_VSERVER_SRC_SYS_CLONE_H