98 {
99 BOOL res;
100 HANDLE h = jlong_to_ptr(handle);
101 DWORD lowPos = (DWORD)pos;
102 long highPos = (long)(pos >> 32);
103 DWORD lowNumBytes = (DWORD)size;
104 DWORD highNumBytes = (DWORD)(size >> 32);
105 DWORD flags = (shared == JNI_TRUE) ? 0 : LOCKFILE_EXCLUSIVE_LOCK;
106 OVERLAPPED* lpOverlapped = (OVERLAPPED*)jlong_to_ptr(ov);
107
108 lpOverlapped->Offset = lowPos;
109 lpOverlapped->OffsetHigh = highPos;
110 lpOverlapped->hEvent = NULL;
111
112 res = LockFileEx(h, flags, 0, lowNumBytes, highNumBytes, lpOverlapped);
113 if (res == 0) {
114 int error = GetLastError();
115 if (error == ERROR_IO_PENDING) {
116 return IOS_UNAVAILABLE;
117 }
118 JNU_ThrowIOExceptionWithLastError(env, "WriteFile failed");
119 return IOS_THROWN;
120 }
121 return 0;
122 }
123
124 JNIEXPORT void JNICALL
125 Java_sun_nio_ch_WindowsAsynchronousFileChannelImpl_close0(JNIEnv* env, jclass this,
126 jlong handle)
127 {
128 HANDLE h = (HANDLE)jlong_to_ptr(handle);
129 BOOL result = CloseHandle(h);
130 if (result == 0) {
131 JNU_ThrowIOExceptionWithLastError(env, "Close failed");
132 }
133 }
|
98 {
99 BOOL res;
100 HANDLE h = jlong_to_ptr(handle);
101 DWORD lowPos = (DWORD)pos;
102 long highPos = (long)(pos >> 32);
103 DWORD lowNumBytes = (DWORD)size;
104 DWORD highNumBytes = (DWORD)(size >> 32);
105 DWORD flags = (shared == JNI_TRUE) ? 0 : LOCKFILE_EXCLUSIVE_LOCK;
106 OVERLAPPED* lpOverlapped = (OVERLAPPED*)jlong_to_ptr(ov);
107
108 lpOverlapped->Offset = lowPos;
109 lpOverlapped->OffsetHigh = highPos;
110 lpOverlapped->hEvent = NULL;
111
112 res = LockFileEx(h, flags, 0, lowNumBytes, highNumBytes, lpOverlapped);
113 if (res == 0) {
114 int error = GetLastError();
115 if (error == ERROR_IO_PENDING) {
116 return IOS_UNAVAILABLE;
117 }
118 JNU_ThrowIOExceptionWithLastError(env, "LockFile failed");
119 return IOS_THROWN;
120 }
121 return 0;
122 }
123
124 JNIEXPORT void JNICALL
125 Java_sun_nio_ch_WindowsAsynchronousFileChannelImpl_close0(JNIEnv* env, jclass this,
126 jlong handle)
127 {
128 HANDLE h = (HANDLE)jlong_to_ptr(handle);
129 BOOL result = CloseHandle(h);
130 if (result == 0) {
131 JNU_ThrowIOExceptionWithLastError(env, "Close failed");
132 }
133 }
|