apr_status_t svn_subr__win32_xlate_open(win32_xlate_t **xlate_p, const char *topage, const char *frompage, apr_pool_t *pool) { UINT from_page_id, to_page_id; apr_status_t apr_err = APR_SUCCESS; win32_xlate_t *xlate; HRESULT hr; /* First try to initialize for apartment-threaded object concurrency. */ hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); if (hr == RPC_E_CHANGED_MODE) { /* COM already initalized for multi-threaded object concurrency. We are neutral to object concurrency so try to initalize it in the same way for us. */ hr = CoInitializeEx(NULL, COINIT_MULTITHREADED); } if (FAILED(hr)) return APR_EGENERAL; apr_err = get_page_id_from_name(&to_page_id, topage, pool); if (apr_err == APR_SUCCESS) apr_err = get_page_id_from_name(&from_page_id, frompage, pool); if (apr_err == APR_SUCCESS) { xlate = apr_palloc(pool, sizeof(*xlate)); xlate->from_page_id = from_page_id; xlate->to_page_id = to_page_id; *xlate_p = xlate; } CoUninitialize(); return apr_err; }
apr_status_t svn_subr__win32_xlate_open(win32_xlate_t **xlate_p, const char *topage, const char *frompage, apr_pool_t *pool) { UINT from_page_id, to_page_id; apr_status_t apr_err = APR_SUCCESS; win32_xlate_t *xlate; apr_err = get_page_id_from_name(&to_page_id, topage, pool); if (apr_err == APR_SUCCESS) apr_err = get_page_id_from_name(&from_page_id, frompage, pool); if (apr_err == APR_SUCCESS) { xlate = apr_palloc(pool, sizeof(*xlate)); xlate->from_page_id = from_page_id; xlate->to_page_id = to_page_id; *xlate_p = xlate; } return apr_err; }