/* ---------------------------------------------------------------------------- * 栞 Method / load */ SHIORI_API BOOL __cdecl load(HGLOBAL hGlobal_loaddir, long loaddir_len) { AutoGrobalFree autoFree(hGlobal_loaddir); ATLTRACE2(_T("[SHIORI::load]\n")); unloadImpl(); CAtlString sLoaddir((LPSTR)hGlobal_loaddir, (int)loaddir_len); CPath loaddir(sLoaddir); ATLTRACE2(_T("[SHIORI::load] loaddir = %s\n"), (LPCTSTR)loaddir); api = new CShioriAPI(hinst, loaddir); return true; }
/* ---------------------------------------------------------------------------- * 栞 Method / request */ SHIORI_API HGLOBAL __cdecl request(HGLOBAL hGlobal_request, long& len) { AutoGrobalFree autoFree(hGlobal_request); ATLTRACE2(_T("[SHIORI::request]\n")); ByteArray res; bool rc = api->Request((const BYTE*) hGlobal_request, len, res); if (!rc) { CreateBatRequestResponse(res ,"SHIOLINK2 API return false"); } // 応答情報の作成 HGLOBAL hRES =GlobalAlloc(GMEM_FIXED ,res.GetCount()); CopyMemory(hRES ,res.GetData() ,res.GetCount()); len =(long)res.GetCount(); return hRES; }
// Copies a subscription key buffer into an array. nsresult CopySubscriptionKeyToArray(nsIPushSubscription* aSubscription, const nsAString& aKeyName, nsTArray<uint8_t>& aKey) { uint8_t* keyBuffer = nullptr; AutoFreeKeyBuffer autoFree(&keyBuffer); uint32_t keyLen; nsresult rv = aSubscription->GetKey(aKeyName, &keyLen, &keyBuffer); if (NS_FAILED(rv)) { return rv; } if (!aKey.SetCapacity(keyLen, fallible) || !aKey.InsertElementsAt(0, keyBuffer, keyLen, fallible)) { return NS_ERROR_OUT_OF_MEMORY; } return NS_OK; }
/** * \brief */ nsresult sbLocalDatabaseLibraryLoader::Init() { TRACE("sbLocalDatabaseLibraryLoader[0x%x] - Init", this); nsresult rv; nsCOMPtr<nsIObserverService> observerService = do_GetService("@mozilla.org/observer-service;1", &rv); if (NS_SUCCEEDED(rv)) { rv = observerService->AddObserver(this, NS_FINAL_UI_STARTUP_CATEGORY, PR_FALSE); NS_ENSURE_SUCCESS(rv, rv); rv = observerService->AddObserver(this, NS_XPCOM_SHUTDOWN_OBSERVER_ID, PR_FALSE); NS_ENSURE_SUCCESS(rv, rv); } nsCOMPtr<nsIPrefService> prefService = do_GetService(NS_PREFSERVICE_CONTRACTID, &rv); NS_ENSURE_SUCCESS(rv, rv); mRootBranch = do_QueryInterface(prefService, &rv); NS_ENSURE_SUCCESS(rv, rv); PRUint32 libraryKeysCount; char** libraryKeys; rv = mRootBranch->GetChildList(PREFBRANCH_LOADER, &libraryKeysCount, &libraryKeys); NS_ENSURE_SUCCESS(rv, rv); sbAutoFreeXPCOMArray<char**> autoFree(libraryKeysCount, libraryKeys); PRBool success = mLibraryInfoTable.Init(PR_MAX(MINIMUM_LIBRARY_COUNT, libraryKeysCount / LOADERINFO_VALUE_COUNT)); NS_ENSURE_TRUE(success, NS_ERROR_FAILURE); for (PRUint32 index = 0; index < libraryKeysCount; index++) { // Should be something like "songbird.library.loader.2.loadAtStartup". nsCAutoString pref(libraryKeys[index]); NS_ASSERTION(StringBeginsWith(pref, NS_LITERAL_CSTRING(PREFBRANCH_LOADER)), "Bad pref string!"); PRUint32 branchLength = NS_LITERAL_CSTRING(PREFBRANCH_LOADER).Length(); PRInt32 firstDotIndex = pref.FindChar('.', branchLength); NS_ASSERTION(firstDotIndex != -1, "Bad pref string!"); PRUint32 keyLength = firstDotIndex - branchLength; NS_ASSERTION(keyLength > 0, "Bad pref string!"); // Should be something like "1". nsCAutoString keyString(Substring(pref, branchLength, keyLength)); PRUint32 libraryKey = keyString.ToInteger(&rv); NS_ENSURE_SUCCESS(rv, rv); // Should be something like "songbird.library.loader.13.". nsCAutoString branchString(Substring(pref, 0, branchLength + keyLength + 1)); NS_ASSERTION(StringEndsWith(branchString, NS_LITERAL_CSTRING(".")), "Bad pref string!"); if (!mLibraryInfoTable.Get(libraryKey, nsnull)) { nsAutoPtr<sbLibraryLoaderInfo> newLibraryInfo(new sbLibraryLoaderInfo()); NS_ENSURE_TRUE(newLibraryInfo, NS_ERROR_OUT_OF_MEMORY); rv = newLibraryInfo->Init(branchString); NS_ENSURE_SUCCESS(rv, rv); success = mLibraryInfoTable.Put(libraryKey, newLibraryInfo); NS_ENSURE_TRUE(success, NS_ERROR_FAILURE); newLibraryInfo.forget(); } } mLibraryInfoTable.Enumerate(VerifyEntriesCallback, nsnull); return NS_OK; }