This source file includes following definitions.
- ADIOI_Shfp_fname
1
2
3
4
5
6
7
8 #include "adio.h"
9
10 #ifdef HAVE_UNISTD_H
11 #include <unistd.h>
12 #endif
13 #ifdef HAVE_SYS_TYPES_H
14 #include <sys/types.h>
15 #endif
16
17 #ifdef HAVE_TIME_H
18 #include <time.h>
19 #endif
20
21
22
23
24
25
26
27
28
29
30
31
32 void ADIOI_Shfp_fname(ADIO_File fd, int rank, int *error_code)
33 {
34 int i;
35 int len;
36 char *slash, *ptr, tmp[128];
37 int pid = 0;
38
39 fd->shared_fp_fname = (char *) ADIOI_Malloc(PATH_MAX);
40
41 if (!rank) {
42 srand(time(NULL));
43 i = rand();
44 pid = (int)getpid();
45
46 if (ADIOI_Strncpy(fd->shared_fp_fname, fd->filename, PATH_MAX)) {
47 *error_code = ADIOI_Err_create_code("ADIOI_Shfp_fname",
48 fd->filename, ENAMETOOLONG);
49 return;
50 }
51
52 #ifdef ROMIO_NTFS
53 slash = strrchr(fd->filename, '\\');
54 #else
55 slash = strrchr(fd->filename, '/');
56 #endif
57 if (!slash) {
58 if (ADIOI_Strncpy(fd->shared_fp_fname, ".", 2)) {
59 *error_code = ADIOI_Err_create_code("ADIOI_Shfp_fname",
60 fd->filename, ENAMETOOLONG);
61 return;
62 }
63 if (ADIOI_Strncpy(fd->shared_fp_fname + 1, fd->filename, PATH_MAX-1)) {
64 *error_code = ADIOI_Err_create_code("ADIOI_Shfp_fname",
65 fd->filename, ENAMETOOLONG);
66 return;
67 }
68 }
69 else {
70 ptr = slash;
71 #ifdef ROMIO_NTFS
72 slash = strrchr(fd->shared_fp_fname, '\\');
73 #else
74 slash = strrchr(fd->shared_fp_fname, '/');
75 #endif
76 if (ADIOI_Strncpy(slash + 1, ".", 2)) {
77 *error_code = ADIOI_Err_create_code("ADIOI_Shfp_fname",
78 fd->filename, ENAMETOOLONG);
79 return;
80 }
81
82 len = (int) (PATH_MAX - (slash+2 - fd->shared_fp_fname));
83 if (ADIOI_Strncpy(slash + 2, ptr + 1, len)) {
84 *error_code = ADIOI_Err_create_code("ADIOI_Shfp_fname",
85 ptr + 1, ENAMETOOLONG);
86 return;
87 }
88 }
89
90 ADIOI_Snprintf(tmp, 128, ".shfp.%d.%d", pid, i);
91
92 ADIOI_Strnapp(fd->shared_fp_fname, tmp, PATH_MAX);
93
94 len = (int)strlen(fd->shared_fp_fname);
95 MPI_Bcast(&len, 1, MPI_INT, 0, fd->comm);
96 MPI_Bcast(fd->shared_fp_fname, len+1, MPI_CHAR, 0, fd->comm);
97 }
98 else {
99 MPI_Bcast(&len, 1, MPI_INT, 0, fd->comm);
100 MPI_Bcast(fd->shared_fp_fname, len+1, MPI_CHAR, 0, fd->comm);
101 }
102 }