char *DSO_convert_filename(DSO *dso, const char *filename)
	{
	char *result = NULL;

	if(dso == NULL)
		{
		DSOerr(DSO_F_DSO_CONVERT_FILENAME,ERR_R_PASSED_NULL_PARAMETER);
		return(NULL);
		}
	if(filename == NULL)
		filename = dso->filename;
	if(filename == NULL)
		{
		DSOerr(DSO_F_DSO_CONVERT_FILENAME,DSO_R_NO_FILENAME);
		return(NULL);
		}
	if((dso->flags & DSO_FLAG_NO_NAME_TRANSLATION) == 0)
		{
		if(dso->name_converter != NULL)
			result = dso->name_converter(dso, filename);
		else if(dso->meth->dso_name_converter != NULL)
			result = dso->meth->dso_name_converter(dso, filename);
		}
	if(result == NULL)
		{
		result = OPENSSL_malloc(strlen(filename) + 1);
		if(result == NULL)
			{
			DSOerr(DSO_F_DSO_CONVERT_FILENAME,
					ERR_R_MALLOC_FAILURE);
			return(NULL);
			}
		BUF_strlcpy(result, filename, strlen(filename) + 1);
		}
	return(result);
	}