]> git.saurik.com Git - apple/security.git/blobdiff - OSX/libsecurity_utilities/lib/cfutilities.h
Security-58286.270.3.0.1.tar.gz
[apple/security.git] / OSX / libsecurity_utilities / lib / cfutilities.h
index a29174d074a93ff16b4b20ef2d89b35e1614c961..888de1c050cc7132a417262cfebd3ba98f48483b 100644 (file)
@@ -342,8 +342,8 @@ inline CFStringRef makeCFString(CFDataRef data, CFStringEncoding encoding = kCFS
 //
 // Create CFURL objects from various sources
 //
-CFURLRef makeCFURL(const char *s, bool isDirectory = false, CFURLRef base = NULL);
-CFURLRef makeCFURL(CFStringRef s, bool isDirectory = false, CFURLRef base = NULL);
+CFURLRef CF_RETURNS_RETAINED makeCFURL(const char *s, bool isDirectory = false, CFURLRef base = NULL);
+CFURLRef CF_RETURNS_RETAINED makeCFURL(CFStringRef s, bool isDirectory = false, CFURLRef base = NULL);
 
 inline CFURLRef makeCFURL(const string &s, bool isDirectory = false, CFURLRef base = NULL)
 {
@@ -475,10 +475,10 @@ private:
 //
 // Make CFDictionaries from stuff
 //
-CFDictionaryRef makeCFDictionary(unsigned count, ...);                                 // key/value pairs
-CFMutableDictionaryRef makeCFMutableDictionary();                                              // empty
-CFMutableDictionaryRef makeCFMutableDictionary(unsigned count, ...);   // (count) key/value pairs
-CFMutableDictionaryRef makeCFMutableDictionary(CFDictionaryRef dict);  // copy of dictionary
+CFDictionaryRef makeCFDictionary(unsigned count, ...) CF_RETURNS_RETAINED;                                     // key/value pairs
+CFMutableDictionaryRef makeCFMutableDictionary() CF_RETURNS_RETAINED;                                          // empty
+CFMutableDictionaryRef makeCFMutableDictionary(unsigned count, ...) CF_RETURNS_RETAINED;       // (count) key/value pairs
+CFMutableDictionaryRef makeCFMutableDictionary(CFDictionaryRef dict) CF_RETURNS_RETAINED;      // copy of dictionary
 
 CFDictionaryRef makeCFDictionaryFrom(CFDataRef data) CF_RETURNS_RETAINED;// interpret plist form
 CFDictionaryRef makeCFDictionaryFrom(const void *data, size_t length) CF_RETURNS_RETAINED; // ditto
@@ -555,12 +555,28 @@ void cfDictionaryApplyBlock(CFDictionaryRef source, CFDictionaryApplierBlock blo
 
 //
 // CFURLAccess wrappers for specific purposes
+// cfLoadFile family will use mmap(2) when appropriate
+// cfReadFile will read the data into memory
+// cfMapFile will mmap(2) the file
 //
-CFDataRef cfLoadFile(CFURLRef url);
-CFDataRef cfLoadFile(int fd, size_t bytes);
-inline CFDataRef cfLoadFile(CFStringRef path) { return cfLoadFile(CFTempURL(path)); }
-inline CFDataRef cfLoadFile(const std::string &path) { return cfLoadFile(CFTempURL(path)); }
-inline CFDataRef cfLoadFile(const char *path) { return cfLoadFile(CFTempURL(path)); }
+CFDataRef CF_RETURNS_RETAINED cfLoadFile(CFURLRef url);
+CFDataRef CF_RETURNS_RETAINED cfLoadFile(int fd, size_t bytes);
+inline CFDataRef CF_RETURNS_RETAINED cfLoadFile(CFStringRef path) { return cfLoadFile(CFTempURL(path)); }
+inline CFDataRef CF_RETURNS_RETAINED cfLoadFile(const std::string &path) { return cfLoadFile(CFTempURL(path)); }
+inline CFDataRef CF_RETURNS_RETAINED cfLoadFile(const char *path) { return cfLoadFile(CFTempURL(path)); }
+
+
+CFDataRef cfReadFile(CFURLRef url) CF_RETURNS_RETAINED;
+CFDataRef cfReadFile(int fd, size_t bytes) CF_RETURNS_RETAINED;
+inline CFDataRef cfReadFile(CFStringRef path) { return cfReadFile(CFTempURL(path)); }
+inline CFDataRef cfReadFile(const std::string &path) { return cfReadFile(CFTempURL(path)); }
+inline CFDataRef cfReadFile(const char *path) { return cfReadFile(CFTempURL(path)); }
+
+CFDataRef cfMapFile(CFURLRef url) CF_RETURNS_RETAINED;
+CFDataRef cfMapFile(int fd, size_t bytes) CF_RETURNS_RETAINED;
+inline CFDataRef cfMapFile(CFStringRef path) { return cfMapFile(CFTempURL(path)); }
+inline CFDataRef cfMapFile(const std::string &path) { return cfMapFile(CFTempURL(path)); }
+inline CFDataRef cfMapFile(const char *path) { return cfMapFile(CFTempURL(path)); }
 
 
 //
@@ -623,7 +639,7 @@ CFToVector<VectorBase, CFRefType, convert>::CFToVector(CFArrayRef arrayRef)
 // Make CFArrays from stuff.
 //
 template <class Iterator, class Generator>
-inline CFArrayRef makeCFArrayFrom(const Generator &generate, Iterator first, Iterator last)
+inline CFArrayRef CF_RETURNS_RETAINED makeCFArrayFrom(const Generator &generate, Iterator first, Iterator last)
 {
        // how many elements?
        size_t size = distance(first, last);