AP_DECLARE(char *) ap_server_root_relative(apr_pool_t *p, const char *file)
{
- char *newpath;
- if (apr_filepath_merge(&newpath, ap_server_root, file,
- APR_FILEPATH_TRUENAME, p) == APR_SUCCESS)
+ char *newpath = NULL;
+ apr_status_t rv;
+ rv = apr_filepath_merge(&newpath, ap_server_root, file,
+ APR_FILEPATH_TRUENAME, p);
+ if (newpath && (rv == APR_SUCCESS || APR_STATUS_IS_EPATHWILD(rv)
+ || APR_STATUS_IS_ENOENT(rv)
+ || APR_STATUS_IS_ENOTDIR(rv)) {
return newpath;
- else
+ }
+ else {
return NULL;
+ }
}
AP_DECLARE(const char *) ap_soak_end_container(cmd_parms *cmd, char *directive)