src/solaris/native/java/lang/UNIXProcess_md.c

Print this page




 275 static const char *
 276 getBytes(JNIEnv *env, jbyteArray arr)
 277 {
 278     return arr == NULL ? NULL :
 279         (const char*) (*env)->GetByteArrayElements(env, arr, NULL);
 280 }
 281 
 282 static void
 283 releaseBytes(JNIEnv *env, jbyteArray arr, const char* parr)
 284 {
 285     if (parr != NULL)
 286         (*env)->ReleaseByteArrayElements(env, arr, (jbyte*) parr, JNI_ABORT);
 287 }
 288 
 289 static void
 290 throwIOException(JNIEnv *env, int errnum, const char *defaultDetail)
 291 {
 292     static const char * const format = "error=%d, %s";
 293     const char *detail = defaultDetail;
 294     char *errmsg;

 295     jstring s;
 296 
 297     if (errnum != 0) {
 298         const char *s = strerror(errnum);
 299         if (strcmp(s, "Unknown error") != 0)
 300             detail = s;
 301     }
 302     /* ASCII Decimal representation uses 2.4 times as many bits as binary. */
 303     errmsg = NEW(char, strlen(format) + strlen(detail) + 3 * sizeof(errnum));
 304     if (errmsg == NULL)
 305         return;
 306 
 307     sprintf(errmsg, format, errnum, detail);
 308     s = JNU_NewStringPlatform(env, errmsg);
 309     if (s != NULL) {
 310         jobject x = JNU_NewObjectByName(env, "java/io/IOException",
 311                                         "(Ljava/lang/String;)V", s);
 312         if (x != NULL)
 313             (*env)->Throw(env, x);
 314     }
 315     free(errmsg);
 316 }
 317 
 318 #ifdef DEBUG_PROCESS
 319 /* Debugging process code is difficult; where to write debug output? */
 320 static void




 275 static const char *
 276 getBytes(JNIEnv *env, jbyteArray arr)
 277 {
 278     return arr == NULL ? NULL :
 279         (const char*) (*env)->GetByteArrayElements(env, arr, NULL);
 280 }
 281 
 282 static void
 283 releaseBytes(JNIEnv *env, jbyteArray arr, const char* parr)
 284 {
 285     if (parr != NULL)
 286         (*env)->ReleaseByteArrayElements(env, arr, (jbyte*) parr, JNI_ABORT);
 287 }
 288 
 289 static void
 290 throwIOException(JNIEnv *env, int errnum, const char *defaultDetail)
 291 {
 292     static const char * const format = "error=%d, %s";
 293     const char *detail = defaultDetail;
 294     char *errmsg;
 295     char tmpbuf[1024];
 296     jstring s;
 297 
 298     if (errnum != 0) {
 299         int ret = getErrorString(errnum, tmpbuf, sizeof(tmpbuf));
 300         if (ret != EINVAL)
 301             detail = tmpbuf;
 302     }
 303     /* ASCII Decimal representation uses 2.4 times as many bits as binary. */
 304     errmsg = NEW(char, strlen(format) + strlen(detail) + 3 * sizeof(errnum));
 305     if (errmsg == NULL)
 306         return;
 307 
 308     sprintf(errmsg, format, errnum, detail);
 309     s = JNU_NewStringPlatform(env, errmsg);
 310     if (s != NULL) {
 311         jobject x = JNU_NewObjectByName(env, "java/io/IOException",
 312                                         "(Ljava/lang/String;)V", s);
 313         if (x != NULL)
 314             (*env)->Throw(env, x);
 315     }
 316     free(errmsg);
 317 }
 318 
 319 #ifdef DEBUG_PROCESS
 320 /* Debugging process code is difficult; where to write debug output? */
 321 static void