jdk/src/java.base/unix/native/libjava/ProcessImpl_md.c
changeset 30784 28105f71beb2
parent 29724 638809ff54f3
child 30899 d2408e757489
equal deleted inserted replaced
30783:e664daa546bb 30784:28105f71beb2
   284 {
   284 {
   285     if (parr != NULL)
   285     if (parr != NULL)
   286         (*env)->ReleaseByteArrayElements(env, arr, (jbyte*) parr, JNI_ABORT);
   286         (*env)->ReleaseByteArrayElements(env, arr, (jbyte*) parr, JNI_ABORT);
   287 }
   287 }
   288 
   288 
       
   289 #define IOE_FORMAT "error=%d, %s"
       
   290 
   289 static void
   291 static void
   290 throwIOException(JNIEnv *env, int errnum, const char *defaultDetail)
   292 throwIOException(JNIEnv *env, int errnum, const char *defaultDetail)
   291 {
   293 {
   292     static const char * const format = "error=%d, %s";
       
   293     const char *detail = defaultDetail;
   294     const char *detail = defaultDetail;
   294     char *errmsg;
   295     char *errmsg;
       
   296     size_t fmtsize;
   295     jstring s;
   297     jstring s;
   296 
   298 
   297     if (errnum != 0) {
   299     if (errnum != 0) {
   298         const char *s = strerror(errnum);
   300         const char *s = strerror(errnum);
   299         if (strcmp(s, "Unknown error") != 0)
   301         if (strcmp(s, "Unknown error") != 0)
   300             detail = s;
   302             detail = s;
   301     }
   303     }
   302     /* ASCII Decimal representation uses 2.4 times as many bits as binary. */
   304     /* ASCII Decimal representation uses 2.4 times as many bits as binary. */
   303     errmsg = NEW(char, strlen(format) + strlen(detail) + 3 * sizeof(errnum));
   305     fmtsize = sizeof(IOE_FORMAT) + strlen(detail) + 3 * sizeof(errnum);
       
   306     errmsg = NEW(char, fmtsize);
   304     if (errmsg == NULL)
   307     if (errmsg == NULL)
   305         return;
   308         return;
   306 
   309 
   307     sprintf(errmsg, format, errnum, detail);
   310     snprintf(errmsg, fmtsize, IOE_FORMAT, errnum, detail);
   308     s = JNU_NewStringPlatform(env, errmsg);
   311     s = JNU_NewStringPlatform(env, errmsg);
   309     if (s != NULL) {
   312     if (s != NULL) {
   310         jobject x = JNU_NewObjectByName(env, "java/io/IOException",
   313         jobject x = JNU_NewObjectByName(env, "java/io/IOException",
   311                                         "(Ljava/lang/String;)V", s);
   314                                         "(Ljava/lang/String;)V", s);
   312         if (x != NULL)
   315         if (x != NULL)