PRUnichar	*dataUni; if (NS_FAILED(rv = dataLiteral->GetValue(&dataUni)))
const PRUnichar	*dataUni; if (NS_FAILED(rv = dataLiteral->GetValueConst(&dataUni)))
InternetSearchDataSource::FindData(nsIRDFResource *engine, nsString &data){	data.Truncate();	if (!engine)	return(NS_ERROR_NULL_POINTER);	if (!mInner)	return(NS_RDF_NO_VALUE);	nsresult		rv;	nsCOMPtr<nsIRDFNode>	dataTarget = nsnull;	if (NS_SUCCEEDED((rv = mInner->GetTarget(engine, kNC_Data, PR_TRUE,		getter_AddRefs(dataTarget)))) && (dataTarget))	{		nsCOMPtr<nsIRDFLiteral>	dataLiteral = do_QueryInterface(dataTarget);		if (!dataLiteral)			return(rv);		PRUnichar	*dataUni;		if (NS_FAILED(rv = dataLiteral->GetValue(&dataUni)))			return(rv);		data = dataUni;	}	else	{		const char	*engineURI = nsnull;		if (NS_FAILED(rv = engine->GetValueConst(&engineURI)))			return(rv);		nsAutoString	engineStr(engineURI);		if (engineStr.Find(kEngineProtocol) != 0)			return(rv);		engineStr.Cut(0, sizeof(kEngineProtocol) - 1);		char	*baseFilename = engineStr.ToNewCString();		if (!baseFilename)			return(rv);		baseFilename = nsUnescape(baseFilename);		if (!baseFilename)			return(rv);		nsFileSpec	engineSpec(baseFilename);		rv = ReadFileContents(engineSpec, data);		nsCRT::free(baseFilename);		baseFilename = nsnull;		if (NS_FAILED(rv))		{			return(rv);		}		// save file contents		nsCOMPtr<nsIRDFLiteral>	dataLiteral;		if (NS_SUCCEEDED(rv = gRDFService->GetLiteral(data.GetUnicode(), getter_AddRefs(dataLiteral))))		{			if (mInner)			{				mInner->Assert(engine, kNC_Data, dataLiteral, PR_TRUE);			}		}	}	return(rv);}