static int test_exdata(void)
{
    MYOBJ *t1, *t2, *t3;
    MYOBJ_EX_DATA *ex_data;
    const char *cp;
    char *p;
    gbl_result = 1;
    p = OPENSSL_strdup("hello world");
    saved_argl = 21;
    saved_argp = OPENSSL_malloc(1);
    saved_idx = CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_APP,
                                        saved_argl, saved_argp,
                                        exnew, exdup, exfree);
    saved_idx2 = CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_APP,
                                         saved_argl, saved_argp,
                                         exnew2, exdup2, exfree2);
    t1 = MYOBJ_new();
    t2 = MYOBJ_new();
    if (!TEST_int_eq(t1->st, 1) || !TEST_int_eq(t2->st, 1))
        return 0;
    if (!TEST_ptr(CRYPTO_get_ex_data(&t1->ex_data, saved_idx2)))
        return 0;
    if (!TEST_ptr(CRYPTO_get_ex_data(&t2->ex_data, saved_idx2)))
        return 0;
    MYOBJ_sethello(t1, p);
    cp = MYOBJ_gethello(t1);
    if (!TEST_ptr_eq(cp, p))
        return 0;
    MYOBJ_sethello2(t1, p);
    cp = MYOBJ_gethello2(t1);
    if (!TEST_ptr_eq(cp, p))
        return 0;
    cp = MYOBJ_gethello(t2);
    if (!TEST_ptr_null(cp))
        return 0;
    cp = MYOBJ_gethello2(t2);
    if (!TEST_ptr_null(cp))
        return 0;
    t3 = MYOBJ_dup(t1);
    if (!TEST_int_eq(t3->st, 1))
        return 0;
    ex_data = CRYPTO_get_ex_data(&t3->ex_data, saved_idx2);
    if (!TEST_ptr(ex_data))
        return 0;
    if (!TEST_int_eq(ex_data->dup, 1))
        return 0;
    cp = MYOBJ_gethello(t3);
    if (!TEST_ptr_eq(cp, p))
        return 0;
    cp = MYOBJ_gethello2(t3);
    if (!TEST_ptr_eq(cp, p))
        return 0;
    MYOBJ_free(t1);
    MYOBJ_free(t2);
    MYOBJ_free(t3);
    OPENSSL_free(saved_argp);
    OPENSSL_free(p);
    if (gbl_result)
      return 1;
    else
      return 0;
}
['static int test_exdata(void)\n{\n    MYOBJ *t1, *t2, *t3;\n    MYOBJ_EX_DATA *ex_data;\n    const char *cp;\n    char *p;\n    gbl_result = 1;\n    p = OPENSSL_strdup("hello world");\n    saved_argl = 21;\n    saved_argp = OPENSSL_malloc(1);\n    saved_idx = CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_APP,\n                                        saved_argl, saved_argp,\n                                        exnew, exdup, exfree);\n    saved_idx2 = CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_APP,\n                                         saved_argl, saved_argp,\n                                         exnew2, exdup2, exfree2);\n    t1 = MYOBJ_new();\n    t2 = MYOBJ_new();\n    if (!TEST_int_eq(t1->st, 1) || !TEST_int_eq(t2->st, 1))\n        return 0;\n    if (!TEST_ptr(CRYPTO_get_ex_data(&t1->ex_data, saved_idx2)))\n        return 0;\n    if (!TEST_ptr(CRYPTO_get_ex_data(&t2->ex_data, saved_idx2)))\n        return 0;\n    MYOBJ_sethello(t1, p);\n    cp = MYOBJ_gethello(t1);\n    if (!TEST_ptr_eq(cp, p))\n        return 0;\n    MYOBJ_sethello2(t1, p);\n    cp = MYOBJ_gethello2(t1);\n    if (!TEST_ptr_eq(cp, p))\n        return 0;\n    cp = MYOBJ_gethello(t2);\n    if (!TEST_ptr_null(cp))\n        return 0;\n    cp = MYOBJ_gethello2(t2);\n    if (!TEST_ptr_null(cp))\n        return 0;\n    t3 = MYOBJ_dup(t1);\n    if (!TEST_int_eq(t3->st, 1))\n        return 0;\n    ex_data = CRYPTO_get_ex_data(&t3->ex_data, saved_idx2);\n    if (!TEST_ptr(ex_data))\n        return 0;\n    if (!TEST_int_eq(ex_data->dup, 1))\n        return 0;\n    cp = MYOBJ_gethello(t3);\n    if (!TEST_ptr_eq(cp, p))\n        return 0;\n    cp = MYOBJ_gethello2(t3);\n    if (!TEST_ptr_eq(cp, p))\n        return 0;\n    MYOBJ_free(t1);\n    MYOBJ_free(t2);\n    MYOBJ_free(t3);\n    OPENSSL_free(saved_argp);\n    OPENSSL_free(p);\n    if (gbl_result)\n      return 1;\n    else\n      return 0;\n}', 'char *CRYPTO_strdup(const char *str, const char* file, int line)\n{\n    char *ret;\n    size_t size;\n    if (str == NULL)\n        return NULL;\n    size = strlen(str) + 1;\n    ret = CRYPTO_malloc(size, file, line);\n    if (ret != NULL)\n        memcpy(ret, str, size);\n    return ret;\n}', 'void *CRYPTO_malloc(size_t num, const char *file, int line)\n{\n    void *ret = NULL;\n    if (malloc_impl != NULL && malloc_impl != CRYPTO_malloc)\n        return malloc_impl(num, file, line);\n    if (num == 0)\n        return NULL;\n    FAILTEST();\n    allow_customize = 0;\n#ifndef OPENSSL_NO_CRYPTO_MDEBUG\n    if (call_malloc_debug) {\n        CRYPTO_mem_debug_malloc(NULL, num, 0, file, line);\n        ret = malloc(num);\n        CRYPTO_mem_debug_malloc(ret, num, 1, file, line);\n    } else {\n        ret = malloc(num);\n    }\n#else\n    osslargused(file); osslargused(line);\n    ret = malloc(num);\n#endif\n    return ret;\n}', 'DEFINE_COMPARISONS(int, int, "%d")', 'static void test_fail_message(const char *prefix, const char *file,\n                              int line, const char *type,\n                              const char *left, const char *right,\n                              const char *op, const char *fmt, ...)\n{\n    va_list ap;\n    va_start(ap, fmt);\n    test_fail_message_va(prefix, file, line, type, left, right, op, fmt, ap);\n    va_end(ap);\n}']