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; + 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 ); + /* + * 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; - } + 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__); + /* + * 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; + return -1; + } else if (childpid == 0) { /* child */ + char *ptr; - chdir(dirpath); + 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])" ); + if (channels != NULL) { + /* Close the write end of pipe0 */ + if (close(pipe0[1]) == -1) + perror("close(pipe0[1])"); - /* Close the read end of pipe2 */ - if( close(pipe2[0]) == -1 ) - perror( "close(pipe2[0]))" ); + /* Close the read end of pipe1 */ + if (close(pipe1[0]) == -1) + perror("close(pipe1[0])"); - /* redirections */ - dup2(pipe0[0], STDIN_FILENO); /* dup stdin */ - dup2(pipe1[1], STDOUT_FILENO); /* dup stdout */ - dup2(pipe2[1], STDERR_FILENO); /* dup stderr */ - } + /* 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; }