From 985995cb0f64cee1c14511880b1f6f0107a88f62 Mon Sep 17 00:00:00 2001 From: David Inglis Date: Mon, 4 Nov 2002 20:57:06 +0000 Subject: [PATCH] change library layout --- .../library/.cvsignore | 2 + .../org.eclipse.cdt.core.qnx/library/Makefile | 2 +- .../library/pty/Makefile | 8 + .../library/{ => pty}/common.mk | 30 +- .../library/pty/openpty.c | 5 +- .../library/{ => pty}/x86/Makefile | 0 .../library/{ => pty}/x86/so/Makefile | 0 .../library/spawner/Makefile | 8 + .../library/{ => spawner}/Spawner.h | 90 +-- .../{ => spawner}/SpawnerInputStream.h | 64 +-- .../{ => spawner}/SpawnerOutputStream.h | 58 +- .../library/spawner/common.mk | 14 + .../library/{ => spawner}/iostream.c | 218 ++++---- .../library/{ => spawner}/spawner.c | 514 +++++++++--------- .../library/spawner/x86/Makefile | 8 + .../library/spawner/x86/so/Makefile | 1 + .../library/x86/so/.cvsignore | 4 - 17 files changed, 531 insertions(+), 495 deletions(-) create mode 100644 core/org.eclipse.cdt.core.qnx/library/pty/Makefile rename core/org.eclipse.cdt.core.qnx/library/{ => pty}/common.mk (87%) rename core/org.eclipse.cdt.core.qnx/library/{ => pty}/x86/Makefile (100%) rename core/org.eclipse.cdt.core.qnx/library/{ => pty}/x86/so/Makefile (100%) create mode 100644 core/org.eclipse.cdt.core.qnx/library/spawner/Makefile rename core/org.eclipse.cdt.core.qnx/library/{ => spawner}/Spawner.h (96%) rename core/org.eclipse.cdt.core.qnx/library/{ => spawner}/SpawnerInputStream.h (96%) rename core/org.eclipse.cdt.core.qnx/library/{ => spawner}/SpawnerOutputStream.h (96%) create mode 100644 core/org.eclipse.cdt.core.qnx/library/spawner/common.mk rename core/org.eclipse.cdt.core.qnx/library/{ => spawner}/iostream.c (96%) rename core/org.eclipse.cdt.core.qnx/library/{ => spawner}/spawner.c (96%) create mode 100644 core/org.eclipse.cdt.core.qnx/library/spawner/x86/Makefile create mode 100644 core/org.eclipse.cdt.core.qnx/library/spawner/x86/so/Makefile delete mode 100644 core/org.eclipse.cdt.core.qnx/library/x86/so/.cvsignore diff --git a/core/org.eclipse.cdt.core.qnx/library/.cvsignore b/core/org.eclipse.cdt.core.qnx/library/.cvsignore index 5761abcfdf0..33ec1741ee8 100644 --- a/core/org.eclipse.cdt.core.qnx/library/.cvsignore +++ b/core/org.eclipse.cdt.core.qnx/library/.cvsignore @@ -1 +1,3 @@ *.o +*.so +*.a diff --git a/core/org.eclipse.cdt.core.qnx/library/Makefile b/core/org.eclipse.cdt.core.qnx/library/Makefile index 959e9b2292f..0f36af0e691 100644 --- a/core/org.eclipse.cdt.core.qnx/library/Makefile +++ b/core/org.eclipse.cdt.core.qnx/library/Makefile @@ -1,4 +1,4 @@ -LIST=CPU +LIST=ALL ifndef QRECURSE QRECURSE=recurse.mk ifdef QCONFIG diff --git a/core/org.eclipse.cdt.core.qnx/library/pty/Makefile b/core/org.eclipse.cdt.core.qnx/library/pty/Makefile new file mode 100644 index 00000000000..959e9b2292f --- /dev/null +++ b/core/org.eclipse.cdt.core.qnx/library/pty/Makefile @@ -0,0 +1,8 @@ +LIST=CPU +ifndef QRECURSE +QRECURSE=recurse.mk +ifdef QCONFIG +QRDIR=$(dir $(QCONFIG)) +endif +endif +include $(QRDIR)$(QRECURSE) diff --git a/core/org.eclipse.cdt.core.qnx/library/common.mk b/core/org.eclipse.cdt.core.qnx/library/pty/common.mk similarity index 87% rename from core/org.eclipse.cdt.core.qnx/library/common.mk rename to core/org.eclipse.cdt.core.qnx/library/pty/common.mk index f85e2decabc..40fc9cca6c7 100644 --- a/core/org.eclipse.cdt.core.qnx/library/common.mk +++ b/core/org.eclipse.cdt.core.qnx/library/pty/common.mk @@ -1,16 +1,14 @@ -ifndef QCONFIG -QCONFIG=qconfig.mk -endif -include $(QCONFIG) - -NAME=spawner - -include $(MKFILES_ROOT)/qtargets.mk - -ifeq ($(OS),nto) -ifeq ($(IVEHOME),) -IVEHOME:=/opt/vame/ive/bin -endif -EXTRA_INCVPATH+=$(IVEHOME)/include -endif - +ifndef QCONFIG +QCONFIG=qconfig.mk +endif +include $(QCONFIG) + +include $(MKFILES_ROOT)/qtargets.mk + +ifeq ($(OS),nto) +ifeq ($(IVEHOME),) +IVEHOME:=/opt/vame/ive/bin +endif +EXTRA_INCVPATH+=$(IVEHOME)/include +endif + diff --git a/core/org.eclipse.cdt.core.qnx/library/pty/openpty.c b/core/org.eclipse.cdt.core.qnx/library/pty/openpty.c index a946423199b..b1660a13b78 100644 --- a/core/org.eclipse.cdt.core.qnx/library/pty/openpty.c +++ b/core/org.eclipse.cdt.core.qnx/library/pty/openpty.c @@ -55,7 +55,8 @@ int ptym_open(char * pts_name) { char *ptr1, *ptr2; - + int fdm; + strcpy(pts_name, "/dev/ptyXY"); /* array index: 012345689 (for references in following code) */ for (ptr1 = "pqrstuvwxyzPQRST"; *ptr1 != 0; ptr1++) { @@ -81,7 +82,7 @@ ptym_open(char * pts_name) int ptys_open(int fdm, char * pts_name) { - int gid; + int gid, fds; struct group *grptr; grptr = getgrnam("tty"); diff --git a/core/org.eclipse.cdt.core.qnx/library/x86/Makefile b/core/org.eclipse.cdt.core.qnx/library/pty/x86/Makefile similarity index 100% rename from core/org.eclipse.cdt.core.qnx/library/x86/Makefile rename to core/org.eclipse.cdt.core.qnx/library/pty/x86/Makefile diff --git a/core/org.eclipse.cdt.core.qnx/library/x86/so/Makefile b/core/org.eclipse.cdt.core.qnx/library/pty/x86/so/Makefile similarity index 100% rename from core/org.eclipse.cdt.core.qnx/library/x86/so/Makefile rename to core/org.eclipse.cdt.core.qnx/library/pty/x86/so/Makefile diff --git a/core/org.eclipse.cdt.core.qnx/library/spawner/Makefile b/core/org.eclipse.cdt.core.qnx/library/spawner/Makefile new file mode 100644 index 00000000000..959e9b2292f --- /dev/null +++ b/core/org.eclipse.cdt.core.qnx/library/spawner/Makefile @@ -0,0 +1,8 @@ +LIST=CPU +ifndef QRECURSE +QRECURSE=recurse.mk +ifdef QCONFIG +QRDIR=$(dir $(QCONFIG)) +endif +endif +include $(QRDIR)$(QRECURSE) diff --git a/core/org.eclipse.cdt.core.qnx/library/Spawner.h b/core/org.eclipse.cdt.core.qnx/library/spawner/Spawner.h similarity index 96% rename from core/org.eclipse.cdt.core.qnx/library/Spawner.h rename to core/org.eclipse.cdt.core.qnx/library/spawner/Spawner.h index 01ffb3cc1b2..287c8370ab0 100644 --- a/core/org.eclipse.cdt.core.qnx/library/Spawner.h +++ b/core/org.eclipse.cdt.core.qnx/library/spawner/Spawner.h @@ -1,45 +1,45 @@ -/* DO NOT EDIT THIS FILE - it is machine generated */ -#include -/* Header for class com_qnx_tools_utils_spawner_Spawner */ - -#ifndef _Included_com_qnx_tools_utils_spawner_Spawner -#define _Included_com_qnx_tools_utils_spawner_Spawner -#ifdef __cplusplus -extern "C" { -#endif -/* - * Class: org_eclipse_cdt_utils_spawner_Spawner - * Method: exec0 - * Signature: ([Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;[I)I - */ -JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec0 - (JNIEnv *, jobject, jobjectArray, jobjectArray, jstring, jintArray); - -/* - * Class: org_eclipse_cdt_utils_spawner_Spawner - * Method: exec0 - * Signature: ([Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;[I)I - */ -JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec1 - (JNIEnv *, jobject, jobjectArray, jobjectArray, jstring); - -/* - * Class: org_eclipse_cdt_utils_spawner_Spawner - * Method: raise - * Signature: (II)I - */ -JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_raise - (JNIEnv *, jobject, jint, jint); - -/* - * Class: org_eclipse_cdt_utils_spawner_Spawner - * Method: waitFor - * Signature: (I)I - */ -JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_waitFor - (JNIEnv *, jobject, jint); - -#ifdef __cplusplus -} -#endif -#endif +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class com_qnx_tools_utils_spawner_Spawner */ + +#ifndef _Included_com_qnx_tools_utils_spawner_Spawner +#define _Included_com_qnx_tools_utils_spawner_Spawner +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: org_eclipse_cdt_utils_spawner_Spawner + * Method: exec0 + * Signature: ([Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;[I)I + */ +JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec0 + (JNIEnv *, jobject, jobjectArray, jobjectArray, jstring, jintArray); + +/* + * Class: org_eclipse_cdt_utils_spawner_Spawner + * Method: exec0 + * Signature: ([Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;[I)I + */ +JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec1 + (JNIEnv *, jobject, jobjectArray, jobjectArray, jstring); + +/* + * Class: org_eclipse_cdt_utils_spawner_Spawner + * Method: raise + * Signature: (II)I + */ +JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_raise + (JNIEnv *, jobject, jint, jint); + +/* + * Class: org_eclipse_cdt_utils_spawner_Spawner + * Method: waitFor + * Signature: (I)I + */ +JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_waitFor + (JNIEnv *, jobject, jint); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/core/org.eclipse.cdt.core.qnx/library/SpawnerInputStream.h b/core/org.eclipse.cdt.core.qnx/library/spawner/SpawnerInputStream.h similarity index 96% rename from core/org.eclipse.cdt.core.qnx/library/SpawnerInputStream.h rename to core/org.eclipse.cdt.core.qnx/library/spawner/SpawnerInputStream.h index 3b32d2b2806..ecf8f8c6a78 100644 --- a/core/org.eclipse.cdt.core.qnx/library/SpawnerInputStream.h +++ b/core/org.eclipse.cdt.core.qnx/library/spawner/SpawnerInputStream.h @@ -1,32 +1,32 @@ -/* DO NOT EDIT THIS FILE - it is machine generated */ -#include -/* Header for class com_qnx_tools_utils_spawner_SpawnerInputStream */ - -#ifndef _Included_com_qnx_tools_utils_spawner_SpawnerInputStream -#define _Included_com_qnx_tools_utils_spawner_SpawnerInputStream -#ifdef __cplusplus -extern "C" { -#endif -#undef com_qnx_tools_utils_spawner_SpawnerInputStream_SKIP_BUFFER_SIZE -#define com_qnx_tools_utils_spawner_SpawnerInputStream_SKIP_BUFFER_SIZE 2048L -/* Inaccessible static: skipBuffer */ -/* - * Class: org_elipse_cdt_utils_spawner_SpawnerInputStream - * Method: read0 - * Signature: (I[BI)I - */ -JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_read0 - (JNIEnv *, jobject, jint, jbyteArray, jint); - -/* - * Class: org_eclipse_cdt_utils_spawner_SpawnerInputStream - * Method: close0 - * Signature: (I)I - */ -JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_close0 - (JNIEnv *, jobject, jint); - -#ifdef __cplusplus -} -#endif -#endif +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class com_qnx_tools_utils_spawner_SpawnerInputStream */ + +#ifndef _Included_com_qnx_tools_utils_spawner_SpawnerInputStream +#define _Included_com_qnx_tools_utils_spawner_SpawnerInputStream +#ifdef __cplusplus +extern "C" { +#endif +#undef com_qnx_tools_utils_spawner_SpawnerInputStream_SKIP_BUFFER_SIZE +#define com_qnx_tools_utils_spawner_SpawnerInputStream_SKIP_BUFFER_SIZE 2048L +/* Inaccessible static: skipBuffer */ +/* + * Class: org_elipse_cdt_utils_spawner_SpawnerInputStream + * Method: read0 + * Signature: (I[BI)I + */ +JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_read0 + (JNIEnv *, jobject, jint, jbyteArray, jint); + +/* + * Class: org_eclipse_cdt_utils_spawner_SpawnerInputStream + * Method: close0 + * Signature: (I)I + */ +JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_close0 + (JNIEnv *, jobject, jint); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/core/org.eclipse.cdt.core.qnx/library/SpawnerOutputStream.h b/core/org.eclipse.cdt.core.qnx/library/spawner/SpawnerOutputStream.h similarity index 96% rename from core/org.eclipse.cdt.core.qnx/library/SpawnerOutputStream.h rename to core/org.eclipse.cdt.core.qnx/library/spawner/SpawnerOutputStream.h index f835947e060..444d71c698c 100644 --- a/core/org.eclipse.cdt.core.qnx/library/SpawnerOutputStream.h +++ b/core/org.eclipse.cdt.core.qnx/library/spawner/SpawnerOutputStream.h @@ -1,29 +1,29 @@ -/* DO NOT EDIT THIS FILE - it is machine generated */ -#include -/* Header for class com_qnx_tools_utils_spawner_SpawnerOutputStream */ - -#ifndef _Included_com_qnx_tools_utils_spawner_SpawnerOutputStream -#define _Included_com_qnx_tools_utils_spawner_SpawnerOutputStream -#ifdef __cplusplus -extern "C" { -#endif -/* - * Class: org_eclipse_cdt_utils_spawner_SpawnerOutputStream - * Method: write0 - * Signature: (I[BI)I - */ -JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerOutputStream_write0 - (JNIEnv *, jobject, jint, jbyteArray, jint); - -/* - * Class: org_eclipse_cdt_utils_spawner_SpawnerOutputStream - * Method: close0 - * Signature: (I)I - */ -JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerOutputStream_close0 - (JNIEnv *, jobject, jint); - -#ifdef __cplusplus -} -#endif -#endif +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class com_qnx_tools_utils_spawner_SpawnerOutputStream */ + +#ifndef _Included_com_qnx_tools_utils_spawner_SpawnerOutputStream +#define _Included_com_qnx_tools_utils_spawner_SpawnerOutputStream +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: org_eclipse_cdt_utils_spawner_SpawnerOutputStream + * Method: write0 + * Signature: (I[BI)I + */ +JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerOutputStream_write0 + (JNIEnv *, jobject, jint, jbyteArray, jint); + +/* + * Class: org_eclipse_cdt_utils_spawner_SpawnerOutputStream + * Method: close0 + * Signature: (I)I + */ +JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerOutputStream_close0 + (JNIEnv *, jobject, jint); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/core/org.eclipse.cdt.core.qnx/library/spawner/common.mk b/core/org.eclipse.cdt.core.qnx/library/spawner/common.mk new file mode 100644 index 00000000000..40fc9cca6c7 --- /dev/null +++ b/core/org.eclipse.cdt.core.qnx/library/spawner/common.mk @@ -0,0 +1,14 @@ +ifndef QCONFIG +QCONFIG=qconfig.mk +endif +include $(QCONFIG) + +include $(MKFILES_ROOT)/qtargets.mk + +ifeq ($(OS),nto) +ifeq ($(IVEHOME),) +IVEHOME:=/opt/vame/ive/bin +endif +EXTRA_INCVPATH+=$(IVEHOME)/include +endif + diff --git a/core/org.eclipse.cdt.core.qnx/library/iostream.c b/core/org.eclipse.cdt.core.qnx/library/spawner/iostream.c similarity index 96% rename from core/org.eclipse.cdt.core.qnx/library/iostream.c rename to core/org.eclipse.cdt.core.qnx/library/spawner/iostream.c index e947522b48e..a840a1667b1 100644 --- a/core/org.eclipse.cdt.core.qnx/library/iostream.c +++ b/core/org.eclipse.cdt.core.qnx/library/spawner/iostream.c @@ -1,109 +1,109 @@ -/* Copyright, 2002, QNX Software Systems Ltd. All Rights Reserved - - * This source code has been published by QNX Software Systems - * Ltd. (QSSL). However, any use, reproduction, modification, distribution - * or transfer of this software, or any software which includes or is based - * upon any of this code, is only permitted if expressly authorized by a - * written license agreement from QSSL. Contact the QNX Developer's Network - * or contact QSSL's legal department for more information. - * - * - * iostream.c - * - * This is a JNI implementation of access to standard i/o streams - */ -#include -#include -#include -#include -#include - -#include "SpawnerInputStream.h" -#include "SpawnerOutputStream.h" - - -#include "jni.h" - - -void ThrowByName(JNIEnv *env, const char *name, const char *msg); - -#define BUFF_SIZE (1024) - -/* Inaccessible static: skipBuffer */ -/* - * Class: SpawnerInputStream - * Method: read0 - * Signature: (I)I - */ -JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_read0 - (JNIEnv * env, jobject proc, jint fd, jbyteArray buf, jint len) -{ - unsigned char tmpBuf[BUFF_SIZE]; - int nBuffOffset = 0; -// printf("Come to read0\n"); - while(len > nBuffOffset) - { - int nReadLen = min(len - nBuffOffset, BUFF_SIZE); - int nread; - nread = read(fd, tmpBuf, nReadLen); - if(nread > 0) - (*env) -> SetByteArrayRegion(env, buf, nBuffOffset, nReadLen, tmpBuf); - else - break; - nBuffOffset += nread; - if(nread != nReadLen) - break; - } -// printf("Leave read with %i bytes read\n", nBuffOffset); - return nBuffOffset; // This is a real full readed length - -} - -/* - * Class: SpawnerInputStream - * Method: close0 - * Signature: (I)I - */ -JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_close0 - (JNIEnv * env, jobject proc, jint fd) -{ - return close(fd); -} - -/* - * Class: SpawnerOutputStream - * Method: write0 - * Signature: (I[BI)I - */ -JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerOutputStream_write0 - (JNIEnv * env, jobject proc, jint fd, jbyteArray buf, jint len) -{ - unsigned char tmpBuf[BUFF_SIZE]; - int nBuffOffset = 0; -// int rc = 0; -// printf("Come to write0, len = %i\n", len); - while(len > nBuffOffset) - { - int nWriteLen = min(len - nBuffOffset, BUFF_SIZE); - (*env) -> GetByteArrayRegion(env, buf, nBuffOffset, nWriteLen, tmpBuf); -// printf("Write %i bytes; last byte = %#x\n", nWriteLen, (int)tmpBuf[nWriteLen - 1]); - if(nWriteLen != write(fd, tmpBuf, nWriteLen)) - { -// printf("Error: written %i bytes; errno = %i, fd = %i, len = %i ", nWriteLen, errno, fd, rc); - ThrowByName(env, "java/io/IOException", strerror(errno)); - } - nBuffOffset += nWriteLen; - } - return 0; -} - -/* - * Class: SpawnerOutputStream - * Method: close0 - * Signature: (I)I - */ -JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerOutputStream_close0 - (JNIEnv * env, jobject proc, jint fd) -{ - return close(fd); -} +/* Copyright, 2002, QNX Software Systems Ltd. All Rights Reserved + + * This source code has been published by QNX Software Systems + * Ltd. (QSSL). However, any use, reproduction, modification, distribution + * or transfer of this software, or any software which includes or is based + * upon any of this code, is only permitted if expressly authorized by a + * written license agreement from QSSL. Contact the QNX Developer's Network + * or contact QSSL's legal department for more information. + * + * + * iostream.c + * + * This is a JNI implementation of access to standard i/o streams + */ +#include +#include +#include +#include +#include + +#include "SpawnerInputStream.h" +#include "SpawnerOutputStream.h" + + +#include "jni.h" + + +void ThrowByName(JNIEnv *env, const char *name, const char *msg); + +#define BUFF_SIZE (1024) + +/* Inaccessible static: skipBuffer */ +/* + * Class: SpawnerInputStream + * Method: read0 + * Signature: (I)I + */ +JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_read0 + (JNIEnv * env, jobject proc, jint fd, jbyteArray buf, jint len) +{ + unsigned char tmpBuf[BUFF_SIZE]; + int nBuffOffset = 0; +// printf("Come to read0\n"); + while(len > nBuffOffset) + { + int nReadLen = min(len - nBuffOffset, BUFF_SIZE); + int nread; + nread = read(fd, tmpBuf, nReadLen); + if(nread > 0) + (*env) -> SetByteArrayRegion(env, buf, nBuffOffset, nReadLen, tmpBuf); + else + break; + nBuffOffset += nread; + if(nread != nReadLen) + break; + } +// printf("Leave read with %i bytes read\n", nBuffOffset); + return nBuffOffset; // This is a real full readed length + +} + +/* + * Class: SpawnerInputStream + * Method: close0 + * Signature: (I)I + */ +JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_close0 + (JNIEnv * env, jobject proc, jint fd) +{ + return close(fd); +} + +/* + * Class: SpawnerOutputStream + * Method: write0 + * Signature: (I[BI)I + */ +JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerOutputStream_write0 + (JNIEnv * env, jobject proc, jint fd, jbyteArray buf, jint len) +{ + unsigned char tmpBuf[BUFF_SIZE]; + int nBuffOffset = 0; +// int rc = 0; +// printf("Come to write0, len = %i\n", len); + while(len > nBuffOffset) + { + int nWriteLen = min(len - nBuffOffset, BUFF_SIZE); + (*env) -> GetByteArrayRegion(env, buf, nBuffOffset, nWriteLen, tmpBuf); +// printf("Write %i bytes; last byte = %#x\n", nWriteLen, (int)tmpBuf[nWriteLen - 1]); + if(nWriteLen != write(fd, tmpBuf, nWriteLen)) + { +// printf("Error: written %i bytes; errno = %i, fd = %i, len = %i ", nWriteLen, errno, fd, rc); + ThrowByName(env, "java/io/IOException", strerror(errno)); + } + nBuffOffset += nWriteLen; + } + return 0; +} + +/* + * Class: SpawnerOutputStream + * Method: close0 + * Signature: (I)I + */ +JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerOutputStream_close0 + (JNIEnv * env, jobject proc, jint fd) +{ + return close(fd); +} diff --git a/core/org.eclipse.cdt.core.qnx/library/spawner.c b/core/org.eclipse.cdt.core.qnx/library/spawner/spawner.c similarity index 96% rename from core/org.eclipse.cdt.core.qnx/library/spawner.c rename to core/org.eclipse.cdt.core.qnx/library/spawner/spawner.c index 6bc28ba8c49..88500444875 100644 --- a/core/org.eclipse.cdt.core.qnx/library/spawner.c +++ b/core/org.eclipse.cdt.core.qnx/library/spawner/spawner.c @@ -1,257 +1,257 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "Spawner.h" - -typedef JNIEXPORT void * (JNICALL * JVM_GetThreadInterruptEvent)(); -typedef JNIEXPORT char * (JNICALL * JVM_NativePath)(const char *); - -void ThrowByName(JNIEnv *env, const char *name, const char *msg); -void * GetJVMProc(char * vmlib, char * procName); - -static void * hVM = NULL; /* Java Virtual Machine handler. */ - -JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec0 - (JNIEnv * env, jobject proc, jobjectArray cmdArray, jobjectArray envp, jstring dir, jintArray channels) -{ - int fd_map[3]; /* File descriptors. */ - int fd_ret[3]; /* File descriptors that we return to Java. */ - int fd[2]; /* Pipe open structure. */ - int i; - int nParms = 0;/* Number of parameters. */ - int nEnvs = 0;/* Number of environment variables. */ - char ** pParms = NULL; /* Parameters. */ - char ** pEnvs = NULL; /* Environment variables. */ - char * pCommand = NULL; /* Command to execute. */ - char cwd[PATH_MAX + 1]; /* Current working directory. */ - pid_t pid; /* Process ID. */ - struct inheritance inherit; - - if ((cmdArray == NULL) || ((nParms = (*env)->GetArrayLength(env, cmdArray)) == 0)) - ThrowByName(env, "java/lang/IOException", "No command line specified"); - - for (i = 0; i < 3; ++i) { - if (EOK != pipe(fd)) - ThrowByName(env, "java/io/IOException", "Cannot create pipe for spawner"); - if (0 == i) { - fd_map[i] = fd[0]; - fd_ret[i] = fd[1]; - } else { - fd_map[i] = fd[1]; - fd_ret[i] = fd[0]; - } - } - - if (nParms > 0) { - pParms = malloc(sizeof(char *) * (nParms + 1)); - for (i = 0; i < nParms; ++i) { - jobject item = (*env)->GetObjectArrayElement(env, cmdArray, i); - const char *str = (*env)->GetStringUTFChars(env, item, 0); - if (i == 0) - pCommand = strdup(str); - pParms[i] = strdup(str); - (*env)->ReleaseStringUTFChars(env, item, str); - } - pParms[i] = NULL; - } - - nEnvs = (*env) -> GetArrayLength(env, envp); - if (nEnvs > 0) { - pEnvs = malloc(sizeof(char *) * (nEnvs + 1)); - for (i = 0; i < nEnvs; ++i) { - jobject item = (*env)->GetObjectArrayElement(env, envp, i); - const char *str = (*env)->GetStringUTFChars(env, item, 0); - pEnvs[i] = strdup(str); - (*env)->ReleaseStringUTFChars(env, item, str); - } - pEnvs[i] = NULL; - } - - if (dir != 0) { - char *item = (char *)(*env)->GetStringUTFChars(env, dir, 0); - getcwd(cwd, sizeof(cwd)); - chdir(item); - (*env)->ReleaseStringUTFChars(env, dir, item); - } - - /* Nothing for now. */ - memset(&inherit, 0, sizeof(inherit)); - inherit.flags = SPAWN_SETGROUP; - inherit.pgroup = SPAWN_NEWPGROUP; - - pid = spawnp(pCommand, 3, fd_map, &inherit, pParms, pEnvs); - - if (dir != 0) /* Restore working directory. */ - chdir(cwd); - - for (i = 0; i < 3; ++i) { - close(fd_map[i]); - } - - if (-1 == pid) { /* Failed - close pipes. */ - for (i = 0; i < 3; ++i) { - close(fd_ret[i]); - } - } else { /* Success - return pipes to Java. */ - (*env) -> SetIntArrayRegion(env, channels, 0, 3, fd_ret); - } - - /* Free Parameters. */ - if (pParms != NULL) { - int j; - for (j = 0; pParms[j] != NULL; j++) { - if (pParms[j] != NULL) { - free(pParms[j]); - } - } - free(pParms); - } - - /* Free Environment variables. */ - if (pEnvs != NULL) { - int j; - for (j = 0; pEnvs[j] != NULL; j++) { - if (pEnvs[j] != NULL) { - free(pEnvs[j]); - } - } - free(pEnvs); - } - - /* Free Command to execute. */ - if (pCommand != NULL) { - free(pCommand); - } - - return pid; - -} - -JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec1 - (JNIEnv * env, jobject proc, jobjectArray cmdArray, jobjectArray envp, jstring dir) -{ - int i; - int nParms = 0;// Number of parameters - int nEnvs = 0;// Number of environment variables - char ** pParms = NULL; // Parameters - char ** pEnvs = NULL; // Environment variables - char * pCommand = NULL; // Command to execute - char * pwd = 0; // Process working directory - char cwd[PATH_MAX + 1]; // Current working directory - pid_t pid; // Process ID - struct inheritance inherit; - - if ((cmdArray == 0) || ((nParms = (*env) -> GetArrayLength(env, cmdArray)) == 0)) - ThrowByName(env, "java/lang/NullPointerException", "No command line specified"); - - if(nParms > 0) - { - pParms = malloc(sizeof(char *) * (nParms + 1)); - for(i = 0; i < nParms; ++i) - { - jobject item = (*env) -> GetObjectArrayElement(env, cmdArray, i); - const char * str = (*env) -> GetStringUTFChars(env, item, 0); - if(i == 0) - pCommand = strdup(str); - pParms[i] = strdup(str); - (*env) -> ReleaseStringUTFChars(env, item, str); - } - pParms[i] = NULL; - } - nEnvs = (*env) -> GetArrayLength(env, envp); - if(nEnvs > 0) - { - pEnvs = malloc(sizeof(char *) * (nEnvs + 1)); - for(i = 0; i < nEnvs; ++i) - { - jobject item = (*env) -> GetObjectArrayElement(env, envp, i); - const char * str = (*env) -> GetStringUTFChars(env, item, 0); - pEnvs[i] = strdup(str); - (*env) -> ReleaseStringUTFChars(env, item, str); - } - pEnvs[i] = NULL; - } - - if (dir != 0) - { - char * item; - pwd = strdup(item = (char *)(*env) -> GetStringUTFChars(env, dir, 0)); - getcwd(cwd, sizeof(cwd)); - chdir(pwd); - (*env) -> ReleaseStringUTFChars(env, dir, item); - } - - // Nothing for now - memset(&inherit, 0, sizeof(inherit)); - inherit.flags = SPAWN_SETGROUP; - inherit.pgroup = SPAWN_NEWPGROUP; - - - pid = spawnp(pCommand, 0, NULL, &inherit, pParms, pEnvs); - - - if(dir != 0) // Restore working directory - chdir(cwd); - - return pid; - -} - -/* - * Class: com_qnx_tools_utils_spawner_Spawner - * Method: raise - * Signature: (II)I - */ -JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_raise - (JNIEnv * env, jobject proc, jint pid, jint sig) -{ - return kill(pid, sig); -} - -/* - * Class: com_qnx_tools_utils_spawner_Spawner - * Method: waitFor - * Signature: (I)I - */ -JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_waitFor - (JNIEnv * env, jobject proc, jint pid) -{ - int stat_loc; - return (waitpid(pid, &stat_loc, WEXITED)); -} - - -// Utilities - -void ThrowByName(JNIEnv *env, const char *name, const char *msg) -{ - jclass cls = (*env)->FindClass(env, name); - - if (cls != 0) /* Otherwise an exception has already been thrown */ - (*env)->ThrowNew(env, cls, msg); - - /* It's a good practice to clean up the local references. */ - (*env)->DeleteLocalRef(env, cls); -} - - - -void * GetJVMProc(char * vmlib, char * procName) -{ - if(NULL == vmlib) - vmlib = "libj9vm14.so"; - if((NULL == hVM) || (NULL == procName)) - { - if(NULL == (hVM = dlopen(vmlib, 0))) - return NULL; - } - return dlsym(hVM, procName); -} +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "Spawner.h" + +typedef JNIEXPORT void * (JNICALL * JVM_GetThreadInterruptEvent)(); +typedef JNIEXPORT char * (JNICALL * JVM_NativePath)(const char *); + +void ThrowByName(JNIEnv *env, const char *name, const char *msg); +void * GetJVMProc(char * vmlib, char * procName); + +static void * hVM = NULL; /* Java Virtual Machine handler. */ + +JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec0 + (JNIEnv * env, jobject proc, jobjectArray cmdArray, jobjectArray envp, jstring dir, jintArray channels) +{ + int fd_map[3]; /* File descriptors. */ + int fd_ret[3]; /* File descriptors that we return to Java. */ + int fd[2]; /* Pipe open structure. */ + int i; + int nParms = 0;/* Number of parameters. */ + int nEnvs = 0;/* Number of environment variables. */ + char ** pParms = NULL; /* Parameters. */ + char ** pEnvs = NULL; /* Environment variables. */ + char * pCommand = NULL; /* Command to execute. */ + char cwd[PATH_MAX + 1]; /* Current working directory. */ + pid_t pid; /* Process ID. */ + struct inheritance inherit; + + if ((cmdArray == NULL) || ((nParms = (*env)->GetArrayLength(env, cmdArray)) == 0)) + ThrowByName(env, "java/lang/IOException", "No command line specified"); + + for (i = 0; i < 3; ++i) { + if (EOK != pipe(fd)) + ThrowByName(env, "java/io/IOException", "Cannot create pipe for spawner"); + if (0 == i) { + fd_map[i] = fd[0]; + fd_ret[i] = fd[1]; + } else { + fd_map[i] = fd[1]; + fd_ret[i] = fd[0]; + } + } + + if (nParms > 0) { + pParms = malloc(sizeof(char *) * (nParms + 1)); + for (i = 0; i < nParms; ++i) { + jobject item = (*env)->GetObjectArrayElement(env, cmdArray, i); + const char *str = (*env)->GetStringUTFChars(env, item, 0); + if (i == 0) + pCommand = strdup(str); + pParms[i] = strdup(str); + (*env)->ReleaseStringUTFChars(env, item, str); + } + pParms[i] = NULL; + } + + nEnvs = (*env) -> GetArrayLength(env, envp); + if (nEnvs > 0) { + pEnvs = malloc(sizeof(char *) * (nEnvs + 1)); + for (i = 0; i < nEnvs; ++i) { + jobject item = (*env)->GetObjectArrayElement(env, envp, i); + const char *str = (*env)->GetStringUTFChars(env, item, 0); + pEnvs[i] = strdup(str); + (*env)->ReleaseStringUTFChars(env, item, str); + } + pEnvs[i] = NULL; + } + + if (dir != 0) { + char *item = (char *)(*env)->GetStringUTFChars(env, dir, 0); + getcwd(cwd, sizeof(cwd)); + chdir(item); + (*env)->ReleaseStringUTFChars(env, dir, item); + } + + /* Nothing for now. */ + memset(&inherit, 0, sizeof(inherit)); + inherit.flags = SPAWN_SETGROUP; + inherit.pgroup = SPAWN_NEWPGROUP; + + pid = spawnp(pCommand, 3, fd_map, &inherit, pParms, pEnvs); + + if (dir != 0) /* Restore working directory. */ + chdir(cwd); + + for (i = 0; i < 3; ++i) { + close(fd_map[i]); + } + + if (-1 == pid) { /* Failed - close pipes. */ + for (i = 0; i < 3; ++i) { + close(fd_ret[i]); + } + } else { /* Success - return pipes to Java. */ + (*env) -> SetIntArrayRegion(env, channels, 0, 3, fd_ret); + } + + /* Free Parameters. */ + if (pParms != NULL) { + int j; + for (j = 0; pParms[j] != NULL; j++) { + if (pParms[j] != NULL) { + free(pParms[j]); + } + } + free(pParms); + } + + /* Free Environment variables. */ + if (pEnvs != NULL) { + int j; + for (j = 0; pEnvs[j] != NULL; j++) { + if (pEnvs[j] != NULL) { + free(pEnvs[j]); + } + } + free(pEnvs); + } + + /* Free Command to execute. */ + if (pCommand != NULL) { + free(pCommand); + } + + return pid; + +} + +JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec1 + (JNIEnv * env, jobject proc, jobjectArray cmdArray, jobjectArray envp, jstring dir) +{ + int i; + int nParms = 0;// Number of parameters + int nEnvs = 0;// Number of environment variables + char ** pParms = NULL; // Parameters + char ** pEnvs = NULL; // Environment variables + char * pCommand = NULL; // Command to execute + char * pwd = 0; // Process working directory + char cwd[PATH_MAX + 1]; // Current working directory + pid_t pid; // Process ID + struct inheritance inherit; + + if ((cmdArray == 0) || ((nParms = (*env) -> GetArrayLength(env, cmdArray)) == 0)) + ThrowByName(env, "java/lang/NullPointerException", "No command line specified"); + + if(nParms > 0) + { + pParms = malloc(sizeof(char *) * (nParms + 1)); + for(i = 0; i < nParms; ++i) + { + jobject item = (*env) -> GetObjectArrayElement(env, cmdArray, i); + const char * str = (*env) -> GetStringUTFChars(env, item, 0); + if(i == 0) + pCommand = strdup(str); + pParms[i] = strdup(str); + (*env) -> ReleaseStringUTFChars(env, item, str); + } + pParms[i] = NULL; + } + nEnvs = (*env) -> GetArrayLength(env, envp); + if(nEnvs > 0) + { + pEnvs = malloc(sizeof(char *) * (nEnvs + 1)); + for(i = 0; i < nEnvs; ++i) + { + jobject item = (*env) -> GetObjectArrayElement(env, envp, i); + const char * str = (*env) -> GetStringUTFChars(env, item, 0); + pEnvs[i] = strdup(str); + (*env) -> ReleaseStringUTFChars(env, item, str); + } + pEnvs[i] = NULL; + } + + if (dir != 0) + { + char * item; + pwd = strdup(item = (char *)(*env) -> GetStringUTFChars(env, dir, 0)); + getcwd(cwd, sizeof(cwd)); + chdir(pwd); + (*env) -> ReleaseStringUTFChars(env, dir, item); + } + + // Nothing for now + memset(&inherit, 0, sizeof(inherit)); + inherit.flags = SPAWN_SETGROUP; + inherit.pgroup = SPAWN_NEWPGROUP; + + + pid = spawnp(pCommand, 0, NULL, &inherit, pParms, pEnvs); + + + if(dir != 0) // Restore working directory + chdir(cwd); + + return pid; + +} + +/* + * Class: com_qnx_tools_utils_spawner_Spawner + * Method: raise + * Signature: (II)I + */ +JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_raise + (JNIEnv * env, jobject proc, jint pid, jint sig) +{ + return kill(pid, sig); +} + +/* + * Class: com_qnx_tools_utils_spawner_Spawner + * Method: waitFor + * Signature: (I)I + */ +JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_waitFor + (JNIEnv * env, jobject proc, jint pid) +{ + int stat_loc; + return (waitpid(pid, &stat_loc, WEXITED)); +} + + +// Utilities + +void ThrowByName(JNIEnv *env, const char *name, const char *msg) +{ + jclass cls = (*env)->FindClass(env, name); + + if (cls != 0) /* Otherwise an exception has already been thrown */ + (*env)->ThrowNew(env, cls, msg); + + /* It's a good practice to clean up the local references. */ + (*env)->DeleteLocalRef(env, cls); +} + + + +void * GetJVMProc(char * vmlib, char * procName) +{ + if(NULL == vmlib) + vmlib = "libj9vm14.so"; + if((NULL == hVM) || (NULL == procName)) + { + if(NULL == (hVM = dlopen(vmlib, 0))) + return NULL; + } + return dlsym(hVM, procName); +} diff --git a/core/org.eclipse.cdt.core.qnx/library/spawner/x86/Makefile b/core/org.eclipse.cdt.core.qnx/library/spawner/x86/Makefile new file mode 100644 index 00000000000..6a18617612e --- /dev/null +++ b/core/org.eclipse.cdt.core.qnx/library/spawner/x86/Makefile @@ -0,0 +1,8 @@ +LIST=VARIANT +ifndef QRECURSE +QRECURSE=recurse.mk +ifdef QCONFIG +QRDIR=$(dir $(QCONFIG)) +endif +endif +include $(QRDIR)$(QRECURSE) diff --git a/core/org.eclipse.cdt.core.qnx/library/spawner/x86/so/Makefile b/core/org.eclipse.cdt.core.qnx/library/spawner/x86/so/Makefile new file mode 100644 index 00000000000..cc399272607 --- /dev/null +++ b/core/org.eclipse.cdt.core.qnx/library/spawner/x86/so/Makefile @@ -0,0 +1 @@ +include ../../common.mk diff --git a/core/org.eclipse.cdt.core.qnx/library/x86/so/.cvsignore b/core/org.eclipse.cdt.core.qnx/library/x86/so/.cvsignore deleted file mode 100644 index dea3304418e..00000000000 --- a/core/org.eclipse.cdt.core.qnx/library/x86/so/.cvsignore +++ /dev/null @@ -1,4 +0,0 @@ -iostream.o -libspawner.so -libspawnerS.a -spawner.o