| /******************************************************************************* |
| * Copyright (c) 2002 - 2005 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 |
| *******************************************************************************/ |
| #include <jni.h> |
| #include <stdio.h> |
| #include <PTYInputStream.h> |
| #include <PTYOutputStream.h> |
| #include <unistd.h> |
| |
| /* Header for class _org_eclipse_cdt_utils_pty_PTYInputStream */ |
| /* Header for class _org_eclipse_cdt_utils_pty_PTYOutputStream */ |
| |
| /* |
| * Class: org_eclipse_cdt_utils_pty_PTYInputStream |
| * Method: read0 |
| * Signature: (I)I |
| */ |
| JNIEXPORT jint JNICALL |
| Java_org_eclipse_cdt_utils_pty_PTYInputStream_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 */ |
| /* Ignore the error for now, the debugger will attempt |
| * to close this multiple time. */ |
| #if 0 |
| jclass exception = (*env)->FindClass(env, "java/io/IOException"); |
| if (exception == NULL) { |
| /* Give up. */ |
| return -1; |
| } |
| (*env)->ThrowNew(env, exception, "read error"); |
| #endif |
| } |
| |
| return status; |
| } |
| |
| |
| /* |
| * Class: org_eclipse_cdt_utils_pty_PTYInputStream |
| * Method: close0 |
| * Signature: (I)I |
| */ |
| JNIEXPORT jint JNICALL |
| Java_org_eclipse_cdt_utils_pty_PTYInputStream_close0(JNIEnv * env, |
| jobject jobj, |
| jint fd) |
| { |
| return close(fd); |
| } |
| |
| /* |
| * Class: org_eclipse_cdt_utils_pty_PTYOutputStream |
| * Method: write0 |
| * Signature: (II)I |
| */ |
| JNIEXPORT jint JNICALL |
| Java_org_eclipse_cdt_utils_pty_PTYOutputStream_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_pty_PTYOutputStream |
| * Method: close0 |
| * Signature: (I)I |
| */ |
| JNIEXPORT jint JNICALL |
| Java_org_eclipse_cdt_utils_pty_PTYOutputStream_close0(JNIEnv * env, |
| jobject jobj, |
| jint fd) |
| { |
| return close(fd); |
| } |