diff options
Diffstat (limited to 'guts/clone.c')
-rw-r--r-- | guts/clone.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/guts/clone.c b/guts/clone.c new file mode 100644 index 0000000..61c8bf9 --- /dev/null +++ b/guts/clone.c @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2008-2010 Wind River Systems; see + * guts/COPYRIGHT for information. + * + * static int + * clone(...) { + * .... + */ + /* because clone() doesn't actually continue in this function, we + * can't check the return and fix up environment variables in the + * child. Instead, we have to temporarily do any fixup, then possibly + * undo it later. UGH! + */ + pseudo_debug(1, "client resetting for clone(2) call\n"); + if (real_clone) { + if (!pseudo_get_value("PSEUDO_RELOADED")) { + pseudo_setupenv(); + pseudo_client_reinit(); + } else { + pseudo_setupenv(); + pseudo_dropenv(); + } + /* call the real syscall */ + rc = (*real_clone)(fn, child_stack, flags, arg, pid, tls, ctid); + } else { + /* rc was initialized to the "failure" value */ + pseudo_enosys("clone"); + } + +/* ... + * return rc; + * } + */ |