]> git.saurik.com Git - apple/cf.git/blame - Base.subproj/CFPriv.h
CF-368.28.tar.gz
[apple/cf.git] / Base.subproj / CFPriv.h
CommitLineData
9ce05555 1/*
d8925383 2 * Copyright (c) 2005 Apple Computer, Inc. All rights reserved.
9ce05555
A
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
9ce05555
A
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
11 * file.
12 *
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
20 *
21 * @APPLE_LICENSE_HEADER_END@
22 */
23/* CFPriv.h
d8925383 24 Copyright (c) 1998-2005, Apple, Inc. All rights reserved.
9ce05555
A
25*/
26
27/*
28 APPLE SPI: NOT TO BE USED OUTSIDE APPLE!
29*/
30
31#if !defined(__COREFOUNDATION_CFPRIV__)
32#define __COREFOUNDATION_CFPRIV__ 1
33
34#include <string.h>
35#include <CoreFoundation/CFBase.h>
36#include <CoreFoundation/CFArray.h>
37#include <CoreFoundation/CFString.h>
38#include <CoreFoundation/CFURL.h>
d8925383
A
39#include <CoreFoundation/CFBundlePriv.h>
40
41
42#if defined(__MACH__) || defined(__WIN32__)
9ce05555
A
43#include <CoreFoundation/CFRunLoop.h>
44#include <CoreFoundation/CFMachPort.h>
45#include <CoreFoundation/CFSocket.h>
46#endif
47
48#if defined(__cplusplus)
49extern "C" {
50#endif
51
52CF_EXPORT intptr_t _CFDoOperation(intptr_t code, intptr_t subcode1, intptr_t subcode2);
53
d8925383 54CF_EXPORT void _CFRuntimeSetCFMPresent(void *a);
9ce05555
A
55
56CF_EXPORT const char *_CFProcessPath(void);
d8925383
A
57CF_EXPORT const char **_CFGetProcessPath(void);
58CF_EXPORT const char **_CFGetProgname(void);
9ce05555
A
59
60
61#if defined(__MACH__)
62CF_EXPORT CFRunLoopRef CFRunLoopGetMain(void);
63CF_EXPORT SInt32 CFRunLoopRunSpecific(CFRunLoopRef rl, CFStringRef modeName, CFTimeInterval seconds, Boolean returnAfterSourceHandled);
64
65CF_EXPORT void _CFRunLoopSetCurrent(CFRunLoopRef rl);
66
67CF_EXPORT Boolean _CFRunLoopModeContainsMode(CFRunLoopRef rl, CFStringRef modeName, CFStringRef candidateContainedName);
68CF_EXPORT void _CFRunLoopAddModeToMode(CFRunLoopRef rl, CFStringRef modeName, CFStringRef toModeName);
69CF_EXPORT void _CFRunLoopRemoveModeFromMode(CFRunLoopRef rl, CFStringRef modeName, CFStringRef fromModeName);
70CF_EXPORT void _CFRunLoopStopMode(CFRunLoopRef rl, CFStringRef modeName);
71
72CF_EXPORT CFIndex CFMachPortGetQueuedMessageCount(CFMachPortRef mp);
73
74CF_EXPORT CFPropertyListRef _CFURLCopyPropertyListRepresentation(CFURLRef url);
75CF_EXPORT CFURLRef _CFURLCreateFromPropertyListRepresentation(CFAllocatorRef alloc, CFPropertyListRef pListRepresentation);
76#endif /* __MACH__ */
77
d8925383
A
78CF_EXPORT void CFPreferencesFlushCaches(void);
79
80CF_EXPORT CFTimeInterval _CFTimeZoneGetDSTOffset(CFTimeZoneRef tz, CFAbsoluteTime at);
81CF_EXPORT CFAbsoluteTime _CFTimeZoneGetNextDSTSwitch(CFTimeZoneRef tz, CFAbsoluteTime at);
9ce05555
A
82
83#if !defined(__WIN32__)
84struct FSSpec;
85CF_EXPORT
86Boolean _CFGetFSSpecFromURL(CFAllocatorRef alloc, CFURLRef url, struct FSSpec *spec);
87
88CF_EXPORT
89CFURLRef _CFCreateURLFromFSSpec(CFAllocatorRef alloc, const struct FSSpec *voidspec, Boolean isDirectory);
90#endif
91
92#if MAC_OS_X_VERSION_10_2 <= MAC_OS_X_VERSION_MAX_ALLOWED
93typedef enum {
94 kCFURLComponentDecompositionNonHierarchical,
95 kCFURLComponentDecompositionRFC1808, /* use this for RFC 1738 decompositions as well */
96 kCFURLComponentDecompositionRFC2396
97} CFURLComponentDecomposition;
98
99typedef struct {
100 CFStringRef scheme;
101 CFStringRef schemeSpecific;
102} CFURLComponentsNonHierarchical;
103
104typedef struct {
105 CFStringRef scheme;
106 CFStringRef user;
107 CFStringRef password;
108 CFStringRef host;
109 CFIndex port; /* kCFNotFound means ignore/omit */
110 CFArrayRef pathComponents;
111 CFStringRef parameterString;
112 CFStringRef query;
113 CFStringRef fragment;
114 CFURLRef baseURL;
115} CFURLComponentsRFC1808;
116
117typedef struct {
118 CFStringRef scheme;
119
120 /* if the registered name form of the net location is used, userinfo is NULL, port is kCFNotFound, and host is the entire registered name. */
121 CFStringRef userinfo;
122 CFStringRef host;
123 CFIndex port;
124
125 CFArrayRef pathComponents;
126 CFStringRef query;
127 CFStringRef fragment;
128 CFURLRef baseURL;
129} CFURLComponentsRFC2396;
130
131/* Fills components and returns TRUE if the URL can be decomposed according to decompositionType; FALSE (leaving components unchanged) otherwise. components should be a pointer to the CFURLComponents struct defined above that matches decompositionStyle */
132CF_EXPORT
133Boolean _CFURLCopyComponents(CFURLRef url, CFURLComponentDecomposition decompositionType, void *components);
134
135/* Creates and returns the URL described by components; components should point to the CFURLComponents struct defined above that matches decompositionType. */
136CF_EXPORT
137CFURLRef _CFURLCreateFromComponents(CFAllocatorRef alloc, CFURLComponentDecomposition decompositionType, const void *components);
138#define CFURLCopyComponents _CFURLCopyComponents
139#define CFURLCreateFromComponents _CFURLCreateFromComponents
140#endif
141
142
143CF_EXPORT Boolean _CFStringGetFileSystemRepresentation(CFStringRef string, UInt8 *buffer, CFIndex maxBufLen);
144
145/* If this is publicized, we might need to create a GetBytesPtr type function as well. */
146CF_EXPORT CFStringRef _CFStringCreateWithBytesNoCopy(CFAllocatorRef alloc, const UInt8 *bytes, CFIndex numBytes, CFStringEncoding encoding, Boolean externalFormat, CFAllocatorRef contentsDeallocator);
147
148/* These return NULL on MacOS 8 */
149CF_EXPORT
150CFStringRef CFGetUserName(void);
151
152CF_EXPORT
153CFURLRef CFCopyHomeDirectoryURLForUser(CFStringRef uName); /* Pass NULL for the current user's home directory */
154
155/*
156 CFCopySearchPathForDirectoriesInDomains returns the various
157 standard system directories where apps, resources, etc get
158 installed. Because queries can return multiple directories,
159 you get back a CFArray (which you should free when done) of
160 CFStrings. The directories are returned in search path order;
161 that is, the first place to look is returned first. This API
162 may return directories that do not exist yet. If NSUserDomain
163 is included in a query, then the results will contain "~" to
164 refer to the user's directory. Specify expandTilde to expand
165 this to the current user's home. Some calls might return no
166 directories!
167 ??? On MacOS 8 this function currently returns an empty array.
168*/
169typedef enum {
170 kCFApplicationDirectory = 1, /* supported applications (Applications) */
171 kCFDemoApplicationDirectory, /* unsupported applications, demonstration versions (Demos) */
172 kCFDeveloperApplicationDirectory, /* developer applications (Developer/Applications) */
173 kCFAdminApplicationDirectory, /* system and network administration applications (Administration) */
174 kCFLibraryDirectory, /* various user-visible documentation, support, and configuration files, resources (Library) */
175 kCFDeveloperDirectory, /* developer resources (Developer) */
176 kCFUserDirectory, /* user home directories (Users) */
177 kCFDocumentationDirectory, /* documentation (Documentation) */
178 kCFDocumentDirectory, /* documents (Library/Documents) */
179 kCFAllApplicationsDirectory = 100, /* all directories where applications can occur (ie Applications, Demos, Administration, Developer/Applications) */
180 kCFAllLibrariesDirectory = 101 /* all directories where resources can occur (Library, Developer) */
181} CFSearchPathDirectory;
182
183typedef enum {
184 kCFUserDomainMask = 1, /* user's home directory --- place to install user's personal items (~) */
185 kCFLocalDomainMask = 2, /* local to the current machine --- place to install items available to everyone on this machine (/Local) */
186 kCFNetworkDomainMask = 4, /* publically available location in the local area network --- place to install items available on the network (/Network) */
187 kCFSystemDomainMask = 8, /* provided by Apple, unmodifiable (/System) */
188 kCFAllDomainsMask = 0x0ffff /* all domains: all of the above and more, future items */
189} CFSearchPathDomainMask;
190
191CF_EXPORT
192CFArrayRef CFCopySearchPathForDirectoriesInDomains(CFSearchPathDirectory directory, CFSearchPathDomainMask domainMask, Boolean expandTilde);
193
194/* Obsolete keys */
195CF_EXPORT const CFStringRef kCFFileURLExists;
196CF_EXPORT const CFStringRef kCFFileURLPOSIXMode;
197CF_EXPORT const CFStringRef kCFFileURLSize;
198CF_EXPORT const CFStringRef kCFFileURLDirectoryContents;
199CF_EXPORT const CFStringRef kCFFileURLLastModificationTime;
200CF_EXPORT const CFStringRef kCFHTTPURLStatusCode;
201CF_EXPORT const CFStringRef kCFHTTPURLStatusLine;
202
203
d8925383 204/* System Version file access */
9ce05555
A
205CF_EXPORT CFStringRef CFCopySystemVersionString(void); // Human-readable string containing both marketing and build version, should be API'd
206CF_EXPORT CFDictionaryRef _CFCopySystemVersionDictionary(void);
207CF_EXPORT CFDictionaryRef _CFCopyServerVersionDictionary(void);
208CF_EXPORT const CFStringRef _kCFSystemVersionProductNameKey;
209CF_EXPORT const CFStringRef _kCFSystemVersionProductCopyrightKey;
210CF_EXPORT const CFStringRef _kCFSystemVersionProductVersionKey;
211CF_EXPORT const CFStringRef _kCFSystemVersionProductVersionExtraKey;
212CF_EXPORT const CFStringRef _kCFSystemVersionProductUserVisibleVersionKey; // For loginwindow; see 2987512
213CF_EXPORT const CFStringRef _kCFSystemVersionBuildVersionKey;
214CF_EXPORT const CFStringRef _kCFSystemVersionProductVersionStringKey; // Localized string for the string "Version"
215CF_EXPORT const CFStringRef _kCFSystemVersionBuildStringKey; // Localized string for the string "Build"
216
217typedef enum {
218 kCFStringGramphemeCluster = 1, /* Unicode Grapheme Cluster (not different from kCFStringComposedCharacterCluster right now) */
219 kCFStringComposedCharacterCluster = 2, /* Compose all non-base (including spacing marks) */
220 kCFStringCursorMovementCluster = 3, /* Cluster suitable for cursor movements */
221 kCFStringBackwardDeletionCluster = 4 /* Cluster suitable for backward deletion */
222} CFStringCharacterClusterType;
223
224CF_EXPORT CFRange CFStringGetRangeOfCharacterClusterAtIndex(CFStringRef string, CFIndex charIndex, CFStringCharacterClusterType type);
225
d8925383
A
226enum {
227 kCFCompareDiacriticsInsensitive = (1 << 28),
228 kCFCompareWidthInsensitive = (1 << 29),
229};
9ce05555
A
230
231/* CFStringEncoding SPI */
232/* When set, CF encoding conversion engine keeps ASCII compatibility. (i.e. ASCII backslash <-> Unicode backslash in MacJapanese */
233CF_EXPORT void _CFStringEncodingSetForceASCIICompatibility(Boolean flag);
234
235#if defined(CF_INLINE)
236CF_INLINE const UniChar *CFStringGetCharactersPtrFromInlineBuffer(CFStringInlineBuffer *buf, CFRange desiredRange) {
237 if ((desiredRange.location < 0) || ((desiredRange.location + desiredRange.length) > buf->rangeToBuffer.length)) return NULL;
238
239 if (buf->directBuffer) {
240 return buf->directBuffer + buf->rangeToBuffer.location + desiredRange.location;
241 } else {
242 if (desiredRange.length > __kCFStringInlineBufferLength) return NULL;
243
244 if (((desiredRange.location + desiredRange.length) > buf->bufferedRangeEnd) || (desiredRange.location < buf->bufferedRangeStart)) {
245 buf->bufferedRangeStart = desiredRange.location;
246 buf->bufferedRangeEnd = buf->bufferedRangeStart + __kCFStringInlineBufferLength;
247 if (buf->bufferedRangeEnd > buf->rangeToBuffer.length) buf->bufferedRangeEnd = buf->rangeToBuffer.length;
248 CFStringGetCharacters(buf->theString, CFRangeMake(buf->rangeToBuffer.location + buf->bufferedRangeStart, buf->bufferedRangeEnd - buf->bufferedRangeStart), buf->buffer);
249 }
250
251 return buf->buffer + (desiredRange.location - buf->bufferedRangeStart);
252 }
253}
254
255CF_INLINE void CFStringGetCharactersFromInlineBuffer(CFStringInlineBuffer *buf, CFRange desiredRange, UniChar *outBuf) {
256 if (buf->directBuffer) {
257 memmove(outBuf, buf->directBuffer + buf->rangeToBuffer.location + desiredRange.location, desiredRange.length * sizeof(UniChar));
258 } else {
259 if ((desiredRange.location >= buf->bufferedRangeStart) && (desiredRange.location < buf->bufferedRangeEnd)) {
260 int bufLen = desiredRange.length;
261
262 if (bufLen > (buf->bufferedRangeEnd - desiredRange.location)) bufLen = (buf->bufferedRangeEnd - desiredRange.location);
263
264 memmove(outBuf, buf->buffer + (desiredRange.location - buf->bufferedRangeStart), bufLen * sizeof(UniChar));
265 outBuf += bufLen; desiredRange.location += bufLen; desiredRange.length -= bufLen;
266 } else {
267 int desiredRangeMax = (desiredRange.location + desiredRange.length);
268
269 if ((desiredRangeMax > buf->bufferedRangeStart) && (desiredRangeMax < buf->bufferedRangeEnd)) {
270 desiredRange.length = (buf->bufferedRangeStart - desiredRange.location);
271 memmove(outBuf + desiredRange.length, buf->buffer, (desiredRangeMax - buf->bufferedRangeStart) * sizeof(UniChar));
272 }
273 }
274
275 if (desiredRange.length > 0) CFStringGetCharacters(buf->theString, CFRangeMake(buf->rangeToBuffer.location + desiredRange.location, desiredRange.length), outBuf);
276 }
277}
278
279#else
280#define CFStringGetCharactersPtrFromInlineBuffer(buf, desiredRange) ((buf)->directBuffer ? (buf)->directBuffer + (buf)->rangeToBuffer.location + desiredRange.location : NULL)
281
282#define CFStringGetCharactersFromInlineBuffer(buf, desiredRange, outBuf) \
283 if (buf->directBuffer) memmove(outBuf, (buf)->directBuffer + (buf)->rangeToBuffer.location + desiredRange.location, desiredRange.length * sizeof(UniChar)); \
284 else CFStringGetCharacters((buf)->theString, CFRangeMake((buf)->rangeToBuffer.location + desiredRange.location, desiredRange.length), outBuf);
285
286#endif /* CF_INLINE */
287
288#if defined(__cplusplus)
289}
290#endif
291
292#endif /* ! __COREFOUNDATION_CFPRIV__ */
293