CFURL.h
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:12k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. /*
  2.      File:       CFURL.h
  3.  
  4.      Contains:   CoreFoundation urls
  5.  
  6.      Version:    Technology: Mac OS X
  7.                  Release:    QuickTime 6.0.2
  8.  
  9.      Copyright:  (c) 1999-2001 by Apple Computer, Inc., all rights reserved
  10.  
  11.      Bugs?:      For bug reports, consult the following page on
  12.                  the World Wide Web:
  13.  
  14.                      http://developer.apple.com/bugreporter/
  15.  
  16. */
  17. #ifndef __CFURL__
  18. #define __CFURL__
  19. #ifndef __CFBASE__
  20. #include "CFBase.h"
  21. #endif
  22. #ifndef __CFDATA__
  23. #include "CFData.h"
  24. #endif
  25. #ifndef __CFSTRING__
  26. #include "CFString.h"
  27. #endif
  28. #if PRAGMA_ONCE
  29. #pragma once
  30. #endif
  31. #ifdef __cplusplus
  32. extern "C" {
  33. #endif
  34. #if PRAGMA_IMPORT
  35. #pragma import on
  36. #endif
  37. #if PRAGMA_STRUCT_ALIGN
  38.     #pragma options align=mac68k
  39. #elif PRAGMA_STRUCT_PACKPUSH
  40.     #pragma pack(push, 2)
  41. #elif PRAGMA_STRUCT_PACK
  42.     #pragma pack(2)
  43. #endif
  44. #if PRAGMA_ENUM_ALWAYSINT
  45.     #if defined(__fourbyteints__) && !__fourbyteints__ 
  46.         #define __CFURL__RESTORE_TWOBYTEINTS
  47.         #pragma fourbyteints on
  48.     #endif
  49.     #pragma enumsalwaysint on
  50. #elif PRAGMA_ENUM_OPTIONS
  51.     #pragma option enum=int
  52. #elif PRAGMA_ENUM_PACK
  53.     #if __option(pack_enums)
  54.         #define __CFURL__RESTORE_PACKED_ENUMS
  55.         #pragma options(!pack_enums)
  56.     #endif
  57. #endif
  58. typedef UInt32                          CFURLPathStyle;
  59. enum {
  60.     kCFURLPOSIXPathStyle        = 0,
  61.     kCFURLHFSPathStyle          = 1,
  62.     kCFURLWindowsPathStyle      = 2
  63. };
  64. typedef struct __CFURL * CFURLRef;
  65. EXTERN_API_C( CFTypeID )
  66. CFURLGetTypeID                  (void);
  67. /* encoding will be used both to interpret the bytes of URLBytes, and to */
  68. /* interpret any percent-escapes within the bytes. */
  69. EXTERN_API_C( CFURLRef )
  70. CFURLCreateWithBytes            (CFAllocatorRef         allocator,
  71.                                  const UInt8 *          URLBytes,
  72.                                  CFIndex                length,
  73.                                  CFStringEncoding       encoding,
  74.                                  CFURLRef               baseURL);
  75. /* Escapes any character that is not 7-bit ASCII with the byte-code */
  76. /* for the given encoding.  If escapeWhitespace is true, whitespace */
  77. /* characters (' ', 't', 'r', 'n') will be escaped also (desirable */
  78. /* if embedding the URL into a larger text stream like HTML) */
  79. EXTERN_API_C( CFDataRef )
  80. CFURLCreateData                 (CFAllocatorRef         allocator,
  81.                                  CFURLRef               url,
  82.                                  CFStringEncoding       encoding,
  83.                                  Boolean                escapeWhitespace);
  84. /* Any escape sequences in URLString will be interpreted via UTF-8. */
  85. EXTERN_API_C( CFURLRef )
  86. CFURLCreateWithString           (CFAllocatorRef         allocator,
  87.                                  CFStringRef            URLString,
  88.                                  CFURLRef               baseURL);
  89. /* filePath should be the URL's path expressed as a path of the type */
  90. /* fsType.  If filePath is not absolute, the resulting URL will be */
  91. /* considered relative to the current working directory (evaluated */
  92. /* at creation time).  isDirectory determines whether filePath is */
  93. /* treated as a directory path when resolving against relative path */
  94. /* components */
  95. EXTERN_API_C( CFURLRef )
  96. CFURLCreateWithFileSystemPath   (CFAllocatorRef         allocator,
  97.                                  CFStringRef            filePath,
  98.                                  CFURLPathStyle         pathStyle,
  99.                                  Boolean                isDirectory);
  100. /* Returns the URL's path in a form suitable for file system use. */
  101. /* The path has been fully processed for the file system type requested */
  102. /* by fsType.  If resolveAgainstBase is TRUE, then the URL's path is first */
  103. /* resolved against that of its base URL (if a base URL exists) before being returned. */
  104. EXTERN_API_C( CFStringRef )
  105. CFURLCreateStringWithFileSystemPath (CFAllocatorRef     allocator,
  106.                                  CFURLRef               anURL,
  107.                                  CFURLPathStyle         pathStyle,
  108.                                  Boolean                resolveAgainstBase);
  109. /* Creates a new URL by resolving the relative portion of relativeURL against its base. */
  110. EXTERN_API_C( CFURLRef )
  111. CFURLCopyAbsoluteURL            (CFURLRef               relativeURL);
  112. /* Returns the URL's string. */
  113. EXTERN_API_C( CFStringRef )
  114. CFURLGetString                  (CFURLRef               anURL);
  115. /* Returns the base URL if it exists */
  116. EXTERN_API_C( CFURLRef )
  117. CFURLGetBaseURL                 (CFURLRef               anURL);
  118. /* All URLs can be broken into two pieces - the scheme (preceding the first colon) and the resource */
  119. /* specifier (following the first colon).  Most URLs are also "standard" URLs conforming to RFC 1808 */
  120. /* (available from www.w3c.org).  This category includes URLs of the file, http, https, and ftp */
  121. /* schemes, to name a few.  Standard URLs start the resource specifier with two slashes ("//"), and */
  122. /* can be broken into 4 distinct pieces - the scheme, the net location, the path, and further */
  123. /* resource specifiers (typically an optional parameter, query, and/or fragment).  The net location */
  124. /* appears immediately following the two slashes and goes up to the next slash; it's format is */
  125. /* scheme-specific, but is usually composed of some or all of a username, password, host name, and */
  126. /* port.  The path is a series of path components separated by slashes; if the net location is */
  127. /* present, the path always begins with a slash.  Standard URLs can be relative to another URL, in */
  128. /* which case at least the scheme and possibly other pieces as well come from the base URL (see RFC */
  129. /* 1808 for precise details when resolving a relative URL against its base).  The full URL is therefore */
  130. /* <scheme> "://" <net location> <path, always starting with a slash> <additional resource specifiers> */
  131. /* If a given CFURL can be decomposed (that is, conforms to RFC 1808), you can ask for each of the four */
  132. /* basic pieces (scheme, net location, path, and resource specifer) separately, as well as for its base */
  133. /* URL.  The basic pieces are returned with any percent escape sequences still in place (although note */
  134. /* that the scheme may not legally include any percent escapes); this is to allow the caller to distinguish */
  135. /* between percent sequences that may have syntactic meaning if replaced by the character being escaped */
  136. /* (for instance, a '/' in a path component).  Since only the individual schemes know which characters */
  137. /* are syntactically significant, CFURL cannot safely replace any percent escape sequences.  However, */
  138. /* you can use CFStringCreateReplacingPercentEscapes() to create a new string with the percent escapes */
  139. /* removed.  The first argument is the original string containing percent escapes; the second argument */
  140. /* is a string containing any characters that, if escaped in the original string, should NOT be replaced. */
  141. /* Note that this function may return the original string (retained) if the original string contains no */
  142. /* escape sequences to be processed. */
  143. /* If a given CFURL can not be decomposed, you can ask for its scheme and its resource specifier; asking */
  144. /* it for its net location or path will return NULL. */
  145. /* All of the methods discussed above do not require an autorelease pool to be in place. */
  146. /* To get more refined information about the components of a decomposable CFURL, you may ask for more */
  147. /* specific pieces of the URL, expressed with the percent escapes removed.  These functions require an */
  148. /* autorelease pool to be in place, as they will return an autoreleased CFString.  They are */
  149. /* CFURLHostName(), CFURLPortNumber() (actually returns an Int32; does not use the autorelease pool), */
  150. /* CFURLUserName(), CFURLPassword(), CFURLQuery(), CFURLParameters(), and CFURLFragment().  Because the */
  151. /* parameters, query, and fragment of an URL may contain scheme-specific syntaxes, these methods take a */
  152. /* second argument, giving a list of characters which should NOT be replaced if percent escaped.  For */
  153. /* instance, the ftp parameter syntax gives simple key-value pairs as "<key>=<value>;"  Clearly if a key */
  154. /* or value includes either '=' or ';', it must be escaped to avoid corrupting the meaning of the */
  155. /* parameters, so the caller may request the parameter string as */
  156. /* CFStringRef myParams = CFURLParameters(ftpURL, CFSTR("=;%")); */
  157. /* requesting that all percent escape sequences be replaced by the represented characters, except for escaped */
  158. /* '=', '%' or ';' characters.  If you are not interested in any escape sequences being left in, pass NULL for the */
  159. /* second argument. */
  160. /* Returns TRUE if anURL conforms to RFC 1808 */
  161. EXTERN_API_C( Boolean )
  162. CFURLCanBeDecomposed            (CFURLRef               anURL);
  163. /* The next several methods leave any percent escape sequences intact */
  164. EXTERN_API_C( CFStringRef )
  165. CFURLCopyScheme                 (CFURLRef               anURL);
  166. /* NULL if CFURLCanBeDecomposed(anURL) is FALSE */
  167. EXTERN_API_C( CFStringRef )
  168. CFURLCopyNetLocation            (CFURLRef               anURL);
  169. /* NULL if CFURLCanBeDecomposed(anURL) is FALSE; also does not resolve */
  170. /* the URL against its base.  See also CFCreateAbsoluteURL() and */
  171. /* CFStringCreateFileSystemPathFromURL() */
  172. EXTERN_API_C( CFStringRef )
  173. CFURLCopyPath                   (CFURLRef               anURL);
  174. /* Returns whether anURL's path represents a directory */
  175. /* (TRUE returned) or a simple file (FALSE returned) */
  176. EXTERN_API_C( Boolean )
  177. CFURLHasDirectoryPath           (CFURLRef               anURL);
  178. /* Any additional resource specifiers after the path.  For URLs */
  179. /* that cannot be decomposed, this is everything except the scheme itself. */
  180. EXTERN_API_C( CFStringRef )
  181. CFURLCopyResourceSpecifier      (CFURLRef               anURL);
  182. EXTERN_API_C( CFStringRef )
  183. CFURLCopyHostName               (CFURLRef               anURL);
  184. EXTERN_API_C( SInt32 )
  185. CFURLGetPortNumber              (CFURLRef               anURL);
  186. /* Returns -1 if no port number is specified */
  187. EXTERN_API_C( CFStringRef )
  188. CFURLCopyUserName               (CFURLRef               anURL);
  189. EXTERN_API_C( CFStringRef )
  190. CFURLCopyPassword               (CFURLRef               anURL);
  191. /* These remove all percent escape sequences except those for */
  192. /* characters in charactersToLeaveEscaped.  If charactersToLeaveEscaped */
  193. /* is empty (""), all percent escape sequences are replaced by their */
  194. /* corresponding characters.  If charactersToLeaveEscaped is NULL, */
  195. /* then no escape sequences are removed at all */
  196. EXTERN_API_C( CFStringRef )
  197. CFURLCopyParameterString        (CFURLRef               anURL,
  198.                                  CFStringRef            charactersToLeaveEscaped);
  199. EXTERN_API_C( CFStringRef )
  200. CFURLCopyQueryString            (CFURLRef               anURL,
  201.                                  CFStringRef            charactersToLeaveEscaped);
  202. EXTERN_API_C( CFStringRef )
  203. CFURLCopyFragment               (CFURLRef               anURL,
  204.                                  CFStringRef            charactersToLeaveEscaped);
  205. /* Returns a string with any percent escape sequences that do NOT */
  206. /* correspond to characters in charactersToLeaveEscaped with their */
  207. /* equivalent.  Returns NULL on failure (if an invalid percent sequence */
  208. /* is encountered), or the original string itself if no characters need to be replaced. */
  209. EXTERN_API_C( CFStringRef )
  210. CFURLCreateStringByReplacingPercentEscapes (CFAllocatorRef  allocator,
  211.                                  CFStringRef            originalString,
  212.                                  CFStringRef            charactersToLeaveEscaped);
  213. #if PRAGMA_ENUM_ALWAYSINT
  214.     #pragma enumsalwaysint reset
  215.     #ifdef __CFURL__RESTORE_TWOBYTEINTS
  216.         #pragma fourbyteints off
  217.     #endif
  218. #elif PRAGMA_ENUM_OPTIONS
  219.     #pragma option enum=reset
  220. #elif defined(__CFURL__RESTORE_PACKED_ENUMS)
  221.     #pragma options(pack_enums)
  222. #endif
  223. #if PRAGMA_STRUCT_ALIGN
  224.     #pragma options align=reset
  225. #elif PRAGMA_STRUCT_PACKPUSH
  226.     #pragma pack(pop)
  227. #elif PRAGMA_STRUCT_PACK
  228.     #pragma pack()
  229. #endif
  230. #ifdef PRAGMA_IMPORT_OFF
  231. #pragma import off
  232. #elif PRAGMA_IMPORT
  233. #pragma import reset
  234. #endif
  235. #ifdef __cplusplus
  236. }
  237. #endif
  238. #endif /* __CFURL__ */