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 { |