]> git.saurik.com Git - apple/cf.git/blobdiff - URL.subproj/CFURL.h
CF-476.10.tar.gz
[apple/cf.git] / URL.subproj / CFURL.h
diff --git a/URL.subproj/CFURL.h b/URL.subproj/CFURL.h
deleted file mode 100644 (file)
index 18fedb2..0000000
+++ /dev/null
@@ -1,417 +0,0 @@
-/*
- * Copyright (c) 2005 Apple Computer, Inc. All rights reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- * 
- * This file contains Original Code and/or Modifications of Original Code
- * as defined in and that are subject to the Apple Public Source License
- * Version 2.0 (the 'License'). You may not use this file except in
- * compliance with the License. Please obtain a copy of the License at
- * http://www.opensource.apple.com/apsl/ and read it before using this
- * file.
- * 
- * The Original Code and all software distributed under the License are
- * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
- * Please see the License for the specific language governing rights and
- * limitations under the License.
- * 
- * @APPLE_LICENSE_HEADER_END@
- */
-/*     CFURL.h
-       Copyright (c) 1998-2005, 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  */
-CF_EXPORT
-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);
-
-
-#if defined(__cplusplus)
-}
-#endif
-
-#endif /* !__COREFOUNDATION_CFURL__ */
-