Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlain Magloire2002-09-26 19:52:22 +0000
committerAlain Magloire2002-09-26 19:52:22 +0000
commitb4b7151cf398c9a6b3b67d2a6805c57bdbd7350e (patch)
treefec8108c81d6e43f61f03d0de7ef73dcbce0853f /core/org.eclipse.cdt.core.linux/library
parent8051af4120051b50dc3fff1e5d3f7eea2fea476c (diff)
downloadorg.eclipse.cdt-b4b7151cf398c9a6b3b67d2a6805c57bdbd7350e.tar.gz
org.eclipse.cdt-b4b7151cf398c9a6b3b67d2a6805c57bdbd7350e.tar.xz
org.eclipse.cdt-b4b7151cf398c9a6b3b67d2a6805c57bdbd7350e.zip
Patch from Gene Sally. And formatting "fixes".
Diffstat (limited to 'core/org.eclipse.cdt.core.linux/library')
-rw-r--r--core/org.eclipse.cdt.core.linux/library/Makefile22
-rw-r--r--core/org.eclipse.cdt.core.linux/library/exec_unix.c184
2 files changed, 106 insertions, 100 deletions
diff --git a/core/org.eclipse.cdt.core.linux/library/Makefile b/core/org.eclipse.cdt.core.linux/library/Makefile
index 4c971acb856..d03499935e7 100644
--- a/core/org.eclipse.cdt.core.linux/library/Makefile
+++ b/core/org.eclipse.cdt.core.linux/library/Makefile
@@ -1,12 +1,22 @@
# makefile for libspawner.so
-#set JDK_INCLUDES
+# set JDK_INCLUDES if they are not already set in the environment
+# spit out a warning if the make script will be using the default values
+ifeq ($(JDK_INCLUDES),)
+$(warning JDK_INCLUDES not set in environment, using default: $(JDK_INCLUDES))
+endif
+
+ifeq ($(JDK_OS_INCLUDES),)
+$(warning JDK_OS_INCLUDES not set in environment, using default: $(JDK_OS_INCLUDES))
+endif
+
+
JDK_INCLUDES=/usr/local/jdk/include
JDK_OS_INCLUDES=/usr/local/jdk/include/linux
CC=gcc
CPPFLAGS = -I. -I$(JDK_INCLUDES) -I$(JDK_OS_INCLUDES)
-CFLAGS +=-fpic -D_REENTRANT
+CFLAGS +=-fpic -D_REENTRANT
LIB_NAME_SPAWNER = libspawner.so
LIB_NAME_FULL_SPAWNER = ../os/linux/x86/libspawner.so
@@ -20,12 +30,14 @@ OBJS = $(OBJS_SPAWNER) $(OBJS_PTY)
all: $(LIB_NAME_FULL_SPAWNER) $(LIB_NAME_FULL_PTY)
-$(LIB NAME_FULL_SPAWNER) : $(OBJS_SPAWNER)
+rebuild: clean all
+
+$(LIB_NAME_FULL_SPAWNER) : $(OBJS_SPAWNER)
$(CC) -g -shared -Wl,-soname,$(LIB_NAME_SPAWNER) -o $(LIB_NAME_FULL_SPAWNER) $(OBJS_SPAWNER) -lc
$(LIB_NAME_FULL_PTY): $(OBJS_PTY)
$(CC) -g -shared -Wl,-soname,$(LIB_NAME_PTY) -o $(LIB_NAME_FULL_PTY) $(OBJS_PTY)
clean :
- echo -rm $(OBJS_SPAWNER) $(LIB_NAME_FULL_SPAWNER)
- -rm $(OBJS_PTY) $(LIB_NAME_FULL_PTY)
+ $(RM) $(OBJS_SPAWNER) $(LIB_NAME_FULL_SPAWNER)
+ $(RM) $(OBJS_PTY) $(LIB_NAME_FULL_PTY)
diff --git a/core/org.eclipse.cdt.core.linux/library/exec_unix.c b/core/org.eclipse.cdt.core.linux/library/exec_unix.c
index f483913ff0d..3418866b9ae 100644
--- a/core/org.eclipse.cdt.core.linux/library/exec_unix.c
+++ b/core/org.eclipse.cdt.core.linux/library/exec_unix.c
@@ -14,68 +14,66 @@ pid_t
exec0(const char *path, char *const argv[], char *const envp[],
const char *dirpath, int channels[3])
{
- int pipe0[2], pipe1[2], pipe2[2];
- pid_t childpid;
- char *full_path;
-
- //
- // Handle this error case, we need the full path for execve() below.
- //
- if (path[0] != '/' && path[0] != '.') {
- full_path = pfind( path );
+ int pipe0[2], pipe1[2], pipe2[2];
+ pid_t childpid;
+ char *full_path;
+
+ /*
+ * Handle this error case, we need the full path for execve() below.
+ */
+ if (path[0] != '/' && path[0] != '.') {
+ full_path = pfind(path);
//full_path = pathfind (getenv ("PATH"), path, "rx");
- if (full_path == NULL) {
- fprintf( stderr, "Unable to find full path for \"%s\"\n", path );
- return -1;
- }
- } else {
- full_path = path;
- }
-
- //
- // Make sure we can create our pipes before forking.
- //
- if( channels != NULL )
- {
- if (pipe(pipe0) < 0 || pipe(pipe1) < 0 || pipe(pipe2) < 0) {
- fprintf(stderr, "%s(%d): returning due to error.\n",
- __FUNCTION__, __LINE__);
+ if (full_path == NULL) {
+ fprintf(stderr, "Unable to find full path for \"%s\"\n", path );
+ return -1;
+ }
+ } else {
+ full_path = strdup(path);
+ }
+
+ /*
+ * Make sure we can create our pipes before forking.
+ */
+ if (channels != NULL) {
+ if (pipe(pipe0) < 0 || pipe(pipe1) < 0 || pipe(pipe2) < 0) {
+ fprintf(stderr, "%s(%d): returning due to error.\n",
+ __FUNCTION__, __LINE__);
free(full_path);
- return -1;
- }
- }
+ return -1;
+ }
+ }
- childpid = fork();
+ childpid = fork();
- if (childpid < 0) {
- fprintf(stderr, "%s(%d): returning due to error: %s\n",
- __FUNCTION__, __LINE__, strerror(errno));
+ if (childpid < 0) {
+ fprintf(stderr, "%s(%d): returning due to error: %s\n",
+ __FUNCTION__, __LINE__, strerror(errno));
free(full_path);
- return -1;
- } else if (childpid == 0) { /* child */
- char *ptr;
-
- chdir(dirpath);
-
- if( channels != NULL )
- {
- /* Close the write end of pipe0 */
- if( close(pipe0[1]) == -1 )
- perror( "close(pipe0[1])" );
-
- /* Close the read end of pipe1 */
- if( close(pipe1[0]) == -1 )
- perror( "close(pipe1[0])" );
-
- /* Close the read end of pipe2 */
- if( close(pipe2[0]) == -1 )
- perror( "close(pipe2[0]))" );
-
- /* redirections */
- dup2(pipe0[0], STDIN_FILENO); /* dup stdin */
- dup2(pipe1[1], STDOUT_FILENO); /* dup stdout */
- dup2(pipe2[1], STDERR_FILENO); /* dup stderr */
- }
+ return -1;
+ } else if (childpid == 0) { /* child */
+ char *ptr;
+
+ chdir(dirpath);
+
+ if (channels != NULL) {
+ /* Close the write end of pipe0 */
+ if (close(pipe0[1]) == -1)
+ perror("close(pipe0[1])");
+
+ /* Close the read end of pipe1 */
+ if (close(pipe1[0]) == -1)
+ perror("close(pipe1[0])");
+
+ /* Close the read end of pipe2 */
+ if (close(pipe2[0]) == -1)
+ perror("close(pipe2[0]))");
+
+ /* redirections */
+ dup2(pipe0[0], STDIN_FILENO); /* dup stdin */
+ dup2(pipe1[1], STDOUT_FILENO); /* dup stdout */
+ dup2(pipe2[1], STDERR_FILENO); /* dup stderr */
+ }
/* Close all the fd's in the child */
{
@@ -86,60 +84,56 @@ exec0(const char *path, char *const argv[], char *const envp[],
close(fd++);
}
- if( envp[0] == NULL )
- {
- execv( full_path, argv );
- }
- else
- {
- execve( full_path, argv, envp );
- }
+ if (envp[0] == NULL) {
+ execv(full_path, argv);
+ } else {
+ execve(full_path, argv, envp);
+ }
- _exit(127);
+ _exit(127);
- } else if (childpid != 0) { /* parent */
+ } else if (childpid != 0) { /* parent */
- char b;
+ char b;
- if( channels != NULL )
- {
- /* close the read end of pipe1 */
- if( close(pipe0[0]) == -1 )
- perror( "close(pipe0[0])" );
-
- /* close the write end of pipe2 */
- if( close(pipe1[1]) == -1 )
- perror( "close(pipe1[1])" );
+ if (channels != NULL) {
+ /* close the read end of pipe1 */
+ if (close(pipe0[0]) == -1)
+ perror("close(pipe0[0])");
+
+ /* close the write end of pipe2 */
+ if (close(pipe1[1]) == -1)
+ perror("close(pipe1[1])");
- /* close the write end of pipe2 */
- if( close(pipe2[1]) == -1 )
- perror( "close(pipe2[1])" );
+ /* close the write end of pipe2 */
+ if (close(pipe2[1]) == -1)
+ perror("close(pipe2[1])");
- channels[0] = pipe0[1]; /* Output Stream. */
- channels[1] = pipe1[0]; /* Input Stream. */
- channels[2] = pipe2[0]; /* Input Stream. */
- }
+ channels[0] = pipe0[1]; /* Output Stream. */
+ channels[1] = pipe1[0]; /* Input Stream. */
+ channels[2] = pipe2[0]; /* Input Stream. */
+ }
free(full_path);
- return childpid;
- }
+ return childpid;
+ }
free(full_path);
- return -1; /*NOT REACHED */
+ return -1; /*NOT REACHED */
}
int wait0(pid_t pid)
{
- int status;
- int val = -1;
+ int status;
+ int val = -1;
- if (pid < 0 || waitpid(pid, &status, 0) < 0)
- return -1;
+ if (pid < 0 || waitpid(pid, &status, 0) < 0)
+ return -1;
- if (WIFEXITED(status)) {
- val = WEXITSTATUS(status);
- }
+ if (WIFEXITED(status)) {
+ val = WEXITSTATUS(status);
+ }
- return val;
+ return val;
}

Back to the top