00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "mpioimpl.h"
00010
00011 #ifdef HAVE_WEAK_SYMBOLS
00012
00013 #if defined(HAVE_PRAGMA_WEAK)
00014 #pragma weak MPI_Info_set = PMPI_Info_set
00015 #elif defined(HAVE_PRAGMA_HP_SEC_DEF)
00016 #pragma _HP_SECONDARY_DEF PMPI_Info_set MPI_Info_set
00017 #elif defined(HAVE_PRAGMA_CRI_DUP)
00018 #pragma _CRI duplicate MPI_Info_set as PMPI_Info_set
00019
00020 #endif
00021
00022
00023 #define MPIO_BUILD_PROFILING
00024 #include "mpioprof.h"
00025 #endif
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 int MPI_Info_set(MPI_Info info, char *key, char *value)
00038 {
00039 MPI_Info prev, curr;
00040
00041 if ((info <= (MPI_Info) 0) || (info->cookie != MPIR_INFO_COOKIE)) {
00042 FPRINTF(stderr, "MPI_Info_set: Invalid info object\n");
00043 MPI_Abort(MPI_COMM_WORLD, 1);
00044 }
00045
00046 if (key <= (char *) 0) {
00047 FPRINTF(stderr, "MPI_Info_set: key is an invalid address\n");
00048 MPI_Abort(MPI_COMM_WORLD, 1);
00049 }
00050
00051 if (value <= (char *) 0) {
00052 FPRINTF(stderr, "MPI_Info_set: value is an invalid address\n");
00053 MPI_Abort(MPI_COMM_WORLD, 1);
00054 }
00055
00056 if (strlen(key) > MPI_MAX_INFO_KEY) {
00057 FPRINTF(stderr, "MPI_Info_set: key is longer than MPI_MAX_INFO_KEY\n");
00058 MPI_Abort(MPI_COMM_WORLD, 1);
00059 }
00060
00061 if (strlen(value) > MPI_MAX_INFO_VAL) {
00062 FPRINTF(stderr, "MPI_Info_set: value is longer than MPI_MAX_INFO_VAL\n");
00063 MPI_Abort(MPI_COMM_WORLD, 1);
00064 }
00065
00066 if (!strlen(key)) {
00067 FPRINTF(stderr, "MPI_Info_set: key is a null string\n");
00068 MPI_Abort(MPI_COMM_WORLD, 1);
00069 }
00070
00071 if (!strlen(value)) {
00072 FPRINTF(stderr, "MPI_Info_set: value is a null string\n");
00073 MPI_Abort(MPI_COMM_WORLD, 1);
00074 }
00075
00076 prev = info;
00077 curr = info->next;
00078
00079 while (curr) {
00080 if (!strcmp(curr->key, key)) {
00081 free(curr->value);
00082 curr->value = strdup(value);
00083 break;
00084 }
00085 prev = curr;
00086 curr = curr->next;
00087 }
00088
00089 if (!curr) {
00090 prev->next = (MPI_Info) ADIOI_Malloc(sizeof(struct MPIR_Info));
00091 curr = prev->next;
00092 curr->cookie = 0;
00093 curr->key = strdup(key);
00094 curr->value = strdup(value);
00095 curr->next = 0;
00096 }
00097
00098 return MPI_SUCCESS;
00099 }