static gpr_uint32 decode_status(grpc_mdelem *md) { gpr_uint32 status; void *user_data = grpc_mdelem_get_user_data(md, destroy_status); if (user_data) { status = ((gpr_uint32)(gpr_intptr) user_data) - STATUS_OFFSET; } else { if (!gpr_parse_bytes_to_uint32(grpc_mdstr_as_c_string(md->value), GPR_SLICE_LENGTH(md->value->slice), &status)) { status = GRPC_STATUS_UNKNOWN; /* could not parse status code */ } grpc_mdelem_set_user_data(md, destroy_status, (void *)(gpr_intptr)(status + STATUS_OFFSET)); } return status; }
static void test_pu32_succeed(const char *s, gpr_uint32 want) { gpr_uint32 out; GPR_ASSERT(gpr_parse_bytes_to_uint32(s, strlen(s), &out)); GPR_ASSERT(out == want); }
static void test_pu32_fail(const char *s) { gpr_uint32 out; GPR_ASSERT(!gpr_parse_bytes_to_uint32(s, strlen(s), &out)); }