00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #include "ad_ntfs.h"
00015
00016 int ADIOI_NTFS_ReadDone(ADIO_Request *request, ADIO_Status *status, int *error_code)
00017 {
00018 DWORD ret_val;
00019 int done=0;
00020 #ifndef PRINT_ERR_MSG
00021 static char myname[] = "ADIOI_NTFS_READDONE";
00022 #endif
00023
00024 if (*request == ADIO_REQUEST_NULL) {
00025 *error_code = MPI_SUCCESS;
00026 return 1;
00027 }
00028
00029 if ((*request)->queued)
00030 {
00031 (*request)->nbytes = 0;
00032 ret_val = GetOverlappedResult((*request)->fd, (*request)->handle, &(*request)->nbytes, FALSE);
00033
00034
00035
00036 if (!ret_val)
00037 {
00038 ret_val = GetLastError();
00039 if (ret_val == ERROR_IO_INCOMPLETE)
00040 {
00041 done = 0;
00042 *error_code = MPI_SUCCESS;
00043 }
00044 }
00045 else
00046 {
00047 done = 1;
00048 *error_code = MPI_SUCCESS;
00049 }
00050 }
00051 else {
00052 done = 1;
00053 *error_code = MPI_SUCCESS;
00054 }
00055 #ifdef HAVE_STATUS_SET_BYTES
00056 if (done && ((*request)->nbytes != -1))
00057 MPIR_Status_set_bytes(status, (*request)->datatype, (*request)->nbytes);
00058 #endif
00059
00060 if (done)
00061 {
00062
00063
00064 if ((*request)->queued) ADIOI_Del_req_from_list(request);
00065
00066 (*request)->fd->async_count--;
00067 if ((*request)->handle)
00068 {
00069 CloseHandle(((OVERLAPPED*)((*request)->handle))->hEvent);
00070 ADIOI_Free((*request)->handle);
00071 }
00072 ADIOI_Free_request((ADIOI_Req_node *) (*request));
00073 *request = ADIO_REQUEST_NULL;
00074 }
00075 return done;
00076 }
00077
00078
00079 int ADIOI_NTFS_WriteDone(ADIO_Request *request, ADIO_Status *status, int *error_code)
00080 {
00081 return ADIOI_NTFS_ReadDone(request, status, error_code);
00082 }