root/opal/mca/pmix/pmix4x/pmix/src/mca/bfrops/v12/bfrop_v12.c

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

DEFINITIONS

This source file includes following definitions.
  1. init
  2. finalize
  3. register_type
  4. data_type_string
  5. pmix12_v2_to_v1_datatype
  6. pmix12_bfrop_store_data_type
  7. pmix12_v1_to_v2_datatype
  8. pmix12_bfrop_get_data_type
  9. pmix12_bfrop_value_load
  10. pmix12_bfrop_value_unload

   1 /*
   2  * Copyright (c) 2004-2010 The Trustees of Indiana University and Indiana
   3  *                         University Research and Technology
   4  *                         Corporation.  All rights reserved.
   5  * Copyright (c) 2004-201 The University of Tennessee and The University
   6  *                         of Tennessee Research Foundation.  All rights
   7  *                         reserved.
   8  * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
   9  *                         University of Stuttgart.  All rights reserved.
  10  * Copyright (c) 2004-2005 The Regents of the University of California.
  11  *                         All rights reserved.
  12  * Copyright (c) 2010-201 Oak Ridge National Labs.  All rights reserved.
  13  * Copyright (c) 201-2014 Cisco Systems, Inc.  All rights reserved.
  14  * Copyright (c) 201-2013 Los Alamos National Security, LLC.  All rights
  15  *                         reserved.
  16  * Copyright (c) 2013-2017 Intel, Inc.  All rights reserved.
  17  * Copyright (c) 2019      Mellanox Technologies, Inc.
  18  *                         All rights reserved.
  19  * $COPYRIGHT$
  20  *
  21  * Additional copyrights may follow
  22  *
  23  * $HEADER$
  24  *
  25  */
  26 
  27 #include <src/include/pmix_config.h>
  28 
  29 #include "src/mca/bfrops/base/base.h"
  30 #include "bfrop_v12.h"
  31 #include "internal.h"
  32 
  33 static pmix_status_t init(void);
  34 static void finalize(void);
  35 static pmix_status_t register_type(const char *name,
  36                                    pmix_data_type_t type,
  37                                    pmix_bfrop_pack_fn_t pack,
  38                                    pmix_bfrop_unpack_fn_t unpack,
  39                                    pmix_bfrop_copy_fn_t copy,
  40                                    pmix_bfrop_print_fn_t print);
  41 static const char* data_type_string(pmix_data_type_t type);
  42 
  43 pmix_bfrops_module_t pmix_bfrops_pmix12_module = {
  44     .version = "v12",
  45     .init = init,
  46     .finalize = finalize,
  47     .pack = pmix12_bfrop_pack,
  48     .unpack = pmix12_bfrop_unpack,
  49     .copy = pmix12_bfrop_copy,
  50     .print = pmix12_bfrop_print,
  51     .copy_payload = pmix12_bfrop_copy_payload,
  52     .value_xfer = pmix12_bfrop_value_xfer,
  53     .value_load = pmix12_bfrop_value_load,
  54     .value_unload = pmix12_bfrop_value_unload,
  55     .value_cmp = pmix12_bfrop_value_cmp,
  56     .register_type = register_type,
  57     .data_type_string = data_type_string
  58 };
  59 
  60 static pmix_status_t init(void)
  61 {
  62     /* some standard types don't require anything special */
  63     PMIX_REGISTER_TYPE("PMIX_BOOL", PMIX_BOOL,
  64                        pmix12_bfrop_pack_bool,
  65                        pmix12_bfrop_unpack_bool,
  66                        pmix12_bfrop_std_copy,
  67                        pmix12_bfrop_print_bool,
  68                        &mca_bfrops_v12_component.types);
  69 
  70     PMIX_REGISTER_TYPE("PMIX_BYTE", PMIX_BYTE,
  71                        pmix12_bfrop_pack_byte,
  72                        pmix12_bfrop_unpack_byte,
  73                        pmix12_bfrop_std_copy,
  74                        pmix12_bfrop_print_byte,
  75                        &mca_bfrops_v12_component.types);
  76 
  77     PMIX_REGISTER_TYPE("PMIX_STRING", PMIX_STRING,
  78                        pmix12_bfrop_pack_string,
  79                        pmix12_bfrop_unpack_string,
  80                        pmix12_bfrop_copy_string,
  81                        pmix12_bfrop_print_string,
  82                        &mca_bfrops_v12_component.types);
  83 
  84     /* Register the rest of the standard generic types to point to internal functions */
  85     PMIX_REGISTER_TYPE("PMIX_SIZE", PMIX_SIZE,
  86                        pmix12_bfrop_pack_sizet,
  87                        pmix12_bfrop_unpack_sizet,
  88                        pmix12_bfrop_std_copy,
  89                        pmix12_bfrop_print_size,
  90                        &mca_bfrops_v12_component.types);
  91 
  92     PMIX_REGISTER_TYPE("PMIX_PID", PMIX_PID,
  93                        pmix12_bfrop_pack_pid,
  94                        pmix12_bfrop_unpack_pid,
  95                        pmix12_bfrop_std_copy,
  96                        pmix12_bfrop_print_pid,
  97                        &mca_bfrops_v12_component.types);
  98 
  99     PMIX_REGISTER_TYPE("PMIX_INT", PMIX_INT,
 100                        pmix12_bfrop_pack_int,
 101                        pmix12_bfrop_unpack_int,
 102                        pmix12_bfrop_std_copy,
 103                        pmix12_bfrop_print_int,
 104                        &mca_bfrops_v12_component.types);
 105 
 106     /* Register all the standard fixed types to point to base functions */
 107     PMIX_REGISTER_TYPE("PMIX_INT8", PMIX_INT8,
 108                        pmix12_bfrop_pack_byte,
 109                        pmix12_bfrop_unpack_byte,
 110                        pmix12_bfrop_std_copy,
 111                        pmix12_bfrop_print_int8,
 112                        &mca_bfrops_v12_component.types);
 113 
 114     PMIX_REGISTER_TYPE("PMIX_INT16", PMIX_INT16,
 115                        pmix12_bfrop_pack_int16,
 116                        pmix12_bfrop_unpack_int16,
 117                        pmix12_bfrop_std_copy,
 118                        pmix12_bfrop_print_int16,
 119                        &mca_bfrops_v12_component.types);
 120 
 121     PMIX_REGISTER_TYPE("PMIX_INT32", PMIX_INT32,
 122                        pmix12_bfrop_pack_int32,
 123                        pmix12_bfrop_unpack_int32,
 124                        pmix12_bfrop_std_copy,
 125                        pmix12_bfrop_print_int32,
 126                        &mca_bfrops_v12_component.types);
 127 
 128     PMIX_REGISTER_TYPE("PMIX_INT64", PMIX_INT64,
 129                        pmix12_bfrop_pack_int64,
 130                        pmix12_bfrop_unpack_int64,
 131                        pmix12_bfrop_std_copy,
 132                        pmix12_bfrop_print_int64,
 133                        &mca_bfrops_v12_component.types);
 134 
 135     PMIX_REGISTER_TYPE("PMIX_UINT", PMIX_UINT,
 136                        pmix12_bfrop_pack_int,
 137                        pmix12_bfrop_unpack_int,
 138                        pmix12_bfrop_std_copy,
 139                        pmix12_bfrop_print_uint,
 140                        &mca_bfrops_v12_component.types);
 141 
 142     PMIX_REGISTER_TYPE("PMIX_UINT8", PMIX_UINT8,
 143                        pmix12_bfrop_pack_byte,
 144                        pmix12_bfrop_unpack_byte,
 145                        pmix12_bfrop_std_copy,
 146                        pmix12_bfrop_print_uint8,
 147                        &mca_bfrops_v12_component.types);
 148 
 149     PMIX_REGISTER_TYPE("PMIX_UINT16", PMIX_UINT16,
 150                        pmix12_bfrop_pack_int16,
 151                        pmix12_bfrop_unpack_int16,
 152                        pmix12_bfrop_std_copy,
 153                        pmix12_bfrop_print_uint16,
 154                        &mca_bfrops_v12_component.types);
 155 
 156     PMIX_REGISTER_TYPE("PMIX_UINT32", PMIX_UINT32,
 157                        pmix12_bfrop_pack_int32,
 158                        pmix12_bfrop_unpack_int32,
 159                        pmix12_bfrop_std_copy,
 160                        pmix12_bfrop_print_uint32,
 161                        &mca_bfrops_v12_component.types);
 162 
 163     PMIX_REGISTER_TYPE("PMIX_UINT64", PMIX_UINT64,
 164                        pmix12_bfrop_pack_int64,
 165                        pmix12_bfrop_unpack_int64,
 166                        pmix12_bfrop_std_copy,
 167                        pmix12_bfrop_print_uint64,
 168                        &mca_bfrops_v12_component.types);
 169 
 170     PMIX_REGISTER_TYPE("PMIX_FLOAT", PMIX_FLOAT,
 171                        pmix12_bfrop_pack_float,
 172                        pmix12_bfrop_unpack_float,
 173                        pmix12_bfrop_std_copy,
 174                        pmix12_bfrop_print_float,
 175                        &mca_bfrops_v12_component.types);
 176 
 177     PMIX_REGISTER_TYPE("PMIX_DOUBLE", PMIX_DOUBLE,
 178                        pmix12_bfrop_pack_double,
 179                        pmix12_bfrop_unpack_double,
 180                        pmix12_bfrop_std_copy,
 181                        pmix12_bfrop_print_double,
 182                        &mca_bfrops_v12_component.types);
 183 
 184     PMIX_REGISTER_TYPE("PMIX_TIMEVAL", PMIX_TIMEVAL,
 185                        pmix12_bfrop_pack_timeval,
 186                        pmix12_bfrop_unpack_timeval,
 187                        pmix12_bfrop_std_copy,
 188                        pmix12_bfrop_print_timeval,
 189                        &mca_bfrops_v12_component.types);
 190 
 191     PMIX_REGISTER_TYPE("PMIX_TIME", PMIX_TIME,
 192                        pmix12_bfrop_pack_time,
 193                        pmix12_bfrop_unpack_time,
 194                        pmix12_bfrop_std_copy,
 195                        pmix12_bfrop_print_time,
 196                        &mca_bfrops_v12_component.types);
 197 
 198     PMIX_REGISTER_TYPE("PMIX_STATUS", PMIX_STATUS,
 199                        pmix12_bfrop_pack_status,
 200                        pmix12_bfrop_unpack_status,
 201                        pmix12_bfrop_std_copy,
 202                        pmix12_bfrop_print_status,
 203                        &mca_bfrops_v12_component.types);
 204 
 205     /* structured values need to be done here as they might
 206      * callback into standard and/or derived values */
 207     PMIX_REGISTER_TYPE("PMIX_VALUE", PMIX_VALUE,
 208                        pmix12_bfrop_pack_value,
 209                        pmix12_bfrop_unpack_value,
 210                        pmix12_bfrop_copy_value,
 211                        pmix12_bfrop_print_value,
 212                        &mca_bfrops_v12_component.types);
 213 
 214     PMIX_REGISTER_TYPE("PMIX_PROC", PMIX_PROC,
 215                        pmix12_bfrop_pack_proc,
 216                        pmix12_bfrop_unpack_proc,
 217                        pmix12_bfrop_copy_proc,
 218                        pmix12_bfrop_print_proc,
 219                        &mca_bfrops_v12_component.types);
 220 
 221     PMIX_REGISTER_TYPE("PMIX_APP", PMIX_APP,
 222                        pmix12_bfrop_pack_app,
 223                        pmix12_bfrop_unpack_app,
 224                        pmix12_bfrop_copy_app,
 225                        pmix12_bfrop_print_app,
 226                        &mca_bfrops_v12_component.types);
 227 
 228     PMIX_REGISTER_TYPE("PMIX_INFO", PMIX_INFO,
 229                        pmix12_bfrop_pack_info,
 230                        pmix12_bfrop_unpack_info,
 231                        pmix12_bfrop_copy_info,
 232                        pmix12_bfrop_print_info,
 233                        &mca_bfrops_v12_component.types);
 234 
 235     PMIX_REGISTER_TYPE("PMIX_PDATA", PMIX_PDATA,
 236                        pmix12_bfrop_pack_pdata,
 237                        pmix12_bfrop_unpack_pdata,
 238                        pmix12_bfrop_copy_pdata,
 239                        pmix12_bfrop_print_pdata,
 240                        &mca_bfrops_v12_component.types);
 241 
 242     PMIX_REGISTER_TYPE("PMIX_BUFFER", PMIX_BUFFER,
 243                        pmix12_bfrop_pack_buf,
 244                        pmix12_bfrop_unpack_buf,
 245                        pmix12_bfrop_copy_buf,
 246                        pmix12_bfrop_print_buf,
 247                        &mca_bfrops_v12_component.types);
 248 
 249     PMIX_REGISTER_TYPE("PMIX_BYTE_OBJECT", PMIX_BYTE_OBJECT,
 250                        pmix12_bfrop_pack_bo,
 251                        pmix12_bfrop_unpack_bo,
 252                        pmix12_bfrop_copy_bo,
 253                        pmix12_bfrop_print_bo,
 254                        &mca_bfrops_v12_component.types);
 255 
 256     PMIX_REGISTER_TYPE("PMIX_KVAL", PMIX_KVAL,
 257                        pmix12_bfrop_pack_kval,
 258                        pmix12_bfrop_unpack_kval,
 259                        pmix12_bfrop_copy_kval,
 260                        pmix12_bfrop_print_kval,
 261                        &mca_bfrops_v12_component.types);
 262 
 263     PMIX_REGISTER_TYPE("PMIX_MODEX", PMIX_MODEX,
 264                        pmix12_bfrop_pack_modex,
 265                        pmix12_bfrop_unpack_modex,
 266                        pmix12_bfrop_copy_modex,
 267                        pmix12_bfrop_print_modex,
 268                        &mca_bfrops_v12_component.types);
 269 
 270     PMIX_REGISTER_TYPE("PMIX_PERSIST", PMIX_PERSIST,
 271                        pmix12_bfrop_pack_persist,
 272                        pmix12_bfrop_unpack_persist,
 273                        pmix12_bfrop_std_copy,
 274                        pmix12_bfrop_print_persist,
 275                        &mca_bfrops_v12_component.types);
 276 
 277     PMIX_REGISTER_TYPE("PMIX_POINTER", PMIX_POINTER,
 278                        pmix12_bfrop_pack_ptr,
 279                        pmix12_bfrop_unpack_ptr,
 280                        pmix12_bfrop_std_copy,
 281                        pmix12_bfrop_print_ptr,
 282                        &mca_bfrops_v12_component.types);
 283 
 284     PMIX_REGISTER_TYPE("PMIX_SCOPE", PMIX_SCOPE,
 285                        pmix12_bfrop_pack_scope,
 286                        pmix12_bfrop_unpack_scope,
 287                        pmix12_bfrop_std_copy,
 288                        pmix12_bfrop_print_scope,
 289                        &mca_bfrops_v12_component.types);
 290 
 291     PMIX_REGISTER_TYPE("PMIX_DATA_RANGE", PMIX_DATA_RANGE,
 292                        pmix12_bfrop_pack_range,
 293                        pmix12_bfrop_unpack_range,
 294                        pmix12_bfrop_std_copy,
 295                        pmix12_bfrop_print_ptr,
 296                        &mca_bfrops_v12_component.types);
 297 
 298     PMIX_REGISTER_TYPE("PMIX_COMMAND", PMIX_COMMAND,
 299                        pmix12_bfrop_pack_cmd,
 300                        pmix12_bfrop_unpack_cmd,
 301                        pmix12_bfrop_std_copy,
 302                        pmix12_bfrop_print_cmd,
 303                        &mca_bfrops_v12_component.types);
 304 
 305     PMIX_REGISTER_TYPE("PMIX_INFO_DIRECTIVES", PMIX_INFO_DIRECTIVES,
 306                        pmix12_bfrop_pack_info_directives,
 307                        pmix12_bfrop_unpack_info_directives,
 308                        pmix12_bfrop_std_copy,
 309                        pmix12_bfrop_print_info_directives,
 310                        &mca_bfrops_v12_component.types);
 311 
 312     PMIX_REGISTER_TYPE("PMIX_DATA_TYPE", PMIX_DATA_TYPE,
 313                        pmix12_bfrop_pack_datatype,
 314                        pmix12_bfrop_unpack_datatype,
 315                        pmix12_bfrop_std_copy,
 316                        pmix12_bfrop_print_datatype,
 317                        &mca_bfrops_v12_component.types);
 318 
 319     PMIX_REGISTER_TYPE("PMIX_PROC_STATE", PMIX_PROC_STATE,
 320                        pmix12_bfrop_pack_proc_state,
 321                        pmix12_bfrop_unpack_proc_state,
 322                        pmix12_bfrop_std_copy,
 323                        pmix12_bfrop_print_proc_state,
 324                        &mca_bfrops_v12_component.types);
 325 
 326     PMIX_REGISTER_TYPE("PMIX_PROC_INFO", PMIX_PROC_INFO,
 327                        pmix12_bfrop_pack_proc_info,
 328                        pmix12_bfrop_unpack_proc_info,
 329                        pmix12_bfrop_copy_proc_info,
 330                        pmix12_bfrop_print_proc_info,
 331                        &mca_bfrops_v12_component.types);
 332 
 333     PMIX_REGISTER_TYPE("PMIX_DATA_ARRAY", PMIX_DATA_ARRAY,
 334                        pmix12_bfrop_pack_darray,
 335                        pmix12_bfrop_unpack_darray,
 336                        pmix12_bfrop_copy_darray,
 337                        pmix12_bfrop_print_darray,
 338                        &mca_bfrops_v12_component.types);
 339 
 340     PMIX_REGISTER_TYPE("PMIX_PROC_RANK", PMIX_PROC_RANK,
 341                        pmix12_bfrop_pack_rank,
 342                        pmix12_bfrop_unpack_rank,
 343                        pmix12_bfrop_std_copy,
 344                        pmix12_bfrop_print_rank,
 345                        &mca_bfrops_v12_component.types);
 346 
 347     PMIX_REGISTER_TYPE("PMIX_QUERY", PMIX_QUERY,
 348                        pmix12_bfrop_pack_query,
 349                        pmix12_bfrop_unpack_query,
 350                        pmix12_bfrop_copy_query,
 351                        pmix12_bfrop_print_query,
 352                        &mca_bfrops_v12_component.types);
 353 
 354     /**** DEPRECATED ****/
 355     PMIX_REGISTER_TYPE("PMIX_INFO_ARRAY", PMIX_INFO_ARRAY,
 356                        pmix12_bfrop_pack_array,
 357                        pmix12_bfrop_unpack_array,
 358                        pmix12_bfrop_copy_array,
 359                        pmix12_bfrop_print_array,
 360                        &mca_bfrops_v12_component.types);
 361     /********************/
 362 
 363 
 364     return PMIX_SUCCESS;
 365 }
 366 
 367 static void finalize(void)
 368 {
 369     int n;
 370     pmix_bfrop_type_info_t *info;
 371 
 372     for (n=0; n < mca_bfrops_v12_component.types.size; n++) {
 373         if (NULL != (info = (pmix_bfrop_type_info_t*)pmix_pointer_array_get_item(&mca_bfrops_v12_component.types, n))) {
 374             PMIX_RELEASE(info);
 375             pmix_pointer_array_set_item(&mca_bfrops_v12_component.types, n, NULL);
 376         }
 377     }
 378 }
 379 
 380 static pmix_status_t register_type(const char *name, pmix_data_type_t type,
 381                                    pmix_bfrop_pack_fn_t pack,
 382                                    pmix_bfrop_unpack_fn_t unpack,
 383                                    pmix_bfrop_copy_fn_t copy,
 384                                    pmix_bfrop_print_fn_t print)
 385 {
 386     PMIX_REGISTER_TYPE(name, type,
 387                        pack, unpack,
 388                        copy, print,
 389                        &mca_bfrops_v12_component.types);
 390     return PMIX_SUCCESS;
 391 }
 392 
 393 static const char* data_type_string(pmix_data_type_t type)
 394 {
 395     pmix_bfrop_type_info_t *info;
 396 
 397     if (NULL == (info = (pmix_bfrop_type_info_t*)pmix_pointer_array_get_item(&mca_bfrops_v12_component.types, type))) {
 398         return NULL;
 399     }
 400     return info->odti_name;
 401 }
 402 
 403 int pmix12_v2_to_v1_datatype(pmix_data_type_t v2type)
 404 {
 405     int v1type;
 406 
 407     /* I'm passing the data type to
 408      * a PMIx v1 compatible peer. The data type was redefined
 409      * in v2, and so we have to do some conversions here */
 410     switch(v2type) {
 411         case 20:
 412             /* the client thinks this is simply an int */
 413             v1type = 6;
 414             break;
 415 
 416         case 44:
 417             /* the client thinks this is PMIX_INFO_ARRAY */
 418             v1type = 22;
 419             break;
 420 
 421         case 40:
 422             /* proc rank is just an int in v1 */
 423             v1type = 6;
 424             break;
 425 
 426         case 39:
 427             /* data arrays must be converted to info arrays */
 428             v1type = 22;
 429             break;
 430 
 431         case 23:
 432         case 24:
 433         case 25:
 434         case 26:
 435         case 27:
 436         case 28:
 437         case 29:
 438         case 30:
 439             /* shift up one */
 440             v1type = v2type + 1;
 441             break;
 442 
 443         default:
 444             v1type = v2type;
 445     }
 446     return v1type;
 447 }
 448 
 449 pmix_status_t pmix12_bfrop_store_data_type(pmix_pointer_array_t *regtypes,
 450                                           pmix_buffer_t *buffer,
 451                                           pmix_data_type_t type)
 452 {
 453     int v1type;
 454 
 455     v1type = pmix12_v2_to_v1_datatype(type);
 456 
 457     return pmix12_bfrop_pack_datatype(regtypes, buffer, &v1type, 1, PMIX_INT);
 458 }
 459 
 460 pmix_data_type_t pmix12_v1_to_v2_datatype(int v1type)
 461 {
 462     pmix_data_type_t v2type;
 463 
 464     /* I'm getting the data type that was given to
 465      * me by a PMIx v1 compatible peer. The data type was redefined
 466      * in v2, and so we have to do some conversions here */
 467 
 468     switch(v1type) {
 469         case 20:
 470             /* the peer thinks this is PMIX_HWLOC_TOPO, which we don't support */
 471             v2type = PMIX_UNDEF;
 472             break;
 473 
 474         case 22:
 475             /* the peer thinks this is PMIX_INFO_ARRAY */
 476             v2type = PMIX_INFO_ARRAY;
 477             break;
 478 
 479         case 23:
 480         case 24:
 481         case 25:
 482         case 26:
 483         case 27:
 484         case 28:
 485         case 29:
 486         case 30:
 487         case 31:
 488             /* shift down one */
 489             v2type = v1type - 1;
 490             break;
 491 
 492         default:
 493             v2type = v1type;
 494     }
 495     return v2type;
 496 }
 497 
 498 pmix_status_t pmix12_bfrop_get_data_type(pmix_pointer_array_t *regtypes,
 499                                          pmix_buffer_t *buffer, pmix_data_type_t *type)
 500 {
 501     int32_t n=1;
 502     int v1type;
 503     pmix_status_t rc;
 504 
 505     rc = pmix12_bfrop_unpack_datatype(regtypes, buffer, &v1type, &n, PMIX_INT);
 506     if (UINT16_MAX < v1type) {
 507         *type = 0;
 508         return PMIX_ERR_UNKNOWN_DATA_TYPE;
 509     }
 510     if (PMIX_SUCCESS == rc) {
 511         *type = pmix12_v1_to_v2_datatype(v1type);
 512     }
 513 
 514     return rc;
 515 }
 516 
 517 void pmix12_bfrop_value_load(pmix_value_t *v, const void *data,
 518                             pmix_data_type_t type)
 519 {
 520     pmix_byte_object_t *bo;
 521 
 522     v->type = type;
 523     if (NULL == data) {
 524         /* just set the fields to zero */
 525         memset(&v->data, 0, sizeof(v->data));
 526     } else {
 527         switch(type) {
 528         case PMIX_UNDEF:
 529             break;
 530         case PMIX_BOOL:
 531             memcpy(&(v->data.flag), data, 1);
 532             break;
 533         case PMIX_BYTE:
 534             memcpy(&(v->data.byte), data, 1);
 535             break;
 536         case PMIX_STRING:
 537             v->data.string = strdup(data);
 538             break;
 539         case PMIX_SIZE:
 540             memcpy(&(v->data.size), data, sizeof(size_t));
 541             break;
 542         case PMIX_PID:
 543             memcpy(&(v->data.pid), data, sizeof(pid_t));
 544             break;
 545         case PMIX_INT:
 546             memcpy(&(v->data.integer), data, sizeof(int));
 547             break;
 548         case PMIX_INT8:
 549             memcpy(&(v->data.int8), data, 1);
 550             break;
 551         case PMIX_INT16:
 552             memcpy(&(v->data.int16), data, 2);
 553             break;
 554         case PMIX_INT32:
 555             memcpy(&(v->data.int32), data, 4);
 556             break;
 557         case PMIX_INT64:
 558             memcpy(&(v->data.int64), data, 8);
 559             break;
 560         case PMIX_UINT:
 561             memcpy(&(v->data.uint), data, sizeof(int));
 562             break;
 563         case PMIX_UINT8:
 564             memcpy(&(v->data.uint8), data, 1);
 565             break;
 566         case PMIX_UINT16:
 567             memcpy(&(v->data.uint16), data, 2);
 568             break;
 569         case PMIX_UINT32:
 570             memcpy(&(v->data.uint32), data, 4);
 571             break;
 572         case PMIX_UINT64:
 573             memcpy(&(v->data.uint64), data, 8);
 574             break;
 575         case PMIX_FLOAT:
 576             memcpy(&(v->data.fval), data, sizeof(float));
 577             break;
 578         case PMIX_DOUBLE:
 579             memcpy(&(v->data.dval), data, sizeof(double));
 580             break;
 581         case PMIX_TIMEVAL:
 582             memcpy(&(v->data.tv), data, sizeof(struct timeval));
 583             break;
 584         case PMIX_BYTE_OBJECT:
 585             bo = (pmix_byte_object_t*)data;
 586             v->data.bo.bytes = bo->bytes;
 587             memcpy(&(v->data.bo.size), &bo->size, sizeof(size_t));
 588             break;
 589         case PMIX_TIME:
 590         case PMIX_VALUE:
 591         case PMIX_INFO_ARRAY:
 592         case PMIX_APP:
 593         case PMIX_INFO:
 594         case PMIX_PDATA:
 595         case PMIX_BUFFER:
 596         case PMIX_KVAL:
 597         case PMIX_MODEX:
 598         case PMIX_PERSIST:
 599         case PMIX_PROC:
 600             /* silence warnings */
 601             break;
 602         }
 603     }
 604 }
 605 
 606 pmix_status_t pmix12_bfrop_value_unload(pmix_value_t *kv,
 607                                        void **data,
 608                                        size_t *sz)
 609 {
 610     pmix_status_t rc;
 611 
 612     rc = PMIX_SUCCESS;
 613     if (NULL == data ||
 614         (NULL == *data && PMIX_STRING != kv->type && PMIX_BYTE_OBJECT != kv->type)) {
 615         rc = PMIX_ERR_BAD_PARAM;
 616     } else {
 617         switch(kv->type) {
 618         case PMIX_UNDEF:
 619             rc = PMIX_ERR_UNKNOWN_DATA_TYPE;
 620             break;
 621         case PMIX_BOOL:
 622             memcpy(*data, &(kv->data.flag), 1);
 623             *sz = 1;
 624             break;
 625         case PMIX_BYTE:
 626             memcpy(*data, &(kv->data.byte), 1);
 627             *sz = 1;
 628             break;
 629         case PMIX_STRING:
 630             if (NULL != kv->data.string) {
 631                 *data = strdup(kv->data.string);
 632                 *sz = strlen(kv->data.string);
 633             }
 634             break;
 635         case PMIX_SIZE:
 636             memcpy(*data, &(kv->data.size), sizeof(size_t));
 637             *sz = sizeof(size_t);
 638             break;
 639         case PMIX_PID:
 640             memcpy(*data, &(kv->data.pid), sizeof(pid_t));
 641             *sz = sizeof(pid_t);
 642             break;
 643         case PMIX_INT:
 644             memcpy(*data, &(kv->data.integer), sizeof(int));
 645             *sz = sizeof(int);
 646             break;
 647         case PMIX_INT8:
 648             memcpy(*data, &(kv->data.int8), 1);
 649             *sz = 1;
 650             break;
 651         case PMIX_INT16:
 652             memcpy(*data, &(kv->data.int16), 2);
 653             *sz = 2;
 654             break;
 655         case PMIX_INT32:
 656             memcpy(*data, &(kv->data.int32), 4);
 657             *sz = 4;
 658             break;
 659         case PMIX_INT64:
 660             memcpy(*data, &(kv->data.int64), 8);
 661             *sz = 8;
 662             break;
 663         case PMIX_UINT:
 664             memcpy(*data, &(kv->data.uint), sizeof(int));
 665             *sz = sizeof(int);
 666             break;
 667         case PMIX_UINT8:
 668             memcpy(*data, &(kv->data.uint8), 1);
 669             *sz = 1;
 670             break;
 671         case PMIX_UINT16:
 672             memcpy(*data, &(kv->data.uint16), 2);
 673             *sz = 2;
 674             break;
 675         case PMIX_UINT32:
 676             memcpy(*data, &(kv->data.uint32), 4);
 677             *sz = 4;
 678             break;
 679         case PMIX_UINT64:
 680             memcpy(*data, &(kv->data.uint64), 8);
 681             *sz = 8;
 682             break;
 683         case PMIX_FLOAT:
 684             memcpy(*data, &(kv->data.fval), sizeof(float));
 685             *sz = sizeof(float);
 686             break;
 687         case PMIX_DOUBLE:
 688             memcpy(*data, &(kv->data.dval), sizeof(double));
 689             *sz = sizeof(double);
 690             break;
 691         case PMIX_TIMEVAL:
 692             memcpy(*data, &(kv->data.tv), sizeof(struct timeval));
 693             *sz = sizeof(struct timeval);
 694             break;
 695         case PMIX_BYTE_OBJECT:
 696             if (NULL != kv->data.bo.bytes && 0 < kv->data.bo.size) {
 697                 *data = kv->data.bo.bytes;
 698                 *sz = kv->data.bo.size;
 699             } else {
 700                 *data = NULL;
 701                 *sz = 0;
 702             }
 703             break;
 704         case PMIX_TIME:
 705         case PMIX_VALUE:
 706         case PMIX_INFO_ARRAY:
 707         case PMIX_APP:
 708         case PMIX_INFO:
 709         case PMIX_PDATA:
 710         case PMIX_BUFFER:
 711         case PMIX_KVAL:
 712         case PMIX_MODEX:
 713         case PMIX_PERSIST:
 714         case PMIX_PROC:
 715             /* silence warnings */
 716             rc = PMIX_ERROR;
 717             break;
 718         }
 719     }
 720     return rc;
 721 }

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