1
0
mirror of https://github.com/signalwire/freeswitch.git synced 2025-08-14 09:58:17 +00:00
Files
build
clients
cmake_modules
conf
debian
docs
dtd
freeswitch.xcodeproj
fscomm
htdocs
libs
apr
atomic
build
docs
dso
file_io
helpers
images
include
locks
memory
misc
mmap
network_io
passwd
poll
random
shmem
strings
support
tables
test
threadproc
beos
apr_proc_stub.c
proc.c
thread.c
threadpriv.c
threadproc_common.c
netware
os2
unix
win32
time
user
.update
CHANGES
CMakeLists.txt
LICENSE
Makefile.in
NOTICE
NWGNUmakefile
README.dev
apr-config.in
apr.dsp
apr.dsw
apr.pc.in
apr.spec
build-outputs.mk
build.conf
buildconf
config.layout
configure.gnu
configure.in
emacs-mode
libapr.dsp
libapr.rc
libaprnw.mcp.zip
renames_pending
apr-util
broadvoice
curl
esl
freetdm
iksemel
ilbc
js
ldns
libcodec2
libdingaling
libedit
libg722_1
libnatpmp
libsndfile
libteletone
miniupnpc
openzap
pcre
portaudio
silk
sofia-sip
spandsp
speex
sqlite
srtp
stfu
tiff-3.8.2
unimrcp
win32
xmlrpc-c
yaml
.gitignore
patches
scripts
src
support-d
w32
web
.gitignore
.version.in
CMakeLists.txt
Freeswitch.2005.unsupported.sln
Freeswitch.2008.express.sln
Freeswitch.2008.sln
Freeswitch.2008.sln.debug.bat
Freeswitch.2008.sln.release.bat
Freeswitch.2010.express.sln
Freeswitch.2010.sln
INSTALL
Makefile.am
acinclude.m4
bootstrap.sh
configure.in
devel-bootstrap.sh
freeswitch-sounds-en-us-callie.spec
freeswitch-sounds-music.spec
freeswitch-sounds-ru-RU-elena.spec
freeswitch.spec
swig_common.i
freeswitch/libs/apr/threadproc/beos/apr_proc_stub.c

77 lines
2.1 KiB
C
Raw Normal View History

/* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <kernel/OS.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
struct pipefd {
int in;
int out;
int err;
};
int main(int argc, char *argv[]) {
/* we expect the following...
*
* argv[0] = this stub
* argv[1] = directory to run in...
* argv[2] = progname to execute
* rest of arguments to be passed to program
*/
char *progname = argv[2];
char *directory = argv[1];
struct pipefd *pfd;
thread_id sender;
void *buffer;
char ** newargs;
int i = 0;
newargs = (char**)malloc(sizeof(char*) * (argc - 1));
buffer = (void*)malloc(sizeof(struct pipefd));
/* this will block until we get the data */
receive_data(&sender, buffer, sizeof(struct pipefd));
pfd = (struct pipefd*)buffer;
if (pfd->in > STDERR_FILENO) {
if (dup2(pfd->in, STDIN_FILENO) != STDIN_FILENO) return (-1);
close (pfd->in);
}
if (pfd->out > STDERR_FILENO) {
if (dup2(pfd->out, STDOUT_FILENO) != STDOUT_FILENO) return (-1);
close (pfd->out);
}
if (pfd->err > STDERR_FILENO) {
if (dup2(pfd->err, STDERR_FILENO) != STDERR_FILENO) return (-1);
close (pfd->err);
}
for (i=3;i<=argc;i++){
newargs[i-3] = argv[i];
}
/* tell the caller we're OK to start */
send_data(sender,1,NULL,0);
if (directory != NULL)
chdir(directory);
execve (progname, newargs, environ);
return (-1);
}