pmix_status_t pmix_bfrops_base_unpack_query(pmix_pointer_array_t *regtypes, pmix_buffer_t *buffer, void *dest, int32_t *num_vals, pmix_data_type_t type) { pmix_query_t *ptr; int32_t i, n, m; pmix_status_t ret; int32_t nkeys; pmix_output_verbose(20, pmix_bfrops_base_framework.framework_output, "pmix_bfrop_unpack: %d queries", *num_vals); ptr = (pmix_query_t *) dest; n = *num_vals; for (i = 0; i < n; ++i) { PMIX_QUERY_CONSTRUCT(&ptr[i]); /* unpack the number of keys */ m=1; PMIX_BFROPS_UNPACK_TYPE(ret, buffer, &nkeys, &m, PMIX_INT32, regtypes); if (PMIX_SUCCESS != ret) { return ret; } if (0 < nkeys) { /* unpack the keys */ if (NULL == (ptr[i].keys = (char**)calloc(nkeys+1, sizeof(char*)))) { return PMIX_ERR_NOMEM; } /* unpack keys */ m=nkeys; PMIX_BFROPS_UNPACK_TYPE(ret, buffer, ptr[i].keys, &m, PMIX_STRING, regtypes); if (PMIX_SUCCESS != ret) { return ret; } } /* unpack the number of qualifiers */ m=1; PMIX_BFROPS_UNPACK_TYPE(ret, buffer, &ptr[i].nqual, &m, PMIX_SIZE, regtypes); if (PMIX_SUCCESS != ret) { return ret; } if (0 < ptr[i].nqual) { /* unpack the qualifiers */ PMIX_INFO_CREATE(ptr[i].qualifiers, ptr[i].nqual); m = ptr[i].nqual; PMIX_BFROPS_UNPACK_TYPE(ret, buffer, ptr[i].qualifiers, &m, PMIX_INFO, regtypes); if (PMIX_SUCCESS != ret) { return ret; } } } return PMIX_SUCCESS; }
pmix_status_t pmix_bfrop_unpack_query(pmix_buffer_t *buffer, void *dest, int32_t *num_vals, pmix_data_type_t type) { pmix_query_t *ptr; int32_t i, n, m; pmix_status_t ret; int32_t nkeys; pmix_output_verbose(20, pmix_globals.debug_output, "pmix_bfrop_unpack: %d queries", *num_vals); ptr = (pmix_query_t *) dest; n = *num_vals; for (i = 0; i < n; ++i) { PMIX_QUERY_CONSTRUCT(&ptr[i]); /* unpack the number of keys */ m=1; if (PMIX_SUCCESS != (ret = pmix_bfrop_unpack_int32(buffer, &nkeys, &m, PMIX_INT32))) { return ret; } if (0 < nkeys) { /* unpack the keys */ if (NULL == (ptr[i].keys = (char**)calloc(nkeys+1, sizeof(char*)))) { return PMIX_ERR_NOMEM; } /* unpack keys */ m=nkeys; if (PMIX_SUCCESS != (ret = pmix_bfrop_unpack_string(buffer, ptr[i].keys, &m, PMIX_STRING))) { return ret; } } /* unpack the number of qualifiers */ m=1; if (PMIX_SUCCESS != (ret = pmix_bfrop_unpack_sizet(buffer, &ptr[i].nqual, &m, PMIX_SIZE))) { return ret; } if (0 < ptr[i].nqual) { /* unpack the qualifiers */ PMIX_INFO_CREATE(ptr[i].qualifiers, ptr[i].nqual); m = ptr[i].nqual; if (PMIX_SUCCESS != (ret = pmix_bfrop_unpack_info(buffer, ptr[i].qualifiers, &m, PMIX_INFO))) { return ret; } } } return PMIX_SUCCESS; }