NS_IMETHODIMP nsOSHelperAppService::GetProtocolHandlerInfoFromOS(const nsACString &aScheme, PRBool *found, nsIHandlerInfo **_retval) { // printf("nsOSHelperAppService::GetProtocolHandlerInfoFromOS (%s)\n", nsPromiseFlatCString(aScheme).get()); NS_ASSERTION(!aScheme.IsEmpty(), "No scheme was specified!"); nsresult rv = OSProtocolHandlerExists(nsPromiseFlatCString(aScheme).get(), found); if (NS_FAILED(rv)) return rv; nsMIMEInfoAmigaOS *handlerInfo = new nsMIMEInfoAmigaOS(aScheme, nsMIMEInfoBase::eProtocolInfo); NS_ENSURE_TRUE(handlerInfo, NS_ERROR_OUT_OF_MEMORY); NS_ADDREF(*_retval = handlerInfo); if (!*found) { // Code that calls this requires an object regardless if the OS has // something for us, so we return the empty object. return rv; } nsAutoString desc; GetApplicationDescription(aScheme, desc); handlerInfo->SetDefaultDescription(desc); return rv; }
NS_IMETHODIMP Connection::CreateFunction(const nsACString &aFunctionName, PRInt32 aNumArguments, mozIStorageFunction *aFunction) { if (!mDBConn) return NS_ERROR_NOT_INITIALIZED; // Check to see if this function is already defined. We only check the name // because a function can be defined with the same body but different names. SQLiteMutexAutoLock lockedScope(sharedDBMutex); NS_ENSURE_FALSE(mFunctions.Get(aFunctionName, NULL), NS_ERROR_FAILURE); int srv = ::sqlite3_create_function(mDBConn, nsPromiseFlatCString(aFunctionName).get(), aNumArguments, SQLITE_ANY, aFunction, basicFunctionHelper, NULL, NULL); if (srv != SQLITE_OK) return convertResultCode(srv); FunctionInfo info = { aFunction, Connection::FunctionInfo::SIMPLE, aNumArguments }; NS_ENSURE_TRUE(mFunctions.Put(aFunctionName, info), NS_ERROR_OUT_OF_MEMORY); return NS_OK; }
NS_IMETHODIMP Connection::CreateAggregateFunction(const nsACString &aFunctionName, PRInt32 aNumArguments, mozIStorageAggregateFunction *aFunction) { if (!mDBConn) return NS_ERROR_NOT_INITIALIZED; // Check to see if this function name is already defined. SQLiteMutexAutoLock lockedScope(sharedDBMutex); NS_ENSURE_FALSE(mFunctions.Get(aFunctionName, NULL), NS_ERROR_FAILURE); // Because aggregate functions depend on state across calls, you cannot have // the same instance use the same name. We want to enumerate all functions // and make sure this instance is not already registered. NS_ENSURE_FALSE(findFunctionByInstance(aFunction), NS_ERROR_FAILURE); int srv = ::sqlite3_create_function(mDBConn, nsPromiseFlatCString(aFunctionName).get(), aNumArguments, SQLITE_ANY, aFunction, NULL, aggregateFunctionStepHelper, aggregateFunctionFinalHelper); if (srv != SQLITE_OK) return convertResultCode(srv); FunctionInfo info = { aFunction, Connection::FunctionInfo::AGGREGATE, aNumArguments }; NS_ENSURE_TRUE(mFunctions.Put(aFunctionName, info), NS_ERROR_OUT_OF_MEMORY); return NS_OK; }
static bool ReadLine(PRFileDesc* aFD, nsACString& aString) { // ntlm_auth is defined to only send one line in response to each of our // input lines. So this simple unbuffered strategy works as long as we // read the response immediately after sending one request. aString.Truncate(); for (;;) { char buf[1024]; int result = PR_Read(aFD, buf, sizeof(buf)); if (result <= 0) return false; aString.Append(buf, result); if (buf[result - 1] == '\n') { LOG(("Read from ntlm_auth: %s", nsPromiseFlatCString(aString).get())); return true; } } }
/* void bindUTF8StringParameter (in unsigned long aParamIndex, in AUTF8String aValue); */ NS_IMETHODIMP jxMySQL50Statement::BindUTF8StringParameter(PRUint32 aParamIndex, const nsACString & aValue) { if (mConnection == nsnull) { SET_ERROR_RETURN (JX_MYSQL50_ERROR_NOT_CONNECTED); } if (mSTMT == nsnull) { SET_ERROR_RETURN (JX_MYSQL50_ERROR_STMT_NULL); } if (aParamIndex < 0 || aParamIndex >= mIn.mCount) { SET_ERROR_RETURN (JX_MYSQL50_ERROR_ILLEGAL_VALUE); } char* strp = (char*)(nsPromiseFlatCString(aValue).get()); PRUint32 nBytes = strlen(strp); mIn.mBindArrayBufferTYPE_STRING_LEN_IN[aParamIndex] = nBytes; mIn.mBindArrayBufferTYPE_STRING[aParamIndex] = static_cast<char*>(nsMemory::Alloc(nBytes+1)); if (!mIn.mBindArrayBufferTYPE_STRING[aParamIndex]) { SET_ERROR_RETURN (JX_MYSQL50_ERROR_OUT_OF_MEMORY); } memcpy(mIn.mBindArrayBufferTYPE_STRING[aParamIndex], strp, nBytes); mIn.mBIND[aParamIndex].buffer_type = MYSQL_TYPE_STRING; mIn.mBIND[aParamIndex].buffer = mIn.mBindArrayBufferTYPE_STRING[aParamIndex]; mIn.mBIND[aParamIndex].length = 0; mIn.mBIND[aParamIndex].length_value = nBytes; mIn.mBIND[aParamIndex].buffer_length = nBytes; mIn.mBIND[aParamIndex].is_null = 0; return NS_OK; }
NS_IMETHODIMP Connection::RemoveFunction(const nsACString &aFunctionName) { if (!mDBConn) return NS_ERROR_NOT_INITIALIZED; SQLiteMutexAutoLock lockedScope(sharedDBMutex); NS_ENSURE_TRUE(mFunctions.Get(aFunctionName, NULL), NS_ERROR_FAILURE); int srv = ::sqlite3_create_function(mDBConn, nsPromiseFlatCString(aFunctionName).get(), 0, SQLITE_ANY, NULL, NULL, NULL, NULL); if (srv != SQLITE_OK) return convertResultCode(srv); mFunctions.Remove(aFunctionName); return NS_OK; }
NS_IMETHODIMP nsAppStartupNotifier::Observe(nsISupports *aSubject, const char *aTopic, const PRUnichar *someData) { NS_TIME_FUNCTION; NS_ENSURE_ARG(aTopic); nsresult rv; // now initialize all startup listeners nsCOMPtr<nsICategoryManager> categoryManager = do_GetService(NS_CATEGORYMANAGER_CONTRACTID, &rv); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsISimpleEnumerator> enumerator; rv = categoryManager->EnumerateCategory(aTopic, getter_AddRefs(enumerator)); if (NS_FAILED(rv)) return rv; NS_TIME_FUNCTION_MARK("EnumerateCategory"); nsCOMPtr<nsISupports> entry; while (NS_SUCCEEDED(enumerator->GetNext(getter_AddRefs(entry)))) { nsCOMPtr<nsISupportsCString> category = do_QueryInterface(entry, &rv); if (NS_SUCCEEDED(rv)) { nsCAutoString categoryEntry; rv = category->GetData(categoryEntry); nsXPIDLCString contractId; categoryManager->GetCategoryEntry(aTopic, categoryEntry.get(), getter_Copies(contractId)); if (NS_SUCCEEDED(rv)) { // If we see the word "service," in the beginning // of the contractId then we create it as a service // if not we do a createInstance nsCOMPtr<nsISupports> startupInstance; if (Substring(contractId, 0, 8).EqualsLiteral("service,")) startupInstance = do_GetService(contractId.get() + 8, &rv); else startupInstance = do_CreateInstance(contractId, &rv); if (NS_SUCCEEDED(rv)) { // Try to QI to nsIObserver nsCOMPtr<nsIObserver> startupObserver = do_QueryInterface(startupInstance, &rv); if (NS_SUCCEEDED(rv)) { rv = startupObserver->Observe(nsnull, aTopic, nsnull); // mainly for debugging if you want to know if your observer worked. NS_ASSERTION(NS_SUCCEEDED(rv), "Startup Observer failed!\n"); } } else { #ifdef DEBUG nsCAutoString warnStr("Cannot create startup observer : "); warnStr += contractId.get(); NS_WARNING(warnStr.get()); #endif } NS_TIME_FUNCTION_MARK("observer: category: %s cid: %s", categoryEntry.get(), nsPromiseFlatCString(contractId).get()); } } } return NS_OK; }
NS_IMETHODIMP nsDataSignatureVerifier::VerifyData(const nsACString & aData, const nsACString & aSignature, const nsACString & aPublicKey, bool *_retval) { // Allocate an arena to handle the majority of the allocations PRArenaPool *arena; arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE); if (!arena) return NS_ERROR_OUT_OF_MEMORY; // Base 64 decode the key SECItem keyItem; PORT_Memset(&keyItem, 0, sizeof(SECItem)); if (!NSSBase64_DecodeBuffer(arena, &keyItem, nsPromiseFlatCString(aPublicKey).get(), aPublicKey.Length())) { PORT_FreeArena(arena, false); return NS_ERROR_FAILURE; } // Extract the public key from the data CERTSubjectPublicKeyInfo *pki = SECKEY_DecodeDERSubjectPublicKeyInfo(&keyItem); if (!pki) { PORT_FreeArena(arena, false); return NS_ERROR_FAILURE; } SECKEYPublicKey *publicKey = SECKEY_ExtractPublicKey(pki); SECKEY_DestroySubjectPublicKeyInfo(pki); pki = nullptr; if (!publicKey) { PORT_FreeArena(arena, false); return NS_ERROR_FAILURE; } // Base 64 decode the signature SECItem signatureItem; PORT_Memset(&signatureItem, 0, sizeof(SECItem)); if (!NSSBase64_DecodeBuffer(arena, &signatureItem, nsPromiseFlatCString(aSignature).get(), aSignature.Length())) { SECKEY_DestroyPublicKey(publicKey); PORT_FreeArena(arena, false); return NS_ERROR_FAILURE; } // Decode the signature and algorithm CERTSignedData sigData; PORT_Memset(&sigData, 0, sizeof(CERTSignedData)); SECStatus ss = SEC_QuickDERDecodeItem(arena, &sigData, CERT_SignatureDataTemplate, &signatureItem); if (ss != SECSuccess) { SECKEY_DestroyPublicKey(publicKey); PORT_FreeArena(arena, false); return NS_ERROR_FAILURE; } // Perform the final verification DER_ConvertBitString(&(sigData.signature)); ss = VFY_VerifyDataWithAlgorithmID((const unsigned char*)nsPromiseFlatCString(aData).get(), aData.Length(), publicKey, &(sigData.signature), &(sigData.signatureAlgorithm), NULL, NULL); // Clean up remaining objects SECKEY_DestroyPublicKey(publicKey); PORT_FreeArena(arena, false); *_retval = (ss == SECSuccess); return NS_OK; }
void gfxFT2FontList::FindFonts() { #ifdef XP_WIN nsTArray<nsString> searchPaths(3); nsTArray<nsString> fontPatterns(3); fontPatterns.AppendElement(NS_LITERAL_STRING("\\*.ttf")); fontPatterns.AppendElement(NS_LITERAL_STRING("\\*.ttc")); fontPatterns.AppendElement(NS_LITERAL_STRING("\\*.otf")); wchar_t pathBuf[256]; SHGetSpecialFolderPathW(0, pathBuf, CSIDL_WINDOWS, 0); searchPaths.AppendElement(pathBuf); SHGetSpecialFolderPathW(0, pathBuf, CSIDL_FONTS, 0); searchPaths.AppendElement(pathBuf); nsCOMPtr<nsIFile> resDir; NS_GetSpecialDirectory(NS_APP_RES_DIR, getter_AddRefs(resDir)); if (resDir) { resDir->Append(NS_LITERAL_STRING("fonts")); nsAutoString resPath; resDir->GetPath(resPath); searchPaths.AppendElement(resPath); } WIN32_FIND_DATAW results; for (PRUint32 i = 0; i < searchPaths.Length(); i++) { const nsString& path(searchPaths[i]); for (PRUint32 j = 0; j < fontPatterns.Length(); j++) { nsAutoString pattern(path); pattern.Append(fontPatterns[j]); HANDLE handle = FindFirstFileExW(pattern.get(), FindExInfoStandard, &results, FindExSearchNameMatch, NULL, 0); PRBool moreFiles = handle != INVALID_HANDLE_VALUE; while (moreFiles) { nsAutoString filePath(path); filePath.AppendLiteral("\\"); filePath.Append(results.cFileName); AppendFacesFromFontFile(static_cast<const PRUnichar*>(filePath.get())); moreFiles = FindNextFile(handle, &results); } if (handle != INVALID_HANDLE_VALUE) FindClose(handle); } } #elif defined(ANDROID) gfxFontCache *fc = gfxFontCache::GetCache(); if (fc) fc->AgeAllGenerations(); mPrefFonts.Clear(); mCodepointsWithNoFonts.reset(); DIR *d = opendir("/system/fonts"); struct dirent *ent = NULL; while(d && (ent = readdir(d)) != NULL) { int namelen = strlen(ent->d_name); if (namelen > 4 && strcasecmp(ent->d_name + namelen - 4, ".ttf") == 0) { nsCString s("/system/fonts"); s.Append("/"); s.Append(nsDependentCString(ent->d_name)); AppendFacesFromFontFile(nsPromiseFlatCString(s).get()); } } if (d) { closedir(d); } mCodepointsWithNoFonts.SetRange(0,0x1f); // C0 controls mCodepointsWithNoFonts.SetRange(0x7f,0x9f); // C1 controls #endif // XP_WIN && ANDROID }