// caller needs to free() the result WCHAR *ExtractFilenameFromURL(const WCHAR *url) { ScopedMem<WCHAR> urlName(str::Dup(url)); // try to extract the file name from the URL (last path component before query or hash) str::TransChars(urlName, L"/?#", L"\\\0\0"); urlName.Set(str::Dup(path::GetBaseName(urlName))); // unescape hex-escapes (these are usually UTF-8) if (str::FindChar(urlName, '%')) { ScopedMem<char> utf8Name(str::conv::ToUtf8(urlName)); char *src = utf8Name, *dst = utf8Name; while (*src) { int esc; if ('%' == *src && str::Parse(src, "%%%2x", &esc)) { *dst++ = (char)esc; src += 3; } else *dst++ = *src++; } *dst = '\0'; urlName.Set(str::conv::FromUtf8(utf8Name)); } if (str::IsEmpty(urlName.Get())) return NULL; return urlName.StealData(); }
STDMETHODIMP HostNetworkInterface::COMGETTER(NetworkName) (BSTR *aNetworkName) { AutoCaller autoCaller(this); if (FAILED(autoCaller.rc())) return autoCaller.rc(); Utf8Str utf8Name("HostInterfaceNetworking-"); utf8Name.append(Utf8Str(mInterfaceName)) ; Bstr netName(utf8Name); netName.detachTo(aNetworkName); return S_OK; }
nsresult nsDOMAttributeMap::GetNamedItemNSInternal(const nsAString& aNamespaceURI, const nsAString& aLocalName, nsIDOMNode** aReturn, PRBool aRemove) { NS_ENSURE_ARG_POINTER(aReturn); *aReturn = nsnull; if (!mContent) { return NS_OK; } NS_ConvertUTF16toUTF8 utf8Name(aLocalName); PRInt32 nameSpaceID = kNameSpaceID_None; if (!aNamespaceURI.IsEmpty()) { nameSpaceID = nsContentUtils::NameSpaceManager()->GetNameSpaceID(aNamespaceURI); if (nameSpaceID == kNameSpaceID_Unknown) { return NS_OK; } } PRUint32 i, count = mContent->GetAttrCount(); for (i = 0; i < count; ++i) { const nsAttrName* name = mContent->GetAttrNameAt(i); PRInt32 attrNS = name->NamespaceID(); nsIAtom* nameAtom = name->LocalName(); if (nameSpaceID == attrNS && nameAtom->EqualsUTF8(utf8Name)) { nsCOMPtr<nsINodeInfo> ni; mContent->NodeInfo()->NodeInfoManager()-> GetNodeInfo(nameAtom, name->GetPrefix(), nameSpaceID, getter_AddRefs(ni)); NS_ENSURE_TRUE(ni, NS_ERROR_FAILURE); return GetAttribute(ni, aReturn, aRemove); } } return NS_OK; }