src/java.base/unix/native/libjava/ProcessImpl_md.c

Print this page




 231 {
 232     return arr == NULL ? NULL :
 233         (const char*) (*env)->GetByteArrayElements(env, arr, NULL);
 234 }
 235 
 236 static void
 237 releaseBytes(JNIEnv *env, jbyteArray arr, const char* parr)
 238 {
 239     if (parr != NULL)
 240         (*env)->ReleaseByteArrayElements(env, arr, (jbyte*) parr, JNI_ABORT);
 241 }
 242 
 243 #define IOE_FORMAT "error=%d, %s"
 244 
 245 static void
 246 throwIOException(JNIEnv *env, int errnum, const char *defaultDetail)
 247 {
 248     const char *detail = defaultDetail;
 249     char *errmsg;
 250     size_t fmtsize;

 251     jstring s;
 252 
 253     if (errnum != 0) {
 254         const char *s = strerror(errnum);
 255         if (strcmp(s, "Unknown error") != 0)
 256             detail = s;
 257     }
 258     /* ASCII Decimal representation uses 2.4 times as many bits as binary. */
 259     fmtsize = sizeof(IOE_FORMAT) + strlen(detail) + 3 * sizeof(errnum);
 260     errmsg = NEW(char, fmtsize);
 261     if (errmsg == NULL)
 262         return;
 263 
 264     snprintf(errmsg, fmtsize, IOE_FORMAT, errnum, detail);
 265     s = JNU_NewStringPlatform(env, errmsg);
 266     if (s != NULL) {
 267         jobject x = JNU_NewObjectByName(env, "java/io/IOException",
 268                                         "(Ljava/lang/String;)V", s);
 269         if (x != NULL)
 270             (*env)->Throw(env, x);
 271     }
 272     free(errmsg);
 273 }
 274 
 275 #ifdef DEBUG_PROCESS
 276 /* Debugging process code is difficult; where to write debug output? */




 231 {
 232     return arr == NULL ? NULL :
 233         (const char*) (*env)->GetByteArrayElements(env, arr, NULL);
 234 }
 235 
 236 static void
 237 releaseBytes(JNIEnv *env, jbyteArray arr, const char* parr)
 238 {
 239     if (parr != NULL)
 240         (*env)->ReleaseByteArrayElements(env, arr, (jbyte*) parr, JNI_ABORT);
 241 }
 242 
 243 #define IOE_FORMAT "error=%d, %s"
 244 
 245 static void
 246 throwIOException(JNIEnv *env, int errnum, const char *defaultDetail)
 247 {
 248     const char *detail = defaultDetail;
 249     char *errmsg;
 250     size_t fmtsize;
 251     char tmpbuf[1024];
 252     jstring s;
 253 
 254     if (errnum != 0) {
 255         int ret = getErrorString(errnum, tmpbuf, sizeof(tmpbuf));
 256         if (ret != EINVAL)
 257             detail = tmpbuf;
 258     }
 259     /* ASCII Decimal representation uses 2.4 times as many bits as binary. */
 260     fmtsize = sizeof(IOE_FORMAT) + strlen(detail) + 3 * sizeof(errnum);
 261     errmsg = NEW(char, fmtsize);
 262     if (errmsg == NULL)
 263         return;
 264 
 265     snprintf(errmsg, fmtsize, IOE_FORMAT, errnum, detail);
 266     s = JNU_NewStringPlatform(env, errmsg);
 267     if (s != NULL) {
 268         jobject x = JNU_NewObjectByName(env, "java/io/IOException",
 269                                         "(Ljava/lang/String;)V", s);
 270         if (x != NULL)
 271             (*env)->Throw(env, x);
 272     }
 273     free(errmsg);
 274 }
 275 
 276 #ifdef DEBUG_PROCESS
 277 /* Debugging process code is difficult; where to write debug output? */