diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /common/quicktime_win32/CoreFoundation/CFURL.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'common/quicktime_win32/CoreFoundation/CFURL.h')
| -rw-r--r-- | common/quicktime_win32/CoreFoundation/CFURL.h | 403 |
1 files changed, 403 insertions, 0 deletions
diff --git a/common/quicktime_win32/CoreFoundation/CFURL.h b/common/quicktime_win32/CoreFoundation/CFURL.h new file mode 100644 index 0000000..0c0acd9 --- /dev/null +++ b/common/quicktime_win32/CoreFoundation/CFURL.h @@ -0,0 +1,403 @@ +/* CFURL.h + Copyright (c) 1998-2003, Apple, Inc. All rights reserved. +*/ + +#if !defined(__COREFOUNDATION_CFURL__) +#define __COREFOUNDATION_CFURL__ 1 + +#include <CoreFoundation/CFBase.h> +#include <CoreFoundation/CFData.h> +#include <CoreFoundation/CFString.h> + +#if defined(__cplusplus) +extern "C" { +#endif + +typedef enum { + kCFURLPOSIXPathStyle = 0, + kCFURLHFSPathStyle, + kCFURLWindowsPathStyle +} CFURLPathStyle; + +typedef const struct __CFURL * CFURLRef; + +/* CFURLs are composed of two fundamental pieces - their string, and a */ +/* (possibly NULL) base URL. A relative URL is one in which the string */ +/* by itself does not fully specify the URL (for instance "myDir/image.tiff"); */ +/* an absolute URL is one in which the string does fully specify the URL */ +/* ("file://localhost/myDir/image.tiff"). Absolute URLs always have NULL */ +/* base URLs; however, it is possible for a URL to have a NULL base, and still */ +/* not be absolute. Such a URL has only a relative string, and cannot be */ +/* resolved. Two CFURLs are considered equal if and only if their strings */ +/* are equal and their bases are equal. In other words, */ +/* "file://localhost/myDir/image.tiff" is NOT equal to the URL with relative */ +/* string "myDir/image.tiff" and base URL "file://localhost/". Clients that */ +/* need these less strict form of equality should convert all URLs to their */ +/* absolute form via CFURLCopyAbsoluteURL(), then compare the absolute forms. */ + +CF_EXPORT +CFTypeID CFURLGetTypeID(void); + +/* encoding will be used both to interpret the bytes of URLBytes, and to */ +/* interpret any percent-escapes within the bytes. */ +CF_EXPORT +CFURLRef CFURLCreateWithBytes(CFAllocatorRef allocator, const UInt8 *URLBytes, CFIndex length, CFStringEncoding encoding, CFURLRef baseURL); + +/* Escapes any character that is not 7-bit ASCII with the byte-code */ +/* for the given encoding. If escapeWhitespace is true, whitespace */ +/* characters (' ', '\t', '\r', '\n') will be escaped also (desirable */ +/* if embedding the URL into a larger text stream like HTML) */ +CF_EXPORT +CFDataRef CFURLCreateData(CFAllocatorRef allocator, CFURLRef url, CFStringEncoding encoding, Boolean escapeWhitespace); + +/* Any escape sequences in URLString will be interpreted via UTF-8. */ +CF_EXPORT +CFURLRef CFURLCreateWithString(CFAllocatorRef allocator, CFStringRef URLString, CFURLRef baseURL); + +#if MAC_OS_X_VERSION_10_3 <= MAC_OS_X_VERSION_MAX_ALLOWED + +/* Create an absolute URL directly, without requiring the extra step */ +/* of calling CFURLCopyAbsoluteURL(). If useCompatibilityMode is */ +/* true, the rules historically used on the web are used to resolve */ +/* relativeString against baseURL - these rules are generally listed */ +/* in the RFC as optional or alternate interpretations. Otherwise, */ +/* the strict rules from the RFC are used. The major differences are */ +/* that in compatibility mode, we are lenient of the scheme appearing */ +/* in relative portion, leading "../" components are removed from the */ +/* final URL's path, and if the relative portion contains only */ +/* resource specifier pieces (query, parameters, and fragment), then */ +/* the last path component of the base URL will not be deleted */ +CFURLRef CFURLCreateAbsoluteURLWithBytes(CFAllocatorRef alloc, const UInt8 *relativeURLBytes, CFIndex length, CFStringEncoding encoding, CFURLRef baseURL, Boolean useCompatibilityMode) AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER; +#endif + +/* filePath should be the URL's path expressed as a path of the type */ +/* fsType. If filePath is not absolute, the resulting URL will be */ +/* considered relative to the current working directory (evaluated */ +/* at creation time). isDirectory determines whether filePath is */ +/* treated as a directory path when resolving against relative path */ +/* components */ +CF_EXPORT +CFURLRef CFURLCreateWithFileSystemPath(CFAllocatorRef allocator, CFStringRef filePath, CFURLPathStyle pathStyle, Boolean isDirectory); + +CF_EXPORT +CFURLRef CFURLCreateFromFileSystemRepresentation(CFAllocatorRef allocator, const UInt8 *buffer, CFIndex bufLen, Boolean isDirectory); + +CF_EXPORT +CFURLRef CFURLCreateWithFileSystemPathRelativeToBase(CFAllocatorRef allocator, CFStringRef filePath, CFURLPathStyle pathStyle, Boolean isDirectory, CFURLRef baseURL); + +CF_EXPORT +CFURLRef CFURLCreateFromFileSystemRepresentationRelativeToBase(CFAllocatorRef allocator, const UInt8 *buffer, CFIndex bufLen, Boolean isDirectory, CFURLRef baseURL); + +/* Fills buffer with the file system's native representation of */ +/* url's path. No more than maxBufLen bytes are written to buffer. */ +/* The buffer should be at least the maximum path length for */ +/* the file system in question to avoid failures for insufficiently */ +/* large buffers. If resolveAgainstBase is true, the url's relative */ +/* portion is resolved against its base before the path is computed. */ +/* Returns success or failure. */ +CF_EXPORT +Boolean CFURLGetFileSystemRepresentation(CFURLRef url, Boolean resolveAgainstBase, UInt8 *buffer, CFIndex maxBufLen); + +/* Creates a new URL by resolving the relative portion of relativeURL against its base. */ +CF_EXPORT +CFURLRef CFURLCopyAbsoluteURL(CFURLRef relativeURL); + +/* Returns the URL's string. */ +CF_EXPORT +CFStringRef CFURLGetString(CFURLRef anURL); + +/* Returns the base URL if it exists */ +CF_EXPORT +CFURLRef CFURLGetBaseURL(CFURLRef anURL); + +/* +All URLs can be broken into two pieces - the scheme (preceding the +first colon) and the resource specifier (following the first colon). +Most URLs are also "standard" URLs conforming to RFC 1808 (available +from www.w3c.org). This category includes URLs of the file, http, +https, and ftp schemes, to name a few. Standard URLs start the +resource specifier with two slashes ("//"), and can be broken into +four distinct pieces - the scheme, the net location, the path, and +further resource specifiers (typically an optional parameter, query, +and/or fragment). The net location appears immediately following +the two slashes and goes up to the next slash; it's format is +scheme-specific, but is usually composed of some or all of a username, +password, host name, and port. The path is a series of path components +separated by slashes; if the net location is present, the path always +begins with a slash. Standard URLs can be relative to another URL, +in which case at least the scheme and possibly other pieces as well +come from the base URL (see RFC 1808 for precise details when resolving +a relative URL against its base). The full URL is therefore + +<scheme> "://" <net location> <path, always starting with slash> <add'l resource specifiers> + +If a given CFURL can be decomposed (that is, conforms to RFC 1808), you +can ask for each of the four basic pieces (scheme, net location, path, +and resource specifer) separately, as well as for its base URL. The +basic pieces are returned with any percent escape sequences still in +place (although note that the scheme may not legally include any +percent escapes); this is to allow the caller to distinguish between +percent sequences that may have syntactic meaning if replaced by the +character being escaped (for instance, a '/' in a path component). +Since only the individual schemes know which characters are +syntactically significant, CFURL cannot safely replace any percent +escape sequences. However, you can use +CFURLCreateStringByReplacingPercentEscapes() to create a new string with +the percent escapes removed; see below. + +If a given CFURL can not be decomposed, you can ask for its scheme and its +resource specifier; asking it for its net location or path will return NULL. + +To get more refined information about the components of a decomposable +CFURL, you may ask for more specific pieces of the URL, expressed with +the percent escapes removed. The available functions are CFURLCopyHostName(), +CFURLGetPortNumber() (returns an Int32), CFURLCopyUserName(), +CFURLCopyPassword(), CFURLCopyQuery(), CFURLCopyParameters(), and +CFURLCopyFragment(). Because the parameters, query, and fragment of an +URL may contain scheme-specific syntaxes, these methods take a second +argument, giving a list of characters which should NOT be replaced if +percent escaped. For instance, the ftp parameter syntax gives simple +key-value pairs as "<key>=<value>;" Clearly if a key or value includes +either '=' or ';', it must be escaped to avoid corrupting the meaning of +the parameters, so the caller may request the parameter string as + +CFStringRef myParams = CFURLCopyParameters(ftpURL, CFSTR("=;%")); + +requesting that all percent escape sequences be replaced by the represented +characters, except for escaped '=', '%' or ';' characters. Pass the empty +string (CFSTR("")) to request that all percent escapes be replaced, or NULL +to request that none be. +*/ + +/* Returns true if anURL conforms to RFC 1808 */ +CF_EXPORT +Boolean CFURLCanBeDecomposed(CFURLRef anURL); + +/* The next several methods leave any percent escape sequences intact */ + +CF_EXPORT +CFStringRef CFURLCopyScheme(CFURLRef anURL); + +/* NULL if CFURLCanBeDecomposed(anURL) is false */ +CF_EXPORT +CFStringRef CFURLCopyNetLocation(CFURLRef anURL); + +/* NULL if CFURLCanBeDecomposed(anURL) is false; also does not resolve the URL */ +/* against its base. See also CFURLCopyAbsoluteURL(). Note that, strictly */ +/* speaking, any leading '/' is not considered part of the URL's path, although */ +/* its presence or absence determines whether the path is absolute. */ +/* CFURLCopyPath()'s return value includes any leading slash (giving the path */ +/* the normal POSIX appearance); CFURLCopyStrictPath()'s return value omits any */ +/* leading slash, and uses isAbsolute to report whether the URL's path is absolute. */ + +/* CFURLCopyFileSystemPath() returns the URL's path as a file system path for the */ +/* given path style. All percent escape sequences are replaced. The URL is not */ +/* resolved against its base before computing the path. */ +CF_EXPORT +CFStringRef CFURLCopyPath(CFURLRef anURL); + +CF_EXPORT +CFStringRef CFURLCopyStrictPath(CFURLRef anURL, Boolean *isAbsolute); + +CF_EXPORT +CFStringRef CFURLCopyFileSystemPath(CFURLRef anURL, CFURLPathStyle pathStyle); + +/* Returns whether anURL's path represents a directory */ +/* (true returned) or a simple file (false returned) */ +CF_EXPORT +Boolean CFURLHasDirectoryPath(CFURLRef anURL); + +/* Any additional resource specifiers after the path. For URLs */ +/* that cannot be decomposed, this is everything except the scheme itself. */ +CF_EXPORT +CFStringRef CFURLCopyResourceSpecifier(CFURLRef anURL); + +CF_EXPORT +CFStringRef CFURLCopyHostName(CFURLRef anURL); + +CF_EXPORT +SInt32 CFURLGetPortNumber(CFURLRef anURL); /* Returns -1 if no port number is specified */ + +CF_EXPORT +CFStringRef CFURLCopyUserName(CFURLRef anURL); + +CF_EXPORT +CFStringRef CFURLCopyPassword(CFURLRef anURL); + +/* These remove all percent escape sequences except those for */ +/* characters in charactersToLeaveEscaped. If charactersToLeaveEscaped */ +/* is empty (""), all percent escape sequences are replaced by their */ +/* corresponding characters. If charactersToLeaveEscaped is NULL, */ +/* then no escape sequences are removed at all */ +CF_EXPORT +CFStringRef CFURLCopyParameterString(CFURLRef anURL, CFStringRef charactersToLeaveEscaped); + +CF_EXPORT +CFStringRef CFURLCopyQueryString(CFURLRef anURL, CFStringRef charactersToLeaveEscaped); + +CF_EXPORT +CFStringRef CFURLCopyFragment(CFURLRef anURL, CFStringRef charactersToLeaveEscaped); + +CF_EXPORT +CFStringRef CFURLCopyLastPathComponent(CFURLRef url); + +CF_EXPORT +CFStringRef CFURLCopyPathExtension(CFURLRef url); + +/* These functions all treat the base URL of the supplied url as */ +/* invariant. In other words, the URL returned will always have */ +/* the same base as the URL supplied as an argument. */ + +CF_EXPORT +CFURLRef CFURLCreateCopyAppendingPathComponent(CFAllocatorRef allocator, CFURLRef url, CFStringRef pathComponent, Boolean isDirectory); + +CF_EXPORT +CFURLRef CFURLCreateCopyDeletingLastPathComponent(CFAllocatorRef allocator, CFURLRef url); + +CF_EXPORT +CFURLRef CFURLCreateCopyAppendingPathExtension(CFAllocatorRef allocator, CFURLRef url, CFStringRef extension); + +CF_EXPORT +CFURLRef CFURLCreateCopyDeletingPathExtension(CFAllocatorRef allocator, CFURLRef url); + +#if MAC_OS_X_VERSION_10_3 <= MAC_OS_X_VERSION_MAX_ALLOWED +/* Fills buffer with the bytes for url, returning the number of bytes */ +/* filled. If buffer is of insufficient size, returns -1 and no bytes */ +/* are placed in buffer. If buffer is NULL, the needed length is */ +/* computed and returned. The returned bytes are the original bytes */ +/* from which the URL was created; if the URL was created from a */ +/* string, the bytes will be the bytes of the string encoded via UTF-8 */ +CF_EXPORT +CFIndex CFURLGetBytes(CFURLRef url, UInt8 *buffer, CFIndex bufferLength) AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER; + +typedef enum { + kCFURLComponentScheme = 1, + kCFURLComponentNetLocation = 2, + kCFURLComponentPath = 3, + kCFURLComponentResourceSpecifier = 4, + + kCFURLComponentUser = 5, + kCFURLComponentPassword = 6, + kCFURLComponentUserInfo = 7, + kCFURLComponentHost = 8, + kCFURLComponentPort = 9, + kCFURLComponentParameterString = 10, + kCFURLComponentQuery = 11, + kCFURLComponentFragment = 12 +} CFURLComponentType; + +/* +Gets the range of the requested component in the bytes of url, as +returned by CFURLGetBytes(). This range is only good for use in the +bytes returned by CFURLGetBytes! + +If non-NULL, rangeIncludingSeparators gives the range of component +including the sequences that separate component from the previous and +next components. If there is no previous or next component, that end of +rangeIncludingSeparators will match the range of the component itself. +If url does not contain the given component type, (kCFNotFound, 0) is +returned, and rangeIncludingSeparators is set to the location where the +component would be inserted. Some examples - + +For the URL http://www.apple.com/hotnews/ + +Component returned range rangeIncludingSeparators +scheme (0, 4) (0, 7) +net location (7, 13) (4, 16) +path (20, 9) (20, 9) +resource specifier (kCFNotFound, 0) (29, 0) +user (kCFNotFound, 0) (7, 0) +password (kCFNotFound, 0) (7, 0) +user info (kCFNotFound, 0) (7, 0) +host (7, 13) (4, 16) +port (kCFNotFound, 0) (20, 0) +parameter (kCFNotFound, 0) (29, 0) +query (kCFNotFound, 0) (29, 0) +fragment (kCFNotFound, 0) (29, 0) + + +For the URL ./relPath/file.html#fragment + +Component returned range rangeIncludingSeparators +scheme (kCFNotFound, 0) (0, 0) +net location (kCFNotFound, 0) (0, 0) +path (0, 19) (0, 20) +resource specifier (20, 8) (19, 9) +user (kCFNotFound, 0) (0, 0) +password (kCFNotFound, 0) (0, 0) +user info (kCFNotFound, 0) (0, 0) +host (kCFNotFound, 0) (0, 0) +port (kCFNotFound, 0) (0, 0) +parameter (kCFNotFound, 0) (19, 0) +query (kCFNotFound, 0) (19, 0) +fragment (20, 8) (19, 9) + + +For the URL scheme://user:pass@host:1/path/path2/file.html;params?query#fragment + +Component returned range rangeIncludingSeparators +scheme (0, 6) (0, 9) +net location (9, 16) (6, 19) +path (25, 21) (25, 22) +resource specifier (47, 21) (46, 22) +user (9, 4) (6, 8) +password (14, 4) (13, 6) +user info (9, 9) (6, 13) +host (19, 4) (18, 6) +port (24, 1) (23, 2) +parameter (47, 6) (46, 8) +query (54, 5) (53, 7) +fragment (60, 8) (59, 9) +*/ +CF_EXPORT +CFRange CFURLGetByteRangeForComponent(CFURLRef url, CFURLComponentType component, CFRange *rangeIncludingSeparators) AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER; +#endif + +/* Returns a string with any percent escape sequences that do NOT */ +/* correspond to characters in charactersToLeaveEscaped with their */ +/* equivalent. Returns NULL on failure (if an invalid percent sequence */ +/* is encountered), or the original string (retained) if no characters */ +/* need to be replaced. Pass NULL to request that no percent escapes be */ +/* replaced, or the empty string (CFSTR("")) to request that all percent */ +/* escapes be replaced. Uses UTF8 to interpret percent escapes. */ +CF_EXPORT +CFStringRef CFURLCreateStringByReplacingPercentEscapes(CFAllocatorRef allocator, CFStringRef originalString, CFStringRef charactersToLeaveEscaped); + +#if MAC_OS_X_VERSION_10_3 <= MAC_OS_X_VERSION_MAX_ALLOWED +/* As above, but allows you to specify the encoding to use when interpreting percent escapes */ +CF_EXPORT +CFStringRef CFURLCreateStringByReplacingPercentEscapesUsingEncoding(CFAllocatorRef allocator, CFStringRef origString, CFStringRef charsToLeaveEscaped, CFStringEncoding encoding) AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER; +#endif + +/* Creates a copy or originalString, replacing certain characters with */ +/* the equivalent percent escape sequence based on the encoding specified. */ +/* If the originalString does not need to be modified (no percent escape */ +/* sequences are missing), may retain and return originalString. */ +/* If you are uncertain of the correct encoding, you should use UTF-8, */ +/* which is the encoding designated by RFC 2396 as the correct encoding */ +/* for use in URLs. The characters so escaped are all characters that */ +/* are not legal URL characters (based on RFC 2396), plus any characters */ +/* in legalURLCharactersToBeEscaped, less any characters in */ +/* charactersToLeaveUnescaped. To simply correct any non-URL characters */ +/* in an otherwise correct URL string, do: */ + +/* newString = CFURLCreateStringByAddingPercentEscapes(NULL, origString, NULL, NULL, kCFStringEncodingUTF8); */ +CF_EXPORT +CFStringRef CFURLCreateStringByAddingPercentEscapes(CFAllocatorRef allocator, CFStringRef originalString, CFStringRef charactersToLeaveUnescaped, CFStringRef legalURLCharactersToBeEscaped, CFStringEncoding encoding); + + +struct FSRef; + +CF_EXPORT +CFURLRef CFURLCreateFromFSRef(CFAllocatorRef allocator, const struct FSRef *fsRef); + +CF_EXPORT +Boolean CFURLGetFSRef(CFURLRef url, struct FSRef *fsRef); + + +#if defined(__cplusplus) +} +#endif + +#endif /* !__COREFOUNDATION_CFURL__ */ + |