本文整理匯總了C++中CFArrayCreateMutable函數的典型用法代碼示例。如果您正苦於以下問題:C++ CFArrayCreateMutable函數的具體用法?C++ CFArrayCreateMutable怎麽用?C++ CFArrayCreateMutable使用的例子?那麽, 這裏精選的函數代碼示例或許可以為您提供幫助。
在下文中一共展示了CFArrayCreateMutable函數的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的C++代碼示例。
示例1: ST_ID3v1_copyGenres
ST_FUNC CFArrayRef ST_ID3v1_copyGenres(void) {
CFMutableArrayRef rv = CFArrayCreateMutable(kCFAllocatorDefault,
ID3v1GenreMax + 1,
&kCFTypeArrayCallBacks);
CFStringRef tmp;
int i;
if(rv) {
for(i = 0; i <= ID3v1GenreMax; ++i) {
tmp = CFStringCreateWithCString(kCFAllocatorDefault, id3_genres[i],
kCFStringEncodingISOLatin1);
if(tmp) {
CFArrayAppendValue(rv, tmp);
CFRelease(tmp);
}
else {
CFRelease(rv);
return NULL;
}
}
}
return (CFArrayRef)rv;
}
示例2: Alloc
/*****************************************************************************
* Alloc
* -
* Functionas as both +[alloc] and -[init] for the plugin. Add any
* initalization of member variables here.
*****************************************************************************/
static BonjourUserEventsPlugin* Alloc(CFUUIDRef factoryID)
{
BonjourUserEventsPlugin* plugin = malloc(sizeof(BonjourUserEventsPlugin));
plugin->_UserEventAgentInterface = &UserEventAgentInterfaceFtbl;
plugin->_pluginContext = NULL;
if (factoryID)
{
plugin->_factoryID = (CFUUIDRef)CFRetain(factoryID);
CFPlugInAddInstanceForFactory(factoryID);
}
plugin->_refCount = 1;
plugin->_tokenToBrowserMap = CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kNetBrowserInfoDictionaryValueCallbacks);
plugin->_browsers = CFDictionaryCreateMutable(NULL, 0, &kNetBrowserInfoDictionaryKeyCallbacks, &kCFTypeDictionaryValueCallBacks);
plugin->_onAddEvents = CFDictionaryCreateMutable(NULL, 0, &kNetBrowserInfoDictionaryKeyCallbacks, &kCFTypeDictionaryValueCallBacks);
plugin->_onRemoveEvents = CFDictionaryCreateMutable(NULL, 0, &kNetBrowserInfoDictionaryKeyCallbacks, &kCFTypeDictionaryValueCallBacks);
plugin->_whileServiceExist = CFDictionaryCreateMutable(NULL, 0, &kNetBrowserInfoDictionaryKeyCallbacks, &kCFTypeDictionaryValueCallBacks);
plugin->_timers = CFArrayCreateMutable(NULL, 0, &kCFTypeArrayCallBacks);
return plugin;
}
示例3: GetSize
//============================================================================
// NCFArray::GetObject : Get the object.
//----------------------------------------------------------------------------
NCFObject NCFArray::GetObject(void) const
{ NCFObject theObject, theValue;
NIndex n, numItems;
// Get the state we need
numItems = GetSize();
if (!theObject.SetObject(CFArrayCreateMutable(kCFAllocatorNano, numItems, &kCFTypeArrayCallBacks)))
return(theObject);
// Get the object
for (n = 0; n < numItems; n++)
{
theValue = NMacTarget::ConvertObjectToCF(GetValue(n));
if (theValue.IsValid())
CFArrayAppendValue(theObject, (CFTypeRef) theValue);
}
return(theObject);
}
示例4: apple_joypad_init
// RetroArch joypad driver:
static bool apple_joypad_init(void)
{
#ifdef OSX
CFMutableArrayRef matcher;
if (!g_hid_manager)
{
g_hid_manager = IOHIDManagerCreate(kCFAllocatorDefault, kIOHIDOptionsTypeNone);
matcher = CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks);
append_matching_dictionary(matcher, kHIDPage_GenericDesktop, kHIDUsage_GD_Joystick);
append_matching_dictionary(matcher, kHIDPage_GenericDesktop, kHIDUsage_GD_GamePad);
IOHIDManagerSetDeviceMatchingMultiple(g_hid_manager, matcher);
CFRelease(matcher);
IOHIDManagerRegisterDeviceMatchingCallback(g_hid_manager, hid_manager_device_attached, 0);
IOHIDManagerScheduleWithRunLoop(g_hid_manager, CFRunLoopGetMain(), kCFRunLoopCommonModes);
IOHIDManagerOpen(g_hid_manager, kIOHIDOptionsTypeNone);
}
#endif
return true;
}
示例5: __CFLocaleCopyUEnumerationAsArray
static CFArrayRef __CFLocaleCopyUEnumerationAsArray(UEnumeration *enumer, UErrorCode *icuErr) {
const UChar *next = NULL;
int32_t len = 0;
CFMutableArrayRef working = NULL;
if (U_SUCCESS(*icuErr)) {
working = CFArrayCreateMutable(kCFAllocatorSystemDefault, 0, &kCFTypeArrayCallBacks);
}
while ((next = uenum_unext(enumer, &len, icuErr)) && U_SUCCESS(*icuErr)) {
CFStringRef string = CFStringCreateWithCharacters(kCFAllocatorSystemDefault, (const UniChar *)next, (CFIndex) len);
CFArrayAppendValue(working, string);
CFRelease(string);
}
if (*icuErr == U_INDEX_OUTOFBOUNDS_ERROR) {
*icuErr = U_ZERO_ERROR; // Temp: Work around bug (ICU 5220) in ucurr enumerator
}
CFArrayRef result = NULL;
if (U_SUCCESS(*icuErr)) {
result = CFArrayCreateCopy(kCFAllocatorSystemDefault, working);
}
if (working != NULL) {
CFRelease(working);
}
return result;
}
示例6: MakeUserDataRec
OpenUserDataRec::OpenUserDataRec( wxFileDialog* d)
{
m_dialog = d;
m_controlAdded = false;
m_saveMode = m_dialog->HasFdFlag(wxFD_SAVE);
m_defaultLocation = m_dialog->GetDirectory();
MakeUserDataRec(m_dialog->GetWildcard());
m_currentfilter = m_dialog->GetFilterIndex();
m_menuitems = NULL;
size_t numFilters = m_extensions.GetCount();
if (numFilters)
{
m_menuitems = CFArrayCreateMutable( kCFAllocatorDefault ,
numFilters , &kCFTypeArrayCallBacks ) ;
for ( size_t i = 0 ; i < numFilters ; ++i )
{
CFArrayAppendValue( m_menuitems , (CFStringRef) wxCFStringRef( m_name[i] ) ) ;
}
}
m_lastRight = m_lastBottom = 0;
}
示例7: jsUndefined
JSValue UserObjectImp::callAsFunction(ExecState *exec)
{
JSValue result = jsUndefined();
JSUserObject* jsThisObj = KJSValueToJSObject(exec->hostThisValue().toThisObject(exec), exec);
if (jsThisObj) {
CFIndex argCount = exec->argumentCount();
CFArrayCallBacks arrayCallBacks;
JSTypeGetCFArrayCallBacks(&arrayCallBacks);
CFMutableArrayRef jsArgs = CFArrayCreateMutable(0, 0, &arrayCallBacks);
if (jsArgs) {
for (CFIndex i = 0; i < argCount; i++) {
JSUserObject* jsArg = KJSValueToJSObject(exec->argument(i), exec);
CFArrayAppendValue(jsArgs, (void*)jsArg);
jsArg->Release();
}
}
JSUserObject* jsResult;
{ // scope
JSGlueAPICallback apiCallback(exec);
// getCallData should have guarded against a NULL fJSUserObject.
assert(fJSUserObject);
jsResult = fJSUserObject->CallFunction(jsThisObj, jsArgs);
}
if (jsResult) {
result = JSObjectKJSValue(jsResult);
jsResult->Release();
}
ReleaseCFType(jsArgs);
jsThisObj->Release();
}
return result;
}
示例8: setInterfaceEAPOLConfiguration
/*
* Function: setInterfaceEAPOLConfiguration
* Purpose:
* Set the EAPOL configuration for the particular interface in the
* cfg->sc_prefs and add the SCNetworkInterfaceRef to cfg->sc_changed_if.
* That allows saveInterfaceEAPOLConfiguration() to know which interfaces
* were changed when it commits the changes to the writable prefs.
*/
STATIC Boolean
setInterfaceEAPOLConfiguration(EAPOLClientConfigurationRef cfg,
SCNetworkInterfaceRef net_if,
CFDictionaryRef dict)
{
CFRange r;
Boolean ret;
ret = SCNetworkInterfaceSetExtendedConfiguration(net_if, kEAPOL, dict);
if (ret == FALSE) {
return (ret);
}
/* keep track of which SCNetworkInterfaceRef's were changed */
if (cfg->sc_changed_if == NULL) {
cfg->sc_changed_if = CFArrayCreateMutable(NULL, 0,
&kCFTypeArrayCallBacks);
}
r.location = 0;
r.length = CFArrayGetCount(cfg->sc_changed_if);
if (CFArrayContainsValue(cfg->sc_changed_if, r, net_if) == FALSE) {
CFArrayAppendValue(cfg->sc_changed_if, net_if);
}
return (TRUE);
}
示例9: iohidmanager_hid_manager_set_device_matching
static int iohidmanager_hid_manager_set_device_matching(
iohidmanager_hid_t *hid)
{
CFMutableArrayRef matcher = CFArrayCreateMutable(kCFAllocatorDefault, 0,
&kCFTypeArrayCallBacks);
if (!matcher)
return -1;
iohidmanager_hid_append_matching_dictionary(matcher,
kHIDPage_GenericDesktop,
kHIDUsage_GD_Joystick);
iohidmanager_hid_append_matching_dictionary(matcher,
kHIDPage_GenericDesktop,
kHIDUsage_GD_GamePad);
IOHIDManagerSetDeviceMatchingMultiple(hid->ptr, matcher);
IOHIDManagerRegisterDeviceMatchingCallback(hid->ptr,
iohidmanager_hid_device_add, 0);
CFRelease(matcher);
return 0;
}
示例10: History
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Name: MyPDEGetSummaryText
Input Parameters:
context : The plugins context
titleArray : an array to store the title of the summary text
summaryArray : an array to store the summary text
Output Parameters:
titleArray : updated with this plugins summary text title
summaryArray : updated with this plugins summary text
err : returns the error status
Description:
Returns the status/state of the plugin in textual form
Change History (most recent first):
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
static
OSStatus MyPDEGetSummaryText(PMPDEContext context,
CFArrayRef *titleArray,
CFArrayRef *summaryArray)
{
OSStatus err = noErr;
CFMutableArrayRef theTitleArray = NULL; // Init CF strings
CFMutableArrayRef theSummaryArray = NULL;
CFStringRef titleStringRef = NULL;
CFStringRef summaryStringRef = NULL;
PageSetupPDEOnlyContextPtr myContext = NULL; // Pointer to global data block.
DebugMessage("PageSetupPDE MyPDEGetSummaryText called\n");
myContext = (PageSetupPDEOnlyContextPtr) context;
*titleArray = NULL;
*summaryArray = NULL;
if (myContext != NULL)
{
// NOTE: if the second parameter to CFArrayCreateMutable
// is not 0 then the array is a FIXED size
theTitleArray = CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks);
theSummaryArray = CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks);
if ((theTitleArray != NULL) && (theSummaryArray != NULL))
{
SInt16 theControlValue = -1;
titleStringRef = CopyLocalizedStringFromPlugin(
CFSTR(" Print Title Text"),
CFSTR("Summary Title"),
myContext->theBundleRef);
theControlValue = GetControlValue(myContext->thePrintTitleControlRef);
switch (theControlValue)
{
case 0:
summaryStringRef = CopyLocalizedStringFromPlugin(
CFSTR(" No"),
CFSTR("Summary Text"),
myContext->theBundleRef);
break;
case 1:
summaryStringRef = CopyLocalizedStringFromPlugin(
CFSTR(" Yes"),
CFSTR("Summary Text"),
myContext->theBundleRef);
break;
}
if(titleStringRef && summaryStringRef){
CFArrayAppendValue(theTitleArray, titleStringRef);
CFArrayAppendValue(theSummaryArray, summaryStringRef);
}else
err = memFullErr;
}else{
err = memFullErr;
}
}else
err = kPMInvalidPDEContext;
// we release these because we've added them already to the title and summary array
// or we don't need them because there was an error
if (titleStringRef)
CFRelease(titleStringRef);
if (summaryStringRef)
CFRelease(summaryStringRef);
// update the data passed in.
if(!err){
*titleArray = theTitleArray;
*summaryArray = theSummaryArray;
}else{
if (theTitleArray)
CFRelease(theTitleArray);
if (theSummaryArray)
CFRelease(theSummaryArray);
}
DebugPrintErr(err, "PageSetupPDE Error from MyPDEGetSummaryText returned %d\n");
return (err);
//.........這裏部分代碼省略.........
示例11: CreateCFArrayFromAEDescList
static OSStatus CreateCFArrayFromAEDescList(
const AEDescList * descList,
CFArrayRef * itemsPtr
)
// This routine's input is an AEDescList that contains replies
// from the "properties of every login item" event. Each element
// of the list is an AERecord with two important properties,
// "path" and "hidden". This routine creates a CFArray that
// corresponds to this list. Each element of the CFArray
// contains two properties, kLIAEURL and
// kLIAEHidden, that are derived from the corresponding
// AERecord properties.
//
// On entry, descList must not be NULL
// On entry, itemsPtr must not be NULL
// On entry, *itemsPtr must be NULL
// On success, *itemsPtr will be a valid CFArray
// On error, *itemsPtr will be NULL
{
OSStatus err;
CFMutableArrayRef result;
long itemCount;
long itemIndex;
AEKeyword junkKeyword;
DescType junkType;
Size junkSize;
assert( itemsPtr != NULL);
assert(*itemsPtr == NULL);
result = NULL;
// Create a place for the result.
err = noErr;
result = CFArrayCreateMutable(NULL, 0, &kCFTypeArrayCallBacks);
if (result == NULL) {
err = coreFoundationUnknownErr;
}
// For each element in the descriptor list...
if (err == noErr) {
err = AECountItems(descList, &itemCount);
}
if (err == noErr) {
for (itemIndex = 1; itemIndex <= itemCount; itemIndex++) {
if (itemIndex == 4) {
int notused = 0;
notused++;
}
AERecord thisItem;
UInt8 thisPath[1024];
Size thisPathSize;
FSRef thisItemRef;
CFURLRef thisItemURL;
Boolean thisItemHidden;
CFDictionaryRef thisItemDict;
thisItem = kAENull;
thisItemURL = NULL;
thisItemDict = NULL;
// Get this element's AERecord.
err = AEGetNthDesc(descList, itemIndex, typeAERecord, &junkKeyword, &thisItem);
if (err != noErr) {
err = noErr;
continue;
}
// Extract the path and create a CFURL.
if (err == noErr) {
err = AEGetKeyPtr(
&thisItem,
propPath,
typeUTF8Text,
&junkType,
thisPath,
sizeof(thisPath) - 1, // to ensure that we can always add null terminator
&thisPathSize
);
}
if (err == noErr) {
thisPath[thisPathSize] = 0;
err = FSPathMakeRef(thisPath, &thisItemRef, NULL);
if (err == noErr) {
thisItemURL = CFURLCreateFromFSRef(NULL, &thisItemRef);
} else {
err = noErr; // swallow error and create an imprecise URL
thisItemURL = CFURLCreateFromFileSystemRepresentation(
NULL,
thisPath,
thisPathSize,
//.........這裏部分代碼省略.........
示例12: IOCreatePlugInInterfaceForService
kern_return_t
IOCreatePlugInInterfaceForService(io_service_t service,
CFUUIDRef pluginType, CFUUIDRef interfaceType,
IOCFPlugInInterface *** theInterface, SInt32 * theScore)
{
CFDictionaryRef plist = 0;
CFArrayRef plists;
CFArrayRef factories;
CFMutableArrayRef candidates;
CFMutableArrayRef scores;
CFIndex index;
CFIndex insert;
CFUUIDRef factoryID;
kern_return_t kr;
SInt32 score;
IOCFPlugInInterface ** interface;
Boolean haveOne;
kr = IOFindPlugIns( service, pluginType,
&factories, &plists );
if( KERN_SUCCESS != kr) {
if (factories) CFRelease(factories);
if (plists) CFRelease(plists);
return( kr );
}
if ((KERN_SUCCESS != kr)
|| (factories == NULL)
|| (0 == CFArrayGetCount(factories))) {
// printf("No factories for type\n");
if (factories) CFRelease(factories);
if (plists) CFRelease(plists);
return( kIOReturnUnsupported );
}
candidates = CFArrayCreateMutable(kCFAllocatorDefault, 0, NULL);
scores = CFArrayCreateMutable(kCFAllocatorDefault, 0, NULL);
// allocate and Probe all
if (candidates && scores) {
CFIndex numfactories = CFArrayGetCount(factories);
for ( index = 0; index < numfactories; index++ ) {
IUnknownVTbl ** iunknown;
factoryID = (CFUUIDRef) CFArrayGetValueAtIndex(factories, index);
iunknown = (IUnknownVTbl **)
CFPlugInInstanceCreate(NULL, factoryID, pluginType);
if (!iunknown) {
// printf("Failed to create instance (link error?)\n");
continue;
}
(*iunknown)->QueryInterface(iunknown, CFUUIDGetUUIDBytes(interfaceType),
(LPVOID *)&interface);
// Now we are done with IUnknown interface
(*iunknown)->Release(iunknown);
if (!interface) {
// printf("Failed to get interface.\n");
continue;
}
if (plists)
plist = (CFDictionaryRef) CFArrayGetValueAtIndex( plists, index );
score = 0; // from property table
kr = (*interface)->Probe(interface, plist, service, &score);
if (kIOReturnSuccess == kr) {
CFIndex numscores = CFArrayGetCount(scores);
for (insert = 0; insert < numscores; insert++) {
if (score > (SInt32) ((intptr_t) CFArrayGetValueAtIndex(scores, insert)))
break;
}
CFArrayInsertValueAtIndex(candidates, insert, (void *) interface);
CFArrayInsertValueAtIndex(scores, insert, (void *) (intptr_t) score);
} else
(*interface)->Release(interface);
}
}
// Start in score order
CFIndex candidatecount = CFArrayGetCount(candidates);
for (haveOne = false, index = 0;
index < candidatecount;
index++) {
Boolean freeIt;
if (plists)
plist = (CFDictionaryRef) CFArrayGetValueAtIndex(plists, index );
interface = (IOCFPlugInInterface **)
CFArrayGetValueAtIndex(candidates, index );
if (!haveOne) {
haveOne = (kIOReturnSuccess == (*interface)->Start(interface, plist, service));
freeIt = !haveOne;
if (haveOne) {
*theInterface = interface;
*theScore = (SInt32) (intptr_t)
CFArrayGetValueAtIndex(scores, index );
}
} else
//.........這裏部分代碼省略.........
示例13: KJSValueToCFTypeInternal
//.........這裏部分代碼省略.........
temp = temp->next;
}
ObjectImpList imps;
imps.next = inImps;
imps.imp = imp;
//[...] HACK since we do not have access to the class info we use class name instead
#if 0
if (object->inherits(&ArrayInstanceImp::info))
#else
if (object->className() == "Array")
#endif
{
isArray = true;
JSGlueGlobalObject* globalObject = static_cast<JSGlueGlobalObject*>(exec->dynamicGlobalObject());
if (globalObject && (globalObject->Flags() & kJSFlagConvertAssociativeArray)) {
PropertyNameArray propNames(exec);
object->getPropertyNames(exec, propNames);
PropertyNameArray::const_iterator iter = propNames.begin();
PropertyNameArray::const_iterator end = propNames.end();
while(iter != end && isArray)
{
Identifier propName = *iter;
UString ustr = propName.ustring();
const UniChar* uniChars = (const UniChar*)ustr.characters();
int size = ustr.length();
while (size--) {
if (uniChars[size] < '0' || uniChars[size] > '9') {
isArray = false;
break;
}
}
iter++;
}
}
}
if (isArray)
{
// This is an KJS array
unsigned int length = object->get(exec, Identifier(exec, "length")).toUInt32(exec);
result = CFArrayCreateMutable(0, 0, &kCFTypeArrayCallBacks);
if (result)
{
for (unsigned i = 0; i < length; i++)
{
CFTypeRef cfValue = KJSValueToCFTypeInternal(object->get(exec, i), exec, &imps);
CFArrayAppendValue((CFMutableArrayRef)result, cfValue);
ReleaseCFType(cfValue);
}
}
}
else
{
// Not an array, just treat it like a dictionary which contains (property name, property value) pairs
PropertyNameArray propNames(exec);
object->getPropertyNames(exec, propNames);
{
result = CFDictionaryCreateMutable(0,
0,
&kCFTypeDictionaryKeyCallBacks,
&kCFTypeDictionaryValueCallBacks);
if (result)
{
PropertyNameArray::const_iterator iter = propNames.begin();
PropertyNameArray::const_iterator end = propNames.end();
while(iter != end)
{
Identifier propName = *iter;
if (object->hasProperty(exec, propName))
{
CFStringRef cfKey = IdentifierToCFString(propName);
CFTypeRef cfValue = KJSValueToCFTypeInternal(object->get(exec, propName), exec, &imps);
if (cfKey && cfValue)
{
CFDictionaryAddValue((CFMutableDictionaryRef)result, cfKey, cfValue);
}
ReleaseCFType(cfKey);
ReleaseCFType(cfValue);
}
iter++;
}
}
}
}
}
return result;
}
if (inValue.isUndefinedOrNull())
{
result = RetainCFType(GetCFNull());
return result;
}
ASSERT_NOT_REACHED();
return 0;
}
示例14: _CFPreferencesCreateDomainList
__private_extern__ CFArrayRef _CFPreferencesCreateDomainList(CFStringRef userName, CFStringRef hostName) {
CFAllocatorRef prefAlloc = __CFPreferencesAllocator();
CFArrayRef domains;
CFMutableArrayRef marray;
CFStringRef *cachedDomainKeys;
CFPreferencesDomainRef *cachedDomains;
SInt32 idx, cnt;
CFStringRef suffix;
UInt32 suffixLen;
CFURLRef prefDir = _preferencesDirectoryForUserHost(userName, hostName);
if (!prefDir) {
return NULL;
}
if (hostName == kCFPreferencesAnyHost) {
suffix = CFStringCreateWithCString(prefAlloc, ".plist", kCFStringEncodingASCII);
} else if (hostName == kCFPreferencesCurrentHost) {
CFStringRef hostID = _CFPreferencesGetByHostIdentifierString();
suffix = CFStringCreateWithFormat(prefAlloc, NULL, CFSTR(".%@.plist"), hostID);
} else {
suffix = CFStringCreateWithFormat(prefAlloc, NULL, CFSTR(".%@.plist"), hostName); // sketchy - this allows someone to create a domain list for an arbitrary hostname.
}
suffixLen = CFStringGetLength(suffix);
domains = (CFArrayRef)CFURLCreatePropertyFromResource(prefAlloc, prefDir, kCFURLFileDirectoryContents, NULL);
CFRelease(prefDir);
if (domains){
marray = CFArrayCreateMutableCopy(prefAlloc, 0, domains);
CFRelease(domains);
} else {
marray = CFArrayCreateMutable(prefAlloc, 0, & kCFTypeArrayCallBacks);
}
for (idx = CFArrayGetCount(marray)-1; idx >= 0; idx --) {
CFURLRef url = (CFURLRef)CFArrayGetValueAtIndex(marray, idx);
CFStringRef string = CFURLCopyFileSystemPath(url, kCFURLPOSIXPathStyle);
if (!CFStringHasSuffix(string, suffix)) {
CFArrayRemoveValueAtIndex(marray, idx);
} else {
CFStringRef dom = CFStringCreateWithSubstring(prefAlloc, string, CFRangeMake(0, CFStringGetLength(string) - suffixLen));
if (CFEqual(dom, CFSTR(".GlobalPreferences"))) {
CFArraySetValueAtIndex(marray, idx, kCFPreferencesAnyApplication);
} else {
CFArraySetValueAtIndex(marray, idx, dom);
}
CFRelease(dom);
}
CFRelease(string);
}
CFRelease(suffix);
// Now add any domains added in the cache; delete any that have been deleted in the cache
__CFSpinLock(&domainCacheLock);
if (!domainCache) {
__CFSpinUnlock(&domainCacheLock);
return marray;
}
cnt = CFDictionaryGetCount(domainCache);
cachedDomainKeys = (CFStringRef *)CFAllocatorAllocate(prefAlloc, 2 * cnt * sizeof(CFStringRef), 0);
cachedDomains = (CFPreferencesDomainRef *)(cachedDomainKeys + cnt);
CFDictionaryGetKeysAndValues(domainCache, (const void **)cachedDomainKeys, (const void **)cachedDomains);
__CFSpinUnlock(&domainCacheLock);
suffix = _CFPreferencesCachePrefixForUserHost(userName, hostName);
suffixLen = CFStringGetLength(suffix);
for (idx = 0; idx < cnt; idx ++) {
CFStringRef domainKey = cachedDomainKeys[idx];
CFPreferencesDomainRef domain = cachedDomains[idx];
CFStringRef domainName;
CFIndex keyCount = 0;
if (!CFStringHasPrefix(domainKey, suffix)) continue;
domainName = CFStringCreateWithSubstring(prefAlloc, domainKey, CFRangeMake(suffixLen, CFStringGetLength(domainKey) - suffixLen));
if (CFEqual(domainName, CFSTR("*"))) {
CFRelease(domainName);
domainName = (CFStringRef)CFRetain(kCFPreferencesAnyApplication);
} else if (CFEqual(domainName, kCFPreferencesCurrentApplication)) {
CFRelease(domainName);
domainName = (CFStringRef)CFRetain(_CFProcessNameString());
}
CFDictionaryRef d = _CFPreferencesDomainDeepCopyDictionary(domain);
keyCount = d ? CFDictionaryGetCount(d) : 0;
if (keyCount) CFRelease(d);
if (keyCount == 0) {
// Domain was deleted
SInt32 firstIndexOfValue = CFArrayGetFirstIndexOfValue(marray, CFRangeMake(0, CFArrayGetCount(marray)), domainName);
if (0 <= firstIndexOfValue) {
CFArrayRemoveValueAtIndex(marray, firstIndexOfValue);
}
} else if (!CFArrayContainsValue(marray, CFRangeMake(0, CFArrayGetCount(marray)), domainName)) {
CFArrayAppendValue(marray, domainName);
}
CFRelease(domainName);
}
CFRelease(suffix);
CFAllocatorDeallocate(prefAlloc, cachedDomainKeys);
return marray;
}
示例15: proxy_configuration_update
__private_extern__
CF_RETURNS_RETAINED CFDictionaryRef
proxy_configuration_update(CFDictionaryRef defaultProxy,
CFDictionaryRef services,
CFArrayRef serviceOrder,
CFDictionaryRef servicesInfo)
{
CFIndex i;
CFMutableDictionaryRef myDefault;
Boolean myOrderAdded = FALSE;
CFMutableDictionaryRef newProxy = NULL;
CFIndex n_proxies;
CFDictionaryRef proxy;
CFMutableArrayRef proxies;
// establish full list of proxies
proxies = CFArrayCreateMutable(NULL, 0, &kCFTypeArrayCallBacks);
// collect (and add) any "supplemental" proxy configurations
add_supplemental_proxies(proxies, services, serviceOrder);
// add the "default" proxy
add_default_proxy(proxies, defaultProxy, &myOrderAdded);
// sort proxies, cleanup
n_proxies = CFArrayGetCount(proxies);
if (n_proxies > 1) {
CFArraySortValues(proxies, CFRangeMake(0, n_proxies), compareDomain, NULL);
}
// cleanup
for (i = n_proxies - 1; i >= 0; i--) {
proxy = CFArrayGetValueAtIndex(proxies, i);
if ((i > 0) &&
!CFDictionaryContainsKey(proxy, kSCPropNetProxiesSupplementalMatchDomain)) {
// remove non-supplemental proxy
CFArrayRemoveValueAtIndex(proxies, i);
n_proxies--;
continue;
}
newProxy = CFDictionaryCreateMutableCopy(NULL, 0, proxy);
CFDictionaryRemoveValue(newProxy, PROXY_MATCH_ORDER_KEY);
CFDictionaryRemoveValue(newProxy, ORDER_KEY);
CFArraySetValueAtIndex(proxies, i, newProxy);
CFRelease(newProxy);
}
// update the default proxy
myDefault = CFDictionaryCreateMutableCopy(NULL,
0,
CFArrayGetValueAtIndex(proxies, 0));
if (myOrderAdded && (n_proxies > 1)) {
CFDictionaryRef proxy;
proxy = CFArrayGetValueAtIndex(proxies, 1);
if (CFDictionaryContainsKey(proxy, kSCPropNetProxiesSupplementalMatchDomain)) {
// if not a supplemental "default" proxy (a match domain name is
// present)
CFDictionaryRemoveValue(myDefault, PROXY_MATCH_ORDER_KEY);
}
}
CFArraySetValueAtIndex(proxies, 0, myDefault);
CFRelease(myDefault);
// establish proxy configuration
if (n_proxies > 0) {
CFDictionaryRef app_layer;
CFDictionaryRef scoped;
CFArrayRef serviceOrderAll;
Boolean skip = FALSE;
CFArrayRef supplemental;
proxy = CFArrayGetValueAtIndex(proxies, 0);
if (!CFDictionaryContainsKey(proxy, kSCPropNetProxiesSupplementalMatchDomain)) {
// if we have "a" default (non-supplemental) proxy
newProxy = CFDictionaryCreateMutableCopy(NULL, 0, proxy);
CFDictionaryRemoveValue(newProxy, kSCPropNetProxiesSupplementalMatchDomains);
CFDictionaryRemoveValue(newProxy, kSCPropNetProxiesSupplementalMatchOrders);
skip = TRUE;
} else {
newProxy = CFDictionaryCreateMutable(NULL,
0,
&kCFTypeDictionaryKeyCallBacks,
&kCFTypeDictionaryValueCallBacks);
}
serviceOrderAll = service_order_copy_all(services, serviceOrder);
// collect (and add) any "supplemental" proxy configurations
supplemental = copy_supplemental_proxies(proxies, skip);
//.........這裏部分代碼省略.........