< prev index next >

src/java.base/windows/native/libnio/fs/WindowsNativeDispatcher.c

Print this page
rev 52404 : 8213366: windows: avoid handle leak in Java_sun_nio_fs_WindowsNativeDispatcher_FindFirstFile0


 294 }
 295 
 296 JNIEXPORT void JNICALL
 297 Java_sun_nio_fs_WindowsNativeDispatcher_CloseHandle(JNIEnv* env, jclass this,
 298     jlong handle)
 299 {
 300     HANDLE h = (HANDLE)jlong_to_ptr(handle);
 301     CloseHandle(h);
 302 }
 303 
 304 JNIEXPORT void JNICALL
 305 Java_sun_nio_fs_WindowsNativeDispatcher_FindFirstFile0(JNIEnv* env, jclass this,
 306     jlong address, jobject obj)
 307 {
 308     WIN32_FIND_DATAW data;
 309     LPCWSTR lpFileName = jlong_to_ptr(address);
 310 
 311     HANDLE handle = FindFirstFileW(lpFileName, &data);
 312     if (handle != INVALID_HANDLE_VALUE) {
 313         jstring name = (*env)->NewString(env, data.cFileName, (jsize)wcslen(data.cFileName));
 314         if (name == NULL)

 315             return;

 316         (*env)->SetLongField(env, obj, findFirst_handle, ptr_to_jlong(handle));
 317         (*env)->SetObjectField(env, obj, findFirst_name, name);
 318         (*env)->SetIntField(env, obj, findFirst_attributes, data.dwFileAttributes);
 319     } else {
 320         throwWindowsException(env, GetLastError());
 321     }
 322 }
 323 
 324 JNIEXPORT jlong JNICALL
 325 Java_sun_nio_fs_WindowsNativeDispatcher_FindFirstFile1(JNIEnv* env, jclass this,
 326     jlong pathAddress, jlong dataAddress)
 327 {
 328     LPCWSTR lpFileName = jlong_to_ptr(pathAddress);
 329     WIN32_FIND_DATAW* data = (WIN32_FIND_DATAW*)jlong_to_ptr(dataAddress);
 330 
 331     HANDLE handle = FindFirstFileW(lpFileName, data);
 332     if (handle == INVALID_HANDLE_VALUE) {
 333         throwWindowsException(env, GetLastError());
 334     }
 335     return ptr_to_jlong(handle);




 294 }
 295 
 296 JNIEXPORT void JNICALL
 297 Java_sun_nio_fs_WindowsNativeDispatcher_CloseHandle(JNIEnv* env, jclass this,
 298     jlong handle)
 299 {
 300     HANDLE h = (HANDLE)jlong_to_ptr(handle);
 301     CloseHandle(h);
 302 }
 303 
 304 JNIEXPORT void JNICALL
 305 Java_sun_nio_fs_WindowsNativeDispatcher_FindFirstFile0(JNIEnv* env, jclass this,
 306     jlong address, jobject obj)
 307 {
 308     WIN32_FIND_DATAW data;
 309     LPCWSTR lpFileName = jlong_to_ptr(address);
 310 
 311     HANDLE handle = FindFirstFileW(lpFileName, &data);
 312     if (handle != INVALID_HANDLE_VALUE) {
 313         jstring name = (*env)->NewString(env, data.cFileName, (jsize)wcslen(data.cFileName));
 314         if (name == NULL) {
 315             FindClose(handle);
 316             return;
 317         }
 318         (*env)->SetLongField(env, obj, findFirst_handle, ptr_to_jlong(handle));
 319         (*env)->SetObjectField(env, obj, findFirst_name, name);
 320         (*env)->SetIntField(env, obj, findFirst_attributes, data.dwFileAttributes);
 321     } else {
 322         throwWindowsException(env, GetLastError());
 323     }
 324 }
 325 
 326 JNIEXPORT jlong JNICALL
 327 Java_sun_nio_fs_WindowsNativeDispatcher_FindFirstFile1(JNIEnv* env, jclass this,
 328     jlong pathAddress, jlong dataAddress)
 329 {
 330     LPCWSTR lpFileName = jlong_to_ptr(pathAddress);
 331     WIN32_FIND_DATAW* data = (WIN32_FIND_DATAW*)jlong_to_ptr(dataAddress);
 332 
 333     HANDLE handle = FindFirstFileW(lpFileName, data);
 334     if (handle == INVALID_HANDLE_VALUE) {
 335         throwWindowsException(env, GetLastError());
 336     }
 337     return ptr_to_jlong(handle);


< prev index next >