/******************************************************************************* | |
* Copyright (c) 2002, 2006 QNX Software Systems and others. | |
* All rights reserved. This program and the accompanying materials | |
* are made available under the terms of the Eclipse Public License v1.0 | |
* which accompanies this distribution, and is available at | |
* http://www.eclipse.org/legal/epl-v10.html | |
* | |
* Contributors: | |
* QNX Software Systems - initial API and implementation | |
* Wind River Systems, Inc. | |
*******************************************************************************/ | |
#include <jni.h> | |
#include <stdio.h> | |
#include <SpawnerInputStream.h> | |
#include <SpawnerOutputStream.h> | |
#include <unistd.h> | |
/* Header for class _org_eclipse_cdt_utils_spawner_SpawnerInputStream */ | |
/* Header for class _org_eclipse_cdt_utils_spawner_SpawnerOutputStream */ | |
/* | |
* Class: org_eclipse_cdt_utils_spawner_SpawnerInputStream | |
* Method: read0 | |
* Signature: (I)I | |
*/ | |
JNIEXPORT jint JNICALL | |
Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_read0(JNIEnv * env, | |
jobject jobj, | |
jint jfd, | |
jbyteArray buf, | |
jint buf_len) | |
{ | |
int fd; | |
int status; | |
jbyte *data; | |
int data_len; | |
data = (*env)->GetByteArrayElements(env, buf, 0); | |
data_len = buf_len; | |
fd = jfd; | |
status = read( fd, data, data_len ); | |
(*env)->ReleaseByteArrayElements(env, buf, data, 0); | |
if (status == 0) { | |
/* EOF. */ | |
status = -1; | |
} else if (status == -1) { | |
/* Error, toss an exception */ | |
jclass exception = (*env)->FindClass(env, "java/io/IOException"); | |
if (exception == NULL) { | |
/* Give up. */ | |
return -1; | |
} | |
(*env)->ThrowNew(env, exception, "read error"); | |
} | |
return status; | |
} | |
/* | |
* Class: org_eclipse_cdt_utils_spawner_SpawnerInputStream | |
* Method: close0 | |
* Signature: (I)I | |
*/ | |
JNIEXPORT jint JNICALL | |
Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_close0(JNIEnv * env, | |
jobject jobj, | |
jint fd) | |
{ | |
return close(fd); | |
} | |
/* | |
* Class: org_eclipse_cdt_utils_spawner_SpawnerOutputStream | |
* Method: write0 | |
* Signature: (II)I | |
*/ | |
JNIEXPORT jint JNICALL | |
Java_org_eclipse_cdt_utils_spawner_SpawnerOutputStream_write0(JNIEnv * env, | |
jobject jobj, | |
jint jfd, | |
jbyteArray buf, | |
jint buf_len) | |
{ | |
int status; | |
int fd; | |
jbyte *data; | |
int data_len; | |
data = (*env)->GetByteArrayElements(env, buf, 0); | |
data_len = buf_len; | |
fd = jfd; | |
status = write(fd, data, data_len); | |
(*env)->ReleaseByteArrayElements(env, buf, data, 0); | |
return status; | |
} | |
/* | |
* Class: org_eclipse_cdt_utils_spawner_SpawnerOutputStream | |
* Method: close0 | |
* Signature: (I)I | |
*/ | |
JNIEXPORT jint JNICALL | |
Java_org_eclipse_cdt_utils_spawner_SpawnerOutputStream_close0(JNIEnv * env, | |
jobject jobj, | |
jint fd) | |
{ | |
return close(fd); | |
} |