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_delete = PMPI_Info_delete
00015 #elif defined(HAVE_PRAGMA_HP_SEC_DEF)
00016 #pragma _HP_SECONDARY_DEF PMPI_Info_delete MPI_Info_delete
00017 #elif defined(HAVE_PRAGMA_CRI_DUP)
00018 #pragma _CRI duplicate MPI_Info_delete as PMPI_Info_delete
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 int MPI_Info_delete(MPI_Info info, char *key)
00037 {
00038 MPI_Info prev, curr;
00039 int done;
00040
00041 if ((info <= (MPI_Info) 0) || (info->cookie != MPIR_INFO_COOKIE)) {
00042 FPRINTF(stderr, "MPI_Info_delete: Invalid info object\n");
00043 MPI_Abort(MPI_COMM_WORLD, 1);
00044 }
00045
00046 if (key <= (char *) 0) {
00047 FPRINTF(stderr, "MPI_Info_delete: key is an invalid address\n");
00048 MPI_Abort(MPI_COMM_WORLD, 1);
00049 }
00050
00051 if (strlen(key) > MPI_MAX_INFO_KEY) {
00052 FPRINTF(stderr, "MPI_Info_delete: key is longer than MPI_MAX_INFO_KEY\n");
00053 MPI_Abort(MPI_COMM_WORLD, 1);
00054 }
00055
00056 if (!strlen(key)) {
00057 FPRINTF(stderr, "MPI_Info_delete: key is a null string\n");
00058 MPI_Abort(MPI_COMM_WORLD, 1);
00059 }
00060
00061 prev = info;
00062 curr = info->next;
00063 done = 0;
00064
00065 while (curr) {
00066 if (!strcmp(curr->key, key)) {
00067 free(curr->key);
00068 free(curr->value);
00069 prev->next = curr->next;
00070 ADIOI_Free(curr);
00071 done = 1;
00072 break;
00073 }
00074 prev = curr;
00075 curr = curr->next;
00076 }
00077
00078 if (!done) {
00079 FPRINTF(stderr, "MPI_Info_delete: key not defined in info\n");
00080 MPI_Abort(MPI_COMM_WORLD, 1);
00081 }
00082
00083 return MPI_SUCCESS;
00084 }