root/ompi/mca/io/romio321/romio/mpi2-other/info/info_set.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. MPI_Info_set

   1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
   2 /* 
   3  *
   4  *   Copyright (C) 1997 University of Chicago. 
   5  *   See COPYRIGHT notice in top-level directory.
   6  */
   7 
   8 #include "mpioimpl.h"
   9 
  10 #ifdef HAVE_WEAK_SYMBOLS
  11 
  12 #if defined(HAVE_PRAGMA_WEAK)
  13 #pragma weak MPI_Info_set = PMPI_Info_set
  14 #elif defined(HAVE_PRAGMA_HP_SEC_DEF)
  15 #pragma _HP_SECONDARY_DEF PMPI_Info_set MPI_Info_set
  16 #elif defined(HAVE_PRAGMA_CRI_DUP)
  17 #pragma _CRI duplicate MPI_Info_set as PMPI_Info_set
  18 /* end of weak pragmas */
  19 #endif
  20 
  21 /* Include mapping from MPI->PMPI */
  22 #define MPIO_BUILD_PROFILING
  23 #include "mpioprof.h"
  24 #endif
  25 
  26 /*@
  27     MPI_Info_set - Adds a (key,value) pair to info
  28 
  29 Input Parameters:
  30 . info - info object (handle)
  31 . key - key (string)
  32 . value - value (string)
  33 
  34 .N fortran
  35 @*/
  36 int MPI_Info_set(MPI_Info info, char *key, char *value)
  37 {
  38     MPI_Info prev, curr;
  39 
  40     if ((info <= (MPI_Info) 0) || (info->cookie != MPIR_INFO_COOKIE)) {
  41         FPRINTF(stderr, "MPI_Info_set: Invalid info object\n");
  42         MPI_Abort(MPI_COMM_WORLD, 1);
  43     }
  44 
  45     if (key <= (char *) 0) {
  46         FPRINTF(stderr, "MPI_Info_set: key is an invalid address\n");
  47         MPI_Abort(MPI_COMM_WORLD, 1);
  48     }
  49 
  50     if (value <= (char *) 0) {
  51         FPRINTF(stderr, "MPI_Info_set: value is an invalid address\n");
  52         MPI_Abort(MPI_COMM_WORLD, 1);
  53     }
  54 
  55     if (strlen(key) > MPI_MAX_INFO_KEY) {
  56         FPRINTF(stderr, "MPI_Info_set: key is longer than MPI_MAX_INFO_KEY\n");
  57         MPI_Abort(MPI_COMM_WORLD, 1);
  58     }
  59 
  60     if (strlen(value) > MPI_MAX_INFO_VAL) {
  61         FPRINTF(stderr, "MPI_Info_set: value is longer than MPI_MAX_INFO_VAL\n");
  62         MPI_Abort(MPI_COMM_WORLD, 1);
  63     }
  64 
  65     if (!strlen(key)) {
  66         FPRINTF(stderr, "MPI_Info_set: key is a null string\n");
  67         MPI_Abort(MPI_COMM_WORLD, 1);
  68     }
  69 
  70     if (!strlen(value)) {
  71         FPRINTF(stderr, "MPI_Info_set: value is a null string\n");
  72         MPI_Abort(MPI_COMM_WORLD, 1);
  73     }
  74 
  75     prev = info;
  76     curr = info->next;
  77 
  78     while (curr) {
  79         if (!strcmp(curr->key, key)) {
  80             ADIOI_Free(curr->value); 
  81             curr->value = ADIOI_Strdup(value);
  82             break;
  83         }
  84         prev = curr;
  85         curr = curr->next;
  86     }
  87 
  88     if (!curr) {
  89         prev->next = (MPI_Info) ADIOI_Malloc(sizeof(struct MPIR_Info));
  90         curr = prev->next;
  91         curr->cookie = 0;  /* cookie not set on purpose */
  92         curr->key = ADIOI_Strdup(key);
  93         curr->value = ADIOI_Strdup(value);
  94         curr->next = 0;
  95     }
  96 
  97     return MPI_SUCCESS;
  98 }

/* [<][>][^][v][top][bottom][index][help] */