This source file includes following definitions.
- ADIOI_NTFS_Fcntl
1
2
3
4
5
6
7 #include "ad_ntfs.h"
8 #include "adio_extern.h"
9
10 void ADIOI_NTFS_Fcntl(ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct, int *error_code)
11 {
12 DWORD err;
13 LONG dwTemp;
14 static char myname[] = "ADIOI_NTFS_FCNTL";
15
16 switch(flag)
17 {
18 case ADIO_FCNTL_GET_FSIZE:
19 fcntl_struct->fsize = SetFilePointer(fd->fd_sys, 0, 0, FILE_END);
20 if (fd->fp_sys_posn != -1)
21 {
22 dwTemp = DWORDHIGH(fd->fp_sys_posn);
23 if (SetFilePointer(fd->fd_sys, DWORDLOW(fd->fp_sys_posn), &dwTemp, FILE_BEGIN) == INVALID_SET_FILE_POINTER)
24 {
25 char errMsg[ADIOI_NTFS_ERR_MSG_MAX];
26 err = GetLastError();
27 ADIOI_NTFS_Strerror(err, errMsg, ADIOI_NTFS_ERR_MSG_MAX);
28 if (err != NO_ERROR)
29 {
30 *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
31 myname, __LINE__, MPI_ERR_IO,
32 "**io", "**io %s", errMsg);
33 return;
34 }
35 }
36 }
37
38 if (fcntl_struct->fsize == INVALID_SET_FILE_POINTER)
39 {
40 char errMsg[ADIOI_NTFS_ERR_MSG_MAX];
41 dwTemp = GetLastError();
42 ADIOI_NTFS_Strerror(dwTemp, errMsg, ADIOI_NTFS_ERR_MSG_MAX);
43 *error_code = MPIO_Err_create_code(MPI_SUCCESS,
44 MPIR_ERR_RECOVERABLE, myname,
45 __LINE__, MPI_ERR_IO, "**io",
46 "**io %s", errMsg);
47 return;
48 }
49
50 *error_code = MPI_SUCCESS;
51 break;
52
53 case ADIO_FCNTL_SET_DISKSPACE:
54 ADIOI_GEN_Prealloc(fd, fcntl_struct->diskspace, error_code);
55 break;
56
57 case ADIO_FCNTL_SET_ATOMICITY:
58 fd->atomicity = (fcntl_struct->atomicity == 0) ? 0 : 1;
59 *error_code = MPI_SUCCESS;
60
61
62
63
64 break;
65
66 default:
67
68 *error_code = MPIO_Err_create_code(MPI_SUCCESS,
69 MPIR_ERR_RECOVERABLE,
70 myname, __LINE__,
71 MPI_ERR_ARG,
72 "**flag", "**flag %d", flag);
73 return;
74
75 }
76 }