src/solaris/native/sun/nio/fs/UnixNativeDispatcher.c

Print this page




 291     jbyteArray result = NULL;
 292     char buf[PATH_MAX+1];
 293 
 294     /* EINTR not listed as a possible error */
 295     char* cwd = getcwd(buf, sizeof(buf));
 296     if (cwd == NULL) {
 297         throwUnixException(env, errno);
 298     } else {
 299         jsize len = (jsize)strlen(buf);
 300         result = (*env)->NewByteArray(env, len);
 301         if (result != NULL) {
 302             (*env)->SetByteArrayRegion(env, result, 0, len, (jbyte*)buf);
 303         }
 304     }
 305     return result;
 306 }
 307 
 308 JNIEXPORT jbyteArray
 309 Java_sun_nio_fs_UnixNativeDispatcher_strerror(JNIEnv* env, jclass this, jint error)
 310 {
 311     char* msg;
 312     jsize len;
 313     jbyteArray bytes;
 314 
 315 #ifdef _AIX
 316     /* strerror() is not thread-safe on AIX so we have to use strerror_r() */
 317     char buffer[256];
 318     msg = (strerror_r((int)error, buffer, 256) == 0) ? buffer : "Error while calling strerror_r";
 319 #else
 320     msg = strerror((int)error);
 321 #endif
 322     len = strlen(msg);
 323     bytes = (*env)->NewByteArray(env, len);
 324     if (bytes != NULL) {
 325         (*env)->SetByteArrayRegion(env, bytes, 0, len, (jbyte*)msg);
 326     }
 327     return bytes;
 328 }
 329 
 330 JNIEXPORT jint
 331 Java_sun_nio_fs_UnixNativeDispatcher_dup(JNIEnv* env, jclass this, jint fd) {
 332 
 333     int res = -1;
 334 
 335     RESTARTABLE(dup((int)fd), res);
 336     if (res == -1) {
 337         throwUnixException(env, errno);
 338     }
 339     return (jint)res;
 340 }
 341 
 342 JNIEXPORT jlong JNICALL
 343 Java_sun_nio_fs_UnixNativeDispatcher_fopen0(JNIEnv* env, jclass this,
 344     jlong pathAddress, jlong modeAddress)
 345 {




 291     jbyteArray result = NULL;
 292     char buf[PATH_MAX+1];
 293 
 294     /* EINTR not listed as a possible error */
 295     char* cwd = getcwd(buf, sizeof(buf));
 296     if (cwd == NULL) {
 297         throwUnixException(env, errno);
 298     } else {
 299         jsize len = (jsize)strlen(buf);
 300         result = (*env)->NewByteArray(env, len);
 301         if (result != NULL) {
 302             (*env)->SetByteArrayRegion(env, result, 0, len, (jbyte*)buf);
 303         }
 304     }
 305     return result;
 306 }
 307 
 308 JNIEXPORT jbyteArray
 309 Java_sun_nio_fs_UnixNativeDispatcher_strerror(JNIEnv* env, jclass this, jint error)
 310 {
 311     char tmpbuf[1024];
 312     jsize len;
 313     jbyteArray bytes;
 314 
 315     getErrorString((int)errno, tmpbuf, sizeof(tmpbuf));
 316     len = strlen(tmpbuf);






 317     bytes = (*env)->NewByteArray(env, len);
 318     if (bytes != NULL) {
 319         (*env)->SetByteArrayRegion(env, bytes, 0, len, (jbyte*)tmpbuf);
 320     }
 321     return bytes;
 322 }
 323 
 324 JNIEXPORT jint
 325 Java_sun_nio_fs_UnixNativeDispatcher_dup(JNIEnv* env, jclass this, jint fd) {
 326 
 327     int res = -1;
 328 
 329     RESTARTABLE(dup((int)fd), res);
 330     if (res == -1) {
 331         throwUnixException(env, errno);
 332     }
 333     return (jint)res;
 334 }
 335 
 336 JNIEXPORT jlong JNICALL
 337 Java_sun_nio_fs_UnixNativeDispatcher_fopen0(JNIEnv* env, jclass this,
 338     jlong pathAddress, jlong modeAddress)
 339 {