99 const CFIndex size = CFDictionaryGetCount(
dict());
100 std::unique_ptr<const void *[]> keys(
new const void *[size]);
101 std::unique_ptr<const void *[]> values(
new const void *[size]);
102 CFDictionaryGetKeysAndValues(
dict(), keys.get(), values.get());
103 const CF::String orig_prefix =
orig_key(
"");
104 const CFIndex orig_prefix_len = CFStringGetLength(orig_prefix());
106 for (CFIndex i = 0; i < size; ++i)
108 const CF::String key = CF::string_cast(keys[i]);
109 if (CFStringHasPrefix(key(), orig_prefix()))
111 const CFIndex key_len = CFStringGetLength(key());
112 if (key_len > orig_prefix_len)
114 const CFRange r = CFRangeMake(orig_prefix_len, key_len - orig_prefix_len);
115 const CF::String k(CFStringCreateWithSubstring(kCFAllocatorDefault, key(), r));
116 const CFTypeRef v = values[i];
117 const CF::String vstr = CF::string_cast(v);
119 if (vstr.defined() && CFStringCompare(vstr(), delval(), 0) == kCFCompareEqualTo)
120 CFDictionaryRemoveValue(
mod(), k());
122 CFDictionaryReplaceValue(
mod(), k(), v);
123 CFDictionaryRemoveValue(
mod(), key());