MAC Audio MP 10.2 System information

This Technote describes software development related changes provided in system software update Mac OS X 10.2.
This Technical Note was created for application developers interested in writing software that is compatible with Mac OS X
10.2. This list includes changes that affect API level programming and product testing, it is not intended to be an exhaustive
list of all the changes in software updates.
Apple Help
Audio HAL
Audio Toolbox
Sound Manager
Speech Recognition Manager
Alias Manager
Appearance Manager
Component Manager
Control Manager
Date & Time Utilities
Dialog Manager
Display Manager
Drag Manager
Event Manager
File Manager
Folder Manager
Gestalt Manager
Help Tags
Icon Services
List Manager
Menu Manager
Navigation Services
Process Manager
Resource Manager
Window Manager
Classic Runtime
Data Management
Drawing and Imaging
Events and Other Input
File, Resource, and Process Management
Interapplication Communication
Services (AppKit)
Text Handling
Threading Support (AppKit)
User Interface Elements
Core Foundation
ATS (Apple Type Services)
ATSUI (Apple Type Services for Unicode Imaging)
OpenGL / OpenGL Carbon / AGL
Quartz 2D
QuickDraw Text
HID Support
Mass Storage
Power Manager
SCSI Architecture Model (SAM)
USB Support
Bridge Technology
Java Classes
Java Deprecations
Java VM
Launch Services
Mach Kernel
Math & Logical Utils
BSD Networking APIs.
Internet Config
URL Access
Open Directory
Security Framework
Core Foundation (general)
Core OS
Disk Arbitration
File Systems
Multilingual Text Editor
Text Encoding Converter
Text Services Manager
Unicode Utilities
AFP Server
[Aug 30 2002]
Apple Help
Apple Help provides system-wide instructional help services for virtually all aspects of Mac OS. The Help Viewer is the
main user interface component of the Apple Help technology.
A problem where AHLookupAnchor could assume incorrect character encoding for the supplied anchor has been
corrected. (r. 2953369).
The new AppleScript commands 'go back', 'go forward', and 'go home' have been added to the Help Viewer's scripting
dictionary. These commands have the same function as the buttons appearing in the Help Viewer's window.(r.
2654316). .
It is now possible to use dynamically generated tables of contents without using frames (r. 2829108). .
The Apple Help Dynamic Table of Contents feature no longer garbles Japanese AppleTitles when they are provided in
a character encoding other than UTF-8 (r. 2859757). .
Additional support for Internet-based help book content has been added (r. 2831085, 2431836, 2431821). .
The table of contents template file can now be named either "toctmpl.htm" or "toctmpl.html"(r. 2829094). .
AppleURLs can now contain partial URL references (r. 2861478). .
Back to top
Apple events provide a simple inter-application and intra-application communications facility for Mac OS X applications.
The routine AESend was returning the result code -600 (process not found) in cases where the target process died
before returning a result from its handler. AESend has been changed to return error code -609
(connectionInvalid) in these cases. This change has the side effect of correcting a problem where AppleScript would
attempt to relaunch the crashed application again when AESend returned -600. (r. 2681459).
Coercing from a floating point descriptor record to an integer rounded differently depending on the target integer
type: typeSInt16 and typeSInt32 used rint-like behavior, rounding to the nearest even integer but typeUInt32 and
typeSInt64 always truncated. These coercions all now behave the same as rint. (r. 2635804).
A problem where the keyEventSourceAttr attribute was being set to kAELocalProcess instead of kAESameProcess
for events that an application targeted to itself have been corrected. Now, the keyEventSourceAttr attribute is set to
kAESameProcess. (r. 2410753).
The AppleEvent Manager has been rearchitected to take advantage of mach virtual memory APIs. While clients of
the AppleEvent manager APIs should not see any functional difference, it is important to note that the new
implementation may differ in behavior for undefined use. In particular, while dereferencing the dataHandle of an
AEDesc has worked in the past, beginning with 10.2 the opacity of the handle is enforced and you must use
AEGetDescData/AEGetDescDataSize to extract the value from an AEDesc. AEGetDescData should not be used on a
complex AEDesc like a list, record, or AppleEvent, however. Since the data is opaque, you should use the field
accessors (AEGetNthDesc, AEGetParamDesc, etc) to extract data from complex descriptors. If you need to serialize
a complex AEDesc, use AEFlattenDesc and AEUnflattenDesc. .
Factored lists and records are deprecated and no longer supported in 10.2. The first parameters to AECreateList
should be NULL and 0, ie: AECreateList(NULL, 0, false, &myList); AECreateList(NULL, 0, true, &myRecord); .
AEGetArray and AEPutArray are unimplemented in 10.2 (r. 3025590) .
Sending an AppleEvent from a thread other than the main thread, and specifying kAEWaitReply, requires that the
outgoing event specify a reply mach port. For example: mach_port_t port; mach_port_allocate(mach_task_self(),
MACH_PORT_RIGHT_RECEIVE, &port); AEPutAttributePtr(&myEvent, keyReplyPortAttr, typeMachPort, &port,
sizeof(port)); AESendMessage(&event, &reply, kAEWaitReply, kAEDefaultTimeout); mach_port_destroy(port);
See AE/AEMach.h for more information. .
Back to top
AppleScript is a component of the operating system that provides a scripting interface for users to automate actions on
system and application data. Even more importantly, it allows users to access functionality of applications which would be
difficult or impossible to access by hand.
AppleScript was ignoring the text item delimiter when converting a list to a string if the text item delimiter was
Unicode text (or, more generally, anything but a string). This problem has been corrected. (r. 2891903).
A problem where coercing a list of items to Unicode text does not preserve the encoding of Unicode text items has
been corrected. (r. 2883592).
Coercions to 'short' such as 'set x to y as short' now work as expected - meaning coerce y to x as a short integer (a
16 bit integer). (r. 2863132).
Added plural form of the "item" class name to Cocoa Scripting. (r. 2862538).
A problem where disabling startup screen in stay-open applets was not working as expected has been corrected. (r.
A problem where the 'list folder' command would not accept a string as its parameter has been corrected. Now, both
the commands 'list folder (path to scripting additions folder)' and 'list folder (path to scripting additions folder as
string)' work as expected. (r. 2856926).
A problem where coercing a folder object to a POSIX path then back to a folder object could produce unexpected
results has been corrected. (r. 2856778).
A problem where writing an empty string to a file was not being interpreted as a request to set the file position has
been corrected. (r. 2855993).
Cocoa scripting correctly converts booleans it receives from AppleScript to boolean NSNumbers. However, when
passing boolean NSNumbers back to AppleScript Cocoa was not converting them into AppleScript Boolean values.
Cocoa now provides the correct coercion to AppleScript Boolean values when converting boolean NSNumbers. (r.
The Cocoa equivalent for the AppleScript type 'msng' (missing value) is now NSNull. (r. 2848555).
NSAppleEventDescriptor now has the designated initializer -initWithAEDescNoCopy method. (r. 2842470).
"do shell script" no longer translates LF and CRLF line endings in the command output to carriage returns. (r.
A problem where files created by "open for access" did not have a type or creator has been corrected. Such files
now have their type set to "TEXT' and their creator set to "ttxt". (r. 2839361).
Fixed problem where Cocoa Scripting's copy command could copy objects in the wrong order. (r. 2838757).
Fixed problem in Cocoa scripting where records were not being passed to command handlers correctly. Rather than
being passed as a dictionary with keys and values corresponding to those in the record, records were being passed
as arrays with interlaced keys and values. Now, records are passed as dictionaries with key value pairs. (r.
A problem where AppleScript's OSASetProperty call could become unstable following a call to OSAExecute has been
corrected (rr. 2830152, 2786611). (r. 2827990).
A problem where compiled scripts containing typeTargetID address descriptors could not be opened in Mac OS X has
been corrected. This problem affected compiled scripts containing statements of the form 'tell app "foo" of machine
"eppc://..."'. (r. 2811892).
The Cocoa scripting requirement that classes in scriptSuite actually exist in Objective-C has been relaxed. Now, if
the scriptSuite class serves as a protocol, then there's no need for the corresponding Objective-C class to exist. (r.
Fixed problem where Scriptable Cocoa applications would leak 2-6 NSTerminologyRegistry objects for each open
document/close document pair of AppleScript commands. (r. 2796255).
The 'quoted form' property of strings now returns a valid quoted string suitable for passing to the 'do shell script'
command. Previously, the resulting string was not encoded correctly. (r. 2793920).
A problem that could cause a crash in scriptable Cocoa applications that did not include a keyAEName code ('pnam')
element in one of their class descriptions has been corrected. (r. 2785426).
Relative specifiers inside of "whose" tests are now evaluated as expected. (r. 2784592).
A problem related to the processing of queued events (events received during the execution of an Apple event
handler) has been corrected. (r. 2973719).
AppleScript enumerators in Cocoa now return the correct value when getting a subclass' property from a
superclass object. (r. 2962920).
UTF-16 to UTF-8 coercion now works as expected. (r. 2918203).
A problem where Cocoa Scripting was mishandling commands of the form "make new <class> at end." has been
corrected. (r. 2869492).
A problem where "do shell script" could fail when with non-ASCII characters in paths has been corrected. (r.
A problem where an AppleScript attempting to send a restart command to a remote machine would cause the local
machine running the script to restart has been corrected. (r. 2840060).
A problem where Cocoa Scripting did not support copying/moving/creating one object on top of another object has
been corrected. Now, it is possible to write the following sorts of scripts for Cocoa applications: tell application
"TextEdit" to copy first word of text of front document to title of front (r. 2838745).
AppleScript now supports typeUTF8Text = 'utf8' for UTF-8 encoded Unicode text. (r. 2835411).
NSNumber<TypeCode> and NSData<...> are now valid scripting types in scripting suite command parameters and
class property declarations for Cocoa applications. (r. 2776086).
In Cocoa scripting, NSDictionarys returned to AppleScript will now be appropriately converted into Apple event
records so they can be accessed as records in AppleScripts. (r. 2480527).
In Cocoa scripting, your - (void) setX: (NSArray *)someX mutator will now be called when someX is an array. (r.
Cocoa scripting now has support for implicitly specified AppleScript properties. Now, the following sort of script
works as expected: tell front document of application "TextEdit" to first word (r. 2243743).
Fixed a problem where osascript would truncate its output if the resulting string returned by the AppleScript it
called contained any null characters. Now the entire string is output as expected. (r. 2852985 ). .
Back to top
This section discusses changes and new features in Mac OS X 10.1 related to audio input and output.
Audio HAL
The Audio Hardware Abstraction Layer (HAL) represents the lowest level of access to audio devices, as well as the general
characteristics of the device.
HAL now provides range information to clients so that they don't have to guess about which sample rates are
actually supported by way of the new device property kAudioDevicePropertyAvailableNominalSampleRates. (r.
HAL now provides the properties kAudioDevicePropertySubVolumeScalar,
kAudioDevicePropertySubVolumeDecibels, kAudioDevicePropertySubMute for controlling the level of iSub
speakers. (r. 2829906).
Added the device property kAudioDevicePropertyDeviceIsRunningSomewhere to AudioHardware.h . This new
property can be used to find out whether or not any given device (input and/or output) is in use by some process
on the system. (r. 2764738).
Fixed an intermittent bug where the HAL could occasionally call a driver's performClientIO with invalid
parameters. (r. 2974014).
A new API for enabling/disabling streams by way of kAudioDevicePropertyIOProcStreamUsage. Now, if an
IOAudioEngine has multiple IOAudioStreams, a client of the Audio HAL can indicate that it only wants to read or
write a subset of those streams. (r. 2829849).
Fixed a memory leak that could occur each time the physical format of a stream is changed. (r. 2802833).
Fixed bug where the volume of the USB audio device was being reset to 0 while speakers are being plugged in. (r.
Reduced the probability of choppy sound occurring when running the HAL at buffer sizes lower than 48 frames per
buffer. (r. 2728301).
Added the new device properties kAudioDevicePropertyTransportType and kAudioStreamPropertyTerminalType
that can be used to discover what the transport (USB, FireWire, etc) type is for a device and the kinds of
functionality that are available for each stream. (r. 2724935).
Back to top
Audio Toolbox
Contains APIs for AUGraph and MusicToolbox. The AUGraph is a high-level representation of a set of AudioUnits, along with
the connections between them. You can use these APIs to construct arbitrary signal paths through which audio may be
processed, i.e., a modular routing system. The APIs deal with large numbers of AudioUnits and their relationships. The
MusicPlayer APIs provide the services of a sequencing toolbox. This toolbox is where events can be collected into tracks,
and tracks can be copied, pasted, and looped within a sequence.
A problem where AUGraph calls could return the value -1 instead of a more informative result code when
reporting error conditions has been corrected. (r. 2886642).
Callbacks in audio headers are now defined using typedefs, which improves compatibility with C users (as opposed
to C++ users). (r. 2781424).
A problem where changing audio formats during audio playback could cause a kernel panic has been fixed. (r.
Built-in audio drivers are now able to report latency. (r. 2652057).
The new /Library/Audio/Plugin directory has been added as a place to put MAS audio processing plugins. (r.
A number of factory preset properties for audio units were added to the headers in classinfo format. (r.
A memory leak in MusicSequenceLoadSMF was corrected. (r. 2848166).
A problem where calling IOAudioLevelControl::create with a subtype of 0 would return an incorrect subtype has
been fixed. (r. 2841871).
Fixed FSSpec problems with AudioToolbox.framework function MusicSequenceSaveSMF. Now this function works as
expected. (r. 2840253).
A new createOutputSelector method has been added to IOAudioSelectorControl.h. (r. 2838912).
A problem where software-controlled input gain only affected the right channel on certain machines has been fixed.
(r. 2781825).
AppleUSBAudio now includes AC-3 support. (r. 2764825).
Back to top
This section discusses changes and new features in Mac OS X 10.2 related to MIDI.
A problem in MIDIEndpointGetEntity() where it could return a successful status result in cases where it failed has
been corrected. (r. 2969576).
A number of bugs in the, SampleUSBDriver, shared source MIDI developers often use to build vendor-specific
drivers have been corrected. (r. 2953808).
kMIDIPropertySingleRealtimeEntity has been added. Some MIDI interfaces cannot route MIDI real time messages to
individual outputs; they are broadcast. On such devices the inverse is usually also true -- incoming real time
messages cannot be identified as originating from any particular source. When this property is set on a device
driver, it specifies the zero-based index of the entity on which incoming real time messages from a device will
appear to have originated from. (r. 2941877).
In actual use, the second argument passed to the CoreMIDI driver's Monitor function did not match its declaration.
The declaration has been updated so it is a pointer to a MIDIEndpointRef rather than the MIDIEndpointRef itself. (r.
A problem where CoreMIDI's use of CFRunLoop was allowing runloop sources (such as timers, etc.) to fire during
an API call, causing re-entrancy issues, has been corrected. (r. 2852701).
When using MIDIPacketListAdd() (in CoreMIDI) to construct a MIDIPacketList with one packet. If the
MIDIPacketList's size is exactly large enough to contain this packet, MIDIPacketListAdd() adds a packet with length
zero (instead of the length requested). This issue has been fixed and MIDIPacketListAdd() now works as expected.
(r. 2824218).
A problem where MIDISendSysex was leaking about 200 bytes per call has been corrected. (r. 2823042).
A problem where calls to MIDISend with zero-length packets could hang the MIDI server task has been corrected.
(r. 2812345).
MIDIPacketListAdd will produce MIDI packets consisting of a SYS EX message followed by a channel message. The
documentation for a MIDIPacket says "In the case of system-exclusive messages, a packet may only contain a single
message, or portion of one, with no other MIDI events." This could cause problems for some drivers and/or the
MIDIServer itself and cause them to drop data. This problem has been corrected. (r. 2809230).
Back to top
Sound Manager
The Sound Manager is the Carbon API for playing and recording sound.
A problem where SysBeep did not work if the system output device did not have any mute controls has been
corrected. (r. 2846418).
Back to top
Speech Recognition Manager
This manager provides speech recognition support in applications.
A problem where SRGetIndexedItem() could erroneously generate the error kSRHasNoSubItems has been corrected.
(r. 2959584).
Speech Recognition would occasionally recognize and consume the listen key (ESC by default), even when using
kSRNoFeedbackNoListenModes, preventing that key from reaching the application. We no longer respond to or
consume the listen key in this situation. (r. 2902460).
Back to top
The Text-to-Speech APIs provide facilities for converting text into audible speech.
On occasion, the order of phonemes in a callback (as created using SetSpeechInfo()) would be incorrect after
calling SpeakBuffer() (even though the spoken phoneme is in the correct order). We now return the phonemes in
the correct order to the callback. (r. 2863646).
When creating phonemes to precisely control text-to-speech pronunciation, using a comma (",") would
incorrectly stop the speech. We now correctly pause and continue on a comma. (r. 2769766).
If a developer calls SpeakBuffer with the controlFlag kPreflightThenPause, and never un-pauses the speech
channel, Speech Recognition and Talking Alert would stop working. This no longer occurs. (r. 2940266).
A problem where, in rare circumstances, an application with many speech API calls in a row might encounter a
race condition that resulted in an application crash has been corrected. (r. 2939995).
Back to top
This section describes changes and enhancements the BSD APIs provided in Mac OS X.
The performance and stability of the tcpdump program has been improved to reduce the likelihood of crashing
while monitoring network traffic. (r. 2936063).
The ulimit routine for controlling process limits is now supported. (r. 2933221).
The BSD lockf() routine has been added. (r. 2926584).
Flat File host searches now read all the way through /etc/hosts. Now, if a host has multiple addresses (say, an
IPv4 and IPv6 address or it has multiple interfaces), there will be multiple lines in the file for that host, and the
search won't stop at the first hit. (r. 2922759).
A problem where shmat would fail with a permission denied error when it was attempted by root has been
corrected. (r. 2910913).
The bzip2 command has been added to the BSD user commands. This tool handles .bz2 compression files. (r.
fs_usage was updated to allow reporting of physical disk I/O. There are 3 main categories of disk I/O that can be
reported using fs_usage: Data, MetaData and Paging operations each of which is either synchronous (implied) or
asynchronous (called out). These physical operations will not show up when tracing a single process (since they
can't be attributed to any particular process). Using the -e option works around this. (r. 2891010).
Fixed a bug that could cause getpwuid to return the wrong user when a NetInfo user and a local user had the same
UID. This correction only applies to cases where the user logged in with the "short" login name (r. 2890314).
Added the APIs getgrnam_r(), getgrgid_r(), getpwnam_r(), and getpwuid_r(). (r. 2885989).
A declaration for the type 'struct timespec' has been added to the header file /usr/include/time.h. (r. 2883165).
declarations and implementation has been provided for the Libc time functions timelocal, asctime, difftime,
localtime, strftime, and strptime. (r. 2882786).
the ld tool has been updated to produce an error message when an attempt to produce an object file with more than
255 sections is made. There is a limit of 255 sections in an object file. However, ld(1) can create object files with
more than 255 sections, which creates unusable object files. We now generate an error message indicating "too
many sections used, maximum is 255". (r. 2882553).
fs_usage has been updated to report the following calls: mkfifo, chhdir, fchdir, utimes, futimes, chroot, undelete,
delete, revoke, fsctl, load_shared_file, and copyfile (NOTE: Several of these commands do not have man pages at
this time (r. 3035842)). (r. 2881912).
The routines pread(), pwrite(), getsid(), and getpgid() are now exported from Libc. (r. 2880097).
the BSD call new_system_shared_regions() is now exported from Libc. (r. 2870742).
The routine posix_madvise() is now exported from Libc. (r. 2869420).
Added support for the BSD calls: sigrelse() and sighold(). (r. 2867958).
Updated printf so that it now supports C99 printf format modifiers. (r. 2867110).
The a64l() routine is now exported from Libc. (r. 2866840).
The thread safe implementation of strtok(), strtok_r(), is now exported from Libc. (r. 2866805).
The thread safe implementation of rand(), rand _r(), is now exported from Libc. (r. 2866795).
MAXLOGNAM is now set to MAXNAMLEN instead of the number 12. This change increases the maximum user name
length. (r. 2863236).
The routines strtoll() and strtoull() are now exported from Libc. (r. 2859956).
The BSD 4.0 routine fflagstostr() is now exported from Libc. (r. 2857680).
The BSD routines strlcat() and strlcpy() are now exported from Libc. (r. 2847856).
The routine mkdtemp() is now exported from Libc. (r. 2846729).
The routines basname() and dirname() are now exported from Libc. (r. 2843401).
Cron jobs now use the new BSD program "periodic" for scheduling. (r. 2842289).
Python 2.1.1 is now installed with Mac OS X. (r. 2839813).
inetd is being replaced with xinetd. xinetd offers a much easier way of adding, deleting or modifying entries in the
inetd daemon list. Rather than editing a single file, /etc/inetd.conf, a directory can have xinetd 'modules' dropped
into it or removed in order to change the configuration, making it much easier to modify system behavior. In Mac
OS X 10.2, inetd is still running for compatibility reasons (r. 2961142) with xinetd alongside it. This is a
potential problem if people are trying to understand why services are running and they are looking in one place for
a service being served when it is actually being served in the other place. Developers should move to using xinetd
rather than inetd as inetd may not be supported in future releases. (r. 2838772).
Added Pluggable Authentication Modules (PAM) to system. PAM is a mechanism for Unix utilities to do
authentication in a flexible and extensible manner. As new authentication methods are adopted, it is simple to write
a new PAM module for that method and have applications automatically become capable of dealing with it, all
without recompilation or change to the applications themselves. (r. 2838768).
The quotaoff is now installed among the BSD tools installed with Mac OS X. (r. 2836259).
A prototype for getnameinfo() has been added to /usr/include/netdb.h. It was already exported from Libc, only the
declaration was missing. (r. 2833476).
Fixed a bug that could cause sscanf with %n to return strange values. (r. 2832277).
Fixed a memory leak in printf that could occur when floating point values were provided as parameters. (r.
A problem where the routine sigpending() was not returning the pending signals in the sigset_t pointed to by its
parameter has been corrected. (r. 2831405).
The bash command shell is now installed with Mac OS X, and has replace zsh as the default /bin/sh (r. 2809843).
Fixed a bug that would cause inet_aton() to return true if passed in a string starting with a space (a poorly
formatted address string). (r. 2809345).
The libedit library has been added to the system. (r. 2807693).
Previously using tcpdump without arguments it didn't always find the default interface (sometimes found none).
Updated default settings so default interface is always discovered. (r. 2797667).
The routine scanf() now supports the "ll" (ell-ell) length modifier. (r. 2789072).
Fixed getservbyname() and getservbyport so that they behave as the man page specifies. Previously, both of these
calls returned the last matching protocol available. (r. 2785437).
The command "chmod +/-t" now works as expected. (r. 2785169).
A problem where the routine gethostbyname() would fail with an IP address if a reverse DNS entry could not be
found has been corrected. Now, it returns the IP address. (r. 2771613).
Fixed sscanf() now works as expected for reading long doubles. (r. 2757634).
The routine remove() has been corrected so it can delete directories. Previously, remove would fail if asked to
delete a directory. (r. 2757437).
The routine pthread_kill() is now exported from Libc. (r. 2753869).
The routine nanosleep() is now exported from Libc. (r. 2753843).
A problem in setlocale() causing it to return incorrect results has been corrected. (r. 2752682).
A problem where the command line tool m4 could hang under certain circumstances has been corrected. (r.
The routine asprintf is now exported from Libc. (r. 2727904).
The Rand48() family of functions are now a part of stdlib. These routines include: drand48, erand48, lrand48,
nrand48, mrand48, jrand48, srand48, seed48, and lcong48. (r. 2718058).
check for locking errors. (r. 2679948).
The routine mkdtemp() is now exported from Libc. (r. 2613958).
The gethostbyname() family of functions have been updated so they are now thread-safe. (r. 2238779).
Removed libcurses from libSystem and replaced it with ncurses. Programs that uses curses functionality will need
to be relinked with the new shared library (r. 2219086).
The tool "automake" is now installed with Mac OS X. (r. 2942208).
Fixed a bug that would cause mktemp() to underrun the template buffer and return an improperly formatted file
name. (r. 2937492).
readdir_r The thread safe version of the routine readdir(), readdir_r(), is now available. (r. 2930202).
When working with .a files, ld(1) does not respect the -no_arch_warnings flag (as it does with .o files). We now
correctly pay attention to this flag with .o files. (r. 2918296).
The Terminal text encoding mode can now be changed to UTF-8 to better support international languages. (r.
The routine printf() now supports vector format specifiers. (r. 2911015).
uudecode now will set execute bits on its output file if they are present in its uuencoded input. It will still not set
sticky bits nor set-id bits. (r. 2910030).
The Ruby scripting language is now installed with Mac OS X. (r. 2809964).
ntpd v4.1.71 is now installed with Mac OS X. (r. 2809093).
The routines inet_pton() and inet_ntop() have been added to Libc. (r. 2372291).
The curses library has been updated to the newer ANSI compliant ncurses library, which supports color and other
advanced text attributes as well as offering greatly increased compatibility with applications which rely on having
a standards-compliant curses library. One side effect of this change is that ALL APPLICATIONS WHICH USE CURSES
MUST BE RELINKED since ncurses is not backwards-compatible with the older version of curses that was shipped
in 10.1. The libncurses library is also now available separately from libSystem in order to minimize the memory
footprint of other applications which do not use curses, so applications using curses must explicitly link with
-lncurses. .
The default aliases and tab-expansion settings for tcsh have reverted to their factory defaults due to various
complaints with the previous highly-customized set of defaults shipped with 10.1 which made using tcsh different
under Mac OS X than on any other Unix platform. Users wishing to have some or all of these defaults back again are
urged to investigate /usr/share/examples/tcsh/README .
Back to top
Carbon is a set of programming interfaces for use in Mac OS applications, especially those being ported from Mac OS 9 to
Mac OS X. Carbon includes about 70 percent of the legacy Mac OS APIs and a number of new APIs for Mac OS X.
Alias Manager
The Alias Manager is the part of the operating system that communicates with the file system to maintain alias records that
are used to keep track of file and folder locations. The Alias Manager does not create Finder alias files; the Finder creates
these files and stores alias records created by the Alias Manager in them.
Aliases to mounted disk image volumes now reference the .img file. As a result, the disk image will be mounted
when the alias is resolved with appropriate mount flags. (r. 2783427).
Alias resolution now does a more thorough job of matching aliases, especially in cases where similar files can be
found on different volumes with the same name. (r. 2776704).
Two new APIs, FSMatchAlias and FSMatchAliasNoUI, have been introduced that provide FSRef based functionality
similar in function to the older MatchAlias routine. (r. 2744821).
A problem where ResolveAlias was incorrectly resolving minimal aliases on volumes that do not natively support
FileIDs has been corrected. (r. 2988555).
A new API, FSCopyAliasInfo, has been added that allows callers to retrieve detailed information from alias records.
(r. 2714855).
Alias resolution now begins with attempting to resolve the file path name first before attempting to resolve the
alias using the file id. This is a fundamental change in the way aliases are resolved and it corrects a problem that
would prevent aliases from working as expected on volumes restored from a back up copy. New flags have been
added to specify the previous behavior (where the file id would be tried first). Pass kARMTryFileIDFirst to calls
which accept a rulesMask or kResolveAliasTryFileIDFirst to calls which accept mountFlags to specify the file id
first behavior. (r. 2683228).
Back to top
Appearance Manager
The Appearance Manager extends the facilities provided by the Control Manager, the Dialog Manager, the Menu Manager,
and the Window Manager to provide a consistent look and feel for all on screen user interface elements in the Mac OS
The new constants kThemeSystemFontDetail, kThemeSystemFontDetailEmphazid, kThemeTextColorSystemDetail
have been added in Apperance.h. (r. 2818428).
The themeNoAppropriateBrushErr (-30568) is now defined in MacErrors.h and can be return by
SetThemeTextColorForWindow (see comments in Appearance.h for more details). (r. 2808256).
The new constants kThemeBrushPrimaryHighlightColor and kThemeBrushSecondaryHighlightColor are now
available in Appearance.h and should be used as seen in the column view of the Finder. (r. 2763475).
Performance of Unicode text drawing in items displaying text has been improved. (r. 2704870).
A new constant, kThemeToolbarFont, has been added to the ThemeFontIDs to support the new Toolbar object. (r.
A problem in Mac OS X 10.1 where drawing with a pattern selected by calling ApplyThemeBackground(
kThemeBackgroundWindowHeader ... ) did not produce the same results as the call DrawThemeWindowHeader() has
been corrected. (r. 2760583).
Back to top
Component Manager
The Component Manager provides facilities for tracking and calling code modules that provide a defined set of services to
one or more clients (components).
In Mac OS X 10.1, the component manager would sometimes crash if a component call was made on an invalid
component (such as a component that had been closed). This bug has been fixed. (r. 2772868).
Back to top
Control Manager
The Control Manager provides facilities for drawing and processing user interaction with on screen items inside of
A problem where the Mach-O implementation of IsAutomaticControlDragTrackingEnabledForWindow was returning
an incorrect value has been corrected. This problem could cause unexpected results in drag and drop operations
after calls to SetAutomaticControlDragTrackingEnabledForWindow (r. 2447465). (r. 2764233).
A problem where the minimum width in specified for a list view column could be ignored, or modified to a larger
value, during a live resize operation has been corrected. (r. 2761051).
A new constant, kControlEditTextSingleLineTag, has been added to ControlDefinitions.h for use with the Unicode
Text Control. This control data tag allows you to turn on or off single line editing. (r. 2733779).
GetControlData(..kControlStaticTextTextTag..) will now works correctly even if the text was set using
SetControlData(..kControlStaticTextCFStringTag..). (r. 2700210).
Static Text Controls now truncate text properly when the kControlStaticTextTruncTag is used. (r. 2661131).
A problem where, under certain conditions, calling SetDataBrowserTableViewColumnPosition could swap the
column widths of the columns being moved has been corrected. (r. 2658667).
A problem where moving the column containing the disclosure triangles could cause the data browser to crash has
been corrected. (r. 2655765).
A problem where calling SetDataBrowserListViewDisclosureColumn could change the column width has been
corrected. (r. 2652930).
A problem where calling ExecuteDataBrowserEditCommand(macControl, kDataBrowserEditMsgCopy) command
would not copy the text of the selected items to the scrap has been corrected. (r. 2511863).
Problems in the Control Manager's handling if IconRefs have been corrected. This was a retain/release problem
with icon references that could cause the inadvertent disappearance of icons. (r. 2979503).
Disposing a control that is the default or cancel button in a window now clears properly and the window no longer
attempts to use it. (r. 2954785).
A problem in the data browser related to column widths of non-resizable columns used to display an hierarchical
lists has been corrected. Here, disclosing hierarchical items would not widen columns while collapsing them would
make the same columns smaller. (r. 2814835).
A problem where moving an EditUnicodeText control between windows with EmbedControl would crash has been
corrected. Here, the control was keeping some internal fields pointing to the original window. This has been fixed.
(r. 2795838).
FindControlUnderMouse now accepts a NULL value for the outPart parameter. This is useful for cases where your
program is only interested in finding the control under the mouse, but not the part code describing the part of the
control under the mouse. (r. 2879400).
Back to top
Date & Time Utilities
The Date & Time Utilities provide facilities for accessing the clock chip and APIs for converting dates between various
Fixed an obscure conversion problem with StringToDate() where it could fail on the date of January 1 of any year
where (year mod 400) equals 101. (r. 2860198).
Added support for time zone support for cities in Portugal, Croatia, and Slovenia. (r.2946953) (r. 2928698).
Back to top
Dialog Manager
The Dialog Manager manages user interactions with windows containing controls arranged and positioned using dialog layout
RunStandardAlert disposes of the dialog before returning. More comments have been added in Dialogs.h for
RunStandardAlert and CreateStandardAlert to clarify the allocation/deallocation issues. (r. 2828656).
Problems where the DITL accessor routines could crash if passed NULL dialog item list handles have been
corrected. (r. 2603639).
Memory leaks that could occur when using GetNewDialog or DisposeDialog with sheets have been corrected. (r.
A problem where GetDialogItem could alter the font information in the active window port, rather than the explicit
dialog port, has been corrected. (r. 2938978).
Back to top
Display Manager
The Display Manager allows users to dynamically change the arrangement and display modes of the monitors attached to
their computers.
Problems with calling DMRegisterExtendedNotifyProc with kFullDependencyNotify have been corrected. (r.
Added new Display Manager notifications for display sleep and wake. Check gestaltDisplayMgrSleepNotifies to make
sure it is available and see Displays.h for kDMNotifyDisplayWillSleep and kDMNotifyDisplayDidWake. (r.
Back to top
Drag Manager
The Drag Manager supports drag-and-drop operations between windows and applications.
A new constant, kDragStandardDropLocationTrash, has been added in Drag.h. When used with the new API,
SetStandardDropLocation, an alias to the Trash will be set as the drop location (r. 2916609). (r. 2829056).
Calling SetDragImage() can be called multiple times during a Drag to update the drag image. Unfortunately, there
was a problem where the image flags parameter was being ignored after the first call to SetDragImage(). Now, the
flags parameter is observed on subsequent calls to SetDragImage. This allows callers to turn on and off the drag
region during a drag by changing the kDragRegionAndImage flag. (r. 2641813).
A problem where the region offset of the masking region was being ignored by SetDragImage has been corrected. (r.
A new API, SetDragImageWithCGImage, has been added to Drag.h to enable callers to specify a CGImage as a drag
image. (r. 2916609).
Back to top
Event Manager
The Event Manager manages the delivery of information about system operations and user interaction to applications.
A problem where an activate events were not being generated properly between calls to BeginFullScreen() and
EndFullScreen() has been corrected. (r. 2873868).
A new constant, kMouseTrackingMouseMoved, has been defined as one of the possible result codes returned by
TrackMouseLocation/TrackMouseRegion. Previously, calling TrackMouseLocation/TrackMouseRegion while the
mouse button did not work. Now, if your application calls TrackMouseLocation/TrackMouseRegion while the mouse
button is up, kMouseTrackingMouseMoved will be called when the mouse is moved. (r. 2792773).
New Mouse Tracking Region APIs are now available (see Carbon/CarbonEvents.h). (r. 2716688).
Mouse delta values provided in mouse moved events are now calculated correctly. (r. 2673343).
A problem where an application using the classic event model would not receive an osEvt (mouse-moved) event
when it was switched into the foreground has been fixed. (r. 2671602).
SendEventToEventTarget now returns paramErr for an invalid target. (r. 2976195).
Application handlers are now sent kEventAppGetWindowToActivateOnResume when an application is being switched
into the forground to allow an application to pick which window should be activated when it is switched in. In the
handler, your application can return a reference to the window to be activated, return NULL if none is desired, or
fall through to the default handler. This facility is especially useful for providing expected window selection
behavior in Cocoa applications containing Carbon windows. (r. 2971154).
Floating utility windows can now receive kEventMouseWheelMoved events. (r. 2751193).
Events for 'application hidden' and 'application shown' have been added to Carbon Events. (r. 2693184).
Back to top
File Manager
The File Manager provides APIs for storing and retrieving disk-based information.
A problem where the containerChanged parameter to FSGetCatalogInfoBulk was being ignored (and not set to any
value) has been corrected. In Mac OS X 10.2, it is always set to false. (r. 2874842).
In Mac OS X 10.1, attempts to iterate through the list of mounted volumes before the first call to the event loop
would return a list of local volumes and the volume on which the application is running would be returned remote volumes would not be included in the list of volumes returned. This problem has been corrected. (r.
2895905). (r. 2759485).
With Mac OS X 10.2, when one process opens a file with write access, it will have exclusive write access. If
another application tries to open the same file with write access it will fail. See Technical Note TN2037 for
further information. (r. 2663613).
New volume signature word has been added for FTP servers mounted as volumes. Here's a list of common volume
sigwords currently in use: 0x4B47 = FTP, 0x4341 = webDAV, kHFSPlusSigWord = HFS+, kHFSSigWord = HFS,
0xd2d7 = MFS, 0x4B48 = UFS, and 0x4E4A = NFS. (r. 2865998).
A new set of APIs for mounting, un-mounting and ejecting volumes has been added to the File Manager. The routines
allow for both synchronous and asynchronous operations. The routines are FSMountServerVolumeSync,
FSMountLocalVolumeSync, FSUnmountVolumeSync and FSEjectVolumeSync (replace Sync with Async for the
synchronous variants). (r. 2788787).
Hard link support in has been added to the File Manager. The new kFSNodeHardLinkBit bit has been added to Files.h
that allows callers to determine if a file system reference is actually a hard link. If this bit is set, then callers can
use stat(2) to find out more information about the file. (r. 2719873).
Back to top
Folder Manager
The Folder Manager provides facilities for locating "special" folders (for example, the Extensions folder) without relying
on the names of those folders. This aids developers in application localization.
Added the new FindFolder selector constant kManagedItemsFolderType defined that allows callers to locate the user's
"Managed Items" folder. (r. 2871449).
A problem where calls to FindFolder with create flag set was not setting the correct permissions on the Temporary
Items folder has been corrected. Now, the folder is created with "world privileges" with the sticky bit set. (r.
A new FindFolder selector constant, kKeyboardLayoutsFolderType, was added in Folders.h to allow callers to locate
the user-installible keyboard layouts folder. (r. 2842566).
A new FindFolder selector constant, kFindByContentIndexesFolderType, was added that allows callers to find the
find by content folder. (r. 2826947).
A problem where calls to asking it to create the kInstallerLogsFolderType folder (/Library/Receipts/) would
always fail with a error of type -43 has been corrected. Now, when this folder is not present, it will be created as
expected. (r. 2656007).
Back to top
Gestalt Manager
The Gestalt Manager provides a simple, efficient way for your application to determine the user's hardware and software
configuration at runtime so that you can fully exploit the available features or inform the user if a necessary feature is
The Gestalt selector gestaltCarbonVersion returns version 1.6 when called in Mac OS X 10.2. (r. 2870430).
Back to top
Help Tags
Help Tags are the primary method for providing context sensitive help in Mac OS X. They are the Mac OS X replacement for
the older Balloon Help technology.
The help tag code for menu titles used to check whether the point was inside the absHotRect before displaying the
help tag. Now, when checking for a menu title help tag, the absHotRect is now ignored; the menu title's actual
bounds is always used. This allows a menu title content callback to return an empty absHotRect. Also, after calling a
content callback for a control, window, or menu item, the code now checks for an empty absHotRect and normalize
the hot rect to the current global position of the object. This allows content callbacks for these objects to return
empty absHotRects. Previously, they had to determine the actual current global coordinates of the object and put
that into the absHotRect for the help tag to display. Finally, another minor change to the code now checks whether
the mouse is inside the absHotRect before displaying a menu item help tag. This generally will have no effect, but
it's meant to allow a custom MDEF that only wants to display help tags over a subset of its content area to customize
the hot rect. (r. 2833495).
In Help, a HelpContentRec content type was added to support a localized string. Newly added is
kHMCFStringLocalizedContent, which uses the tagCFString field of the HMHelpContentRec. The CFString is
interpreted as the name of a localized string in the application's bundle. CFCopyLocalizedString is used to load the
string, and it's released when the system is done with it. Also fixed was a long-standing bug where the content
callback was not being called with a kHMDisposeContent request when the content type was CFStringRef. This could
lead to memory leaks of CFStringRefs. (r. 2806155).
It is now possible to break the text displayed in help tags into multiple lines of text by including line feed
characters in the text. (r. 2696185).
It is now possible to create help tags for utility windows. (r. 2526126).
Back to top
Icon Services
Icon Services provides fast and efficient facilities for retrieval of appropriate icon information used to represent files,
directories, or other commonly used icons (for example, the caution alert icon, the note alert icon, and the help icon).
GetIconRefFromFile now badges icons returned for alias files as expected. (r. 2663503).
A problem where SetIconFamilyData could fails with memFullErr (-108) when given valid parameters has been
corrected. (r. 2952322).
GetIconRefFromFile now supports custom badge resources. .
GetIconRef now supports creator/types that have been registered with LaunchServices. .
Some IconServices APIs are now thread safe (see APIs comments in Icons.h). .
IconServices supports custom media icons via IOMediaIcon property. See Mass Storage release notes for details. .
Back to top
List Manager
The List Manager provides a standard user interface for drawing and managing user interaction with lists of items.
References to the type ListRef have been removed from Lists.h. All of these references have been replaced with
ListHandle (r. 2837663). .
Back to top
Menu Manager
The Menu Manager is the part of the operating system responsible for both drawing the menu bar, and drawing menus and
pop-up menus on the screen while the mouse is being held down.
The Menu Manager now invalidates the command key cache whenever hierarchical menus are inserted or removed.
This change clears out any stale command key/menu associations left in the cache after the active menu set is
changed. (r. 2866303).
The new constants kMenuAttrHidden and kMenuItemAttrIncludeInCmdKeyMatching have been added to the added as
possible Menu Item attributes. (r. 2835332).
New kEventClassMenu Carbon events have been added: kEventMenuMeasureItemWidth,
kEventMenuMeasureItemHeight, kEventMenuDrawItemText. (r. 2810789).
Implemented support for a MenuContext parameter in menu-originated command events so that the handler can
determine from where the command came from. (r. 2790403).
Removed the limit of 5 hierarchical menus on-screen at once. (r. 2456159).
Back to top
Navigation Services
Navigation Services provides new Open and Save dialogs, allowing users to locate and select files and other resources.
NavCustomControl/kNavCtlSelectCustomType now works correctly instead of returning error -5697
(kNavCustomControlMessageFailedErr). (r. 2763191).
You can now pre-select the default location in Navigation Services in the same way it used to work on Mac OS 9. (r.
Back to top
PLStringFuncs provides a number of Pascal-string APIs that are similar to the standard C library string routines.
The routine PLstrcat(a,b) in CarbonCore was broken if length of a + b > 255 characters. It now does proper range
checking. (r. 2865047).
Back to top
Process Manager
The Process Manager provides a set of APIs allowing processes to find out information about other processes registered
with the Process Manager.
Calling GetNextProcess or GetProcessInformation with an invalid ProcessSerialNumber now properly returns
procNotFound instead of noErr. (r. 2971688).
Back to top
Resource Manager
The Resource Manager provides a data file format for storing and retrieving information used during application and
operating system run time.
The CSResourcesFileMapped info.plist key is now respected for single binary applications. (r. 2704627).
FSCreateResourceFork API was added to create a resource fork given an FSRef. (r. 2650255).
Back to top
Window Manager
The Window Manager provides facilities for drawing and maintaining windows on the screen.
When using GetWindowIdealUserState() or ZoomWindowIdeal() on an un-initialized window, we incorrectly
returned an empty rect (0,0,0,0). We now return the window's global port bounds instead. (r. 2804328).
In some circumstances, clicking on a window with an active sheet brought the window to the front, but didn't
activate it (clicking on the sheet would activate the window). We now activate the window regardless of where the
window was clicked. (r. 2799575).
On floating utility windows with no title-bar widgets (i.e. with window attributes set to kWindowNoAttributes),
long titles would create a rectangle off the edge of the window (instead of truncating the title). We now correctly
truncate titles to the width of the title-bar. (r. 2781092).
Using SetCursor() from a background application with a utility window had no effect. SetCursor() now works for
both foreground and background applications over utility windows. (r. 2779450).
Previously, adding windows to the standard Window menu required creating the menu before creating any windows.
We now automatically add existing windows that have the InWindowMenu attribute to the Window menu when that
menu is created. (r. 2754926).
In some situations involving floating windows, system-generated modal dialogs might appear in incorrect locations
(centered on a floating window, generally). We now correctly position modal dialog boxes on the front-most,
non-floating window. (r. 2676193).
If an application is hidden, it was still possible to show a window (using ShowWindow(), e.g.) for that application.
We now correctly prevent a window from being shown if an application is hidden. (r. 2494500).
Back to top
Classic Runtime
The Mac OS X Classic Runtime environment provides a Mac OS 9 compatibility runtime environment for legacy applications
and software.
A problem where launching classic could trash the contents of the clipboard has been corrected. Affects Mac OS X
10.1.2 and later. (r. 2835692).
A number of issues related to transferring the contents of the clipboard to and from the classic environment have
been corrected. related to 2763740, 2395383. (r. 2773083).
Fixed a problem whereby if a KEXT did a programmatic setting of ClassicMustSeize on a USB device in the
IORegistry, it could crash the Classic Environment. (r. 2911540).
Enhancements were made for Classic's recognition of NFS volumes. (r. 2897832).
GetProcessInformation will now return correct type and creator information for Classic Desk Accessories. (r.
The Classic File Manager now calls through the Carbon File Manager. One of the benefits of this is to allow Classic
applications access to WebDAV, DOS FAT, SMB, UFS, etc. volume formats supported by the Carbon File Manager. (r.
2842657) (r. 2884689).
Classic can now handle DebugStr being called from an MP task. (r. 2866846).
A problem where AltiVec registers would be trashed by calls to WaitNextEvent has been corrected. (r. 2768550).
Fixed a problem where a USB composite device - a headset with HID controls - would keep Classic from starting.
Besides fixing the specific problem, which was an internal bug in Classic, a change was made to Classic USB policy
for MacOS X 10.2 and later. The new policy is that if a USB device has multiple interfaces, some of which are of the
class that they might have been opened by Classic to be visible to the emulated MacOS 9 environment, yet others of
which are not and thus might successfully match to a Mac OS X driver, then the entire device is not opened by
Classic and thus will only function in the Mac OS X environment. In other words, "split cases" where a USB device
has some interfaces in use by Classic and some by "X" drivers, will no longer be allowed. For additional
information on which devices are seized by Classic, search for the document "Classic USB Device Arbitration" on and in the USB SDK; it has been updated for Jaguar. (r. 2761572).
Calling LMGetBootDrive() from classic now returns the correct volume reference number. (r. 2756118).
It is now possible for classic applications to extract the process serial number from an Apple event they received
from a Mac OS X application, save that process serial number, and later use it to send an Apple event to that
application. (r. 2392561).
A problem where Application Died events were not being sent for Classic applications that had unexpectedly quit
has been corrected. (r. 2922254).
When called from a Classic application, PBHGetDirAccess was failing with a paramErr (-50). This has been
corrected. (r. 2908703).
A problem where Gestalt() was returning the wrong system version - 9.2 rather than 9.2.1 - when called in a
classic application running in the Classic environment in Mac OS X 10.1 has been corrected. (r. 2771448).
Better Apple Event error checking and handling has been added to Classic Support's Apple Event handlers. This
helps prevent possible crashes inside Classic if an error occurred while an Apple Event was being processed. (r.
A problem where applications in the Classic environment could not connect to localhost tcp servers running in Mac
OS X has been fixed. (r. 2831535).
A problem where PAP spoolers running in the Classic environment could not be seen over AppleTalk by
PrintCenter has been fixed. (r. 2720750).
Back to top
A set of object-oriented frameworks that support rapid development and high productivity, using a dynamic runtime and
rich object hierarchy. Please refer to file:///Developer/Documentation/ReleaseNotes/AppKit.html on your 10.2 system
for detailed information on changes in Cocoa in 10.2.
AppKit is a framework that provides graphical objects with default behaviors for rapid application development, including
windows, panels, buttons, menus, scrollers, text fields, and more.
The declaration of NSCopyBitmapFromGState() listed in NSGraphics.h was removed. (r. 2781664).
NSColor's +colorWithPatternImage method now returns an auto-released object, where before it did not
(r.2797049) .
Back to top
AppKitJava refers to the Java-language-specific portion of AppKit.
-outlineView:itemForPersistentObject: now has a Java based counterpart named
outlineViewItemForPersistentObject. As well, -outlineView:persistentObjectForItem: now has the Java based
counterpart outlineViewPersistentObjectForItem. (r. 2837824).
Cocoa-Java's NSSavePanel didn't have a way to set wether or not the extension is shown. Now, the following APIs
can be used to control extension hiding: setCanSelectHiddenExtension, isExtensionHidden, and setExtensionHidden.
(r. 2830102).
Back to top
Data Management
Data Management involves the various object classes, including strings, dates and times, collections, numbers, and the undo
architecture that Foundation provides.
NSString's -stringWithContentsOfURL: no longer leaks memory. (r. 2916292).
NSMutableString's -deleteCharactersInRange: now throws an exception if the range is invalid for the calling
string. (r. 2877676).
NSMutableString's -setString: method now raises an exception when passed nil. (r. 2860954).
NSString's -stringByAppendingString method now raises an exception if you pass a nil pointer. (r. 2838156).
NSString's -hasPrefix: and -hasSuffix: methods now raise exceptions in cases where they would crash before when
passed nil. (r. 2835658).
Out-of -bounds accesses in NSString's -characterAtIndex: and -getCharacters:range: will now cause exceptions (r.
NSMutableString now has a method, -replaceOccurrencesOfString:withString:options:range: to replace all
occurrences of a target string with another. It does this in a way that is potentially a lot more efficient than
multiple calls to find and replace.
Back to top
Drawing and Imaging
The portion of AppKit devoted to graphics, views, printing, and OpenGL.
A problem where some black and white GIF's didn't render correctly has been corrected. (r. 2973862).
Asking for a cached image representation deeper than the screen now returns the requested depth. (r. 2972400).
Three new alternate selection colors have been made available in Interface Builder. (r. 2956191).
NSView's -inLiveResize method now always returns the correct value, instead of getting "stuck" at YES. (r.
In a Cocoa window, springs now work correctly when you have a control that you want to maintain a constant width
and distance from the right-hand side of the window. (r. 2948689).
New methods for alternate selection colors are publicly available. (r. 2939444).
NSEPSImageRep now claims all EPS file types including 'TEXT', EPS, EPI, epsf, epsi, EPSF, and EPSI. (r.
A problem where using [NSPatternColor isEqual] against objects of the same type could throw an exception has
been fixed. (r. 2838383).
Cocoa's NSSplitView now returns proper values from -isSubviewCollapsed: instead of returning false positives
under some circumstances. (r. 2620918).
Cocoa views and controls now move properly in response to springs and struts when their superview is resized,
without round off errors creeping in. (r. 2173955).
Back to top
Events and Other Input
The portion of AppKit relating to event handling and user event processing.
Cocoa applications with dock menu items now pass back the correct sender. (r. 2751274).
Back to top
File, Resource, and Process Management
AppKit classes involved in working with the variety of components needed during program execution, including file
management, images, code, and system information.
The NSFileManager APIs now provide access to file creation dates. (r. 2814464).
The NSFileManager APIs are now able to report additional file properties based on flags returned by the BSD stat
call. For example, the IMMUTABLE bit (uchg), which maps to Finder's "islocked" bit was not available through the
NSFileManager APIs prior to this change. (r. 2750685).
Back to top
The Foundation framework defines a base layer of Objective-C classes. In addition to providing a set of useful primitive
object classes, it provides support for Unicode strings, object persistence, file system functions, scripting, and more.
The Documents directory was added to the list of NSSearchPathDirectories for use in
NSSearchPathForDirectoriesInDomains. (r. 2925120).
+[NSHost currentHost] no longer crashes if configd isn't running. (r. 2913313).
NSTasks launched from a non-main thread no longer hangs in -waitUntilExit. (r. 2910194).
NSHost's +hostWithName: now treats the empty string the same as nil. (r. 2903003).
If the server dies while the client is waiting for a Distributed Objects reply, the client now gets an exception
almost immediately, instead of waiting for a timeout, etc. (r. 2902227).
A number of problems related to using pthreads (as opposed to threads created with NSThread) have been resolved
in AppKit. (r. 2895833).
For applications compiled against Mac OS X version 10.2, NSCalendarDate's -classForCoder now returns -[self
class] instead of +[NSCalendarDate class] so that subclasses don't have to override this method. (r. 2867607).
NSString's -writeToFile:atomically: no longer fails when using a relative path based in /tmp. (r. 2856590).
Sending NSData with Distributed Objects no longer leaks for lengths greater than 4095 bytes. (r. 2803364).
NSRunLoop now implements -description. (r. 2803315).
NSClassFromString() and NSStringFromClass() no longer crash when passed nil; they now return nil instead. (r.
-[NSMutableArray removeObjectsFromIndices:numIndices:] no longer raises spurious exceptions. (r. 2800991).
[[NSHost currentHost] addresses] now returns a complete list of IP addresses when connected through DHCP,
instead of only - localhost. (r. 2665193).
NSInvocation no longer coerces negative values for char or short arguments to unsigned (positive) values. (r.
[[NSProcessInfo processInfo] arguments] no longer fails when one of the argument strings contains high-ASCII
characters. (r. 2474167).
[NSThread description] now returns useful information about the thread in question, not the currently running
thread. (r. 2309712).
NSTask now generates a more complete error message if it cannot exec its task. (r. 2205786).
-[NSSocketPort scheduleInRunLoop:forMode:] could exit a critical region without unlocking its lock under some
conditions. This has been fixed. (r. 2983123).
NSMethodInvocation no longer gets confused in Distributed Objects calls to methods that have long long int
arguments. (r. 2940584).
NSHost's +currentHost method no longer initiates a dialup connection. (r. 2914589).
-[NSNumberFormatter initWithCoder:] no longer leaks two NSDecimalNumbers. (r. 2884200).
+[NSCalendarDate dateWithString:] now correctly returns an NSCalendarDate object. (r. 2874746).
-[NSDate isEqualToDate:] now raises an exception if you compare your date with nil. (r. 2873711).
A memory leak in NSCountedSet has been corrected. (r. 2853676).
Applications no longer crash when mapping more than 4GB of data into memory using NSData. (r. 2810307).
-[NSMutableArray replaceObjectsInRange:withObjectsFromArray:range:] now works even if the other array is
equal to the receiver. (r. 2803598).
-[NSDictionary description] will no longer raise an exception if the dictionary's keys are of different classes, as it
would in some cases before. (r. 2699692).
NSNumber/CFNumber now work better together when doing comparisons and equality tests. (r. 2546052).
Back to top
The Java-language-specific portion of the Foundation Cocoa framework.
None of the NSFile* constants, like NSFileHFSCreatorCode, NSFileHFSTypeCode, NSFileExtensionHidden, etc.
existed on the Java side in Cocoa-Java AppKit; they have now been added. (r. 2830098).
NSScriptObjectSpecifier had a Misspelled field with the name InvlaidIndexSpecifierError. This field has been
renamed as InvalidIndexSpecifierError. (r. 2647563).
Back to top
Interapplication Communication
The portion of Cocoa providing functionality in the areas of distributed objects, system services, OS services, networking,
and rendezvous technologies.
A problem where dragging images to the NSPasteboard could leak some data into a private system memory area has
been corrected. (r. 2921843).
A problem in _NSLookupPBS() where spurious NSPortTimeoutException exceptions could be generated when it was
called from an application running as part of the login sequence has been corrected. (r. 2863180).
Moving a file to the trash with NSWorkspace now updates the Finder and succeeds even if a file with the same name
is already in the trash. (r. 2853822).
NSWorkspaceDidTerminateApplicationNotification is now sent even if the app that is terminating was already
running when you started to observe the notification. (r. 2841095).
Carbon 'url ' drag flavor is now mapped to a NSURLPboardType. When both a 'furl' and 'url ' are present in a drag
(which are both convertible to NSURLPboardType) AppKit will now choose to convert the 'furl' first. (r.
NSWorkspace now returns correct application names in notifications when the application names contain "." or
other special characters. (r. 2671677).
A problem where large cut and paste operations of formatted text from Cocoa applications could lose style
information has been corrected. (r. 2630845).
A problem where NSWindow's dragImage was sometimes being drawn in the wrong location has been corrected. (r.
A problem where private drags initiated from Cocoa applications were being passed through to carbon applications
has been corrected. (r. 2627542).
Back to top
The portion of AppKit providing sound and video support.
An application with an NSMovieView with autoresizing turned on would sometimes display garbage or black bars
over the controller during window resizing. We now correctly redraw the region during live resize. (r.
Back to top
Services (AppKit)
Services give applications an open-ended way to extend each other's functionality by allowing applications to provide
services to other applications, and access functionality provided by other applications.
Third-party spell checkers now launch automatically (r. 2766130).
Non-packaged Carbon applications can now provide Services. (r. 2761555).
Back to top
Text Handling
One of the portions of AppKit dealing with text.
Support for bi-directional layout added to support those languages that require it (Arabic and Hebrew). (r.
Implementation of NSRightTabStopType, NSCenterTabStopType, and NSDecimalTabStopType have been provided for
the declarations of these routines in AppKit/NSParagraphStyle.h. (r. 2116892).
A problem where NSAttributedString's -size method would fail to take into account the height of fonts occurring
later in the string has been corrected. (r. 2824091).
Fixed a bug where NSString sizeWithAttributes could return imprecise values when used with
NSCenterTextAlignment. (r. 2727150).
Cocoa text now uses the same line layout engine used by ATSUI, leading to greater consistency between Cocoa and
Carbon, as well as support for complex writing systems. (r. 2570275).
Back to top
Threading Support (AppKit)
Threading support in AppKit.
NSWindows can now be created in threads other than the main thread. (r. 2887016).
Back to top
User Interface Elements
AppKit provides a rich selection of controls and user interface elements, and the classes used to control them.
NSTextViews that can't import graphics are now able to export them (for copy/paste, etc.), i.e. if they contain
attachments added programmatically. (r. 2979744).
NSProgressIndicator's -sizeToFit method now respects the NSControlSize setting for the control. (r. 2963039).
setImage: is now declared in NSBrowserCell.h. (r. 2918420).
NSTableView's -setIndicatorImage: now retains the image passed to it, so that if it's given an autoreleased image
(with a retain count of 1), a crash won't occur. (r. 2891170).
In some situations, NSTableView's -selectedRow method used to return 0 instead of -1 when there were no rows in
the table. This has been fixed. (r. 2889283).
Cocoa-Java's NSTableView class now has methods for setting and getting the indicator image for a table column, as
well as highlighting a given table column. (r. 2885558).
Drawing problems associated with drawers and deferred windows have been corrected. Drawers were not being
displayed as expected. The work around for this problem, that is no longer needed, was to tell the drawer to close
and open again after the deferred window is visible. (r. 2884722).
Users can now use cmd-shift-` to send keyboard focus to a drawer. Previously, it was only possible to do so by
clicking on a drawer. (r. 2872115).
Carbon windows (from Java or QuickTime) in a Cocoa app now get events properly. (r. 2865112).
NSDrawers now attach properly to NSWindows created from Carbon windows (via -initWithWindowRef:). (r.
an empty NSTableView's -selectedRowEnumerator used to return an enumerator with 1 element. This has been
fixed. It now correctly returns an 'empty' enumerator object. (r. 2854415).
NSTextView's -selectionRangeForProposedRange:granularity: now returns the last word instead of raising an
exception when the granularity is NSSelectByWord and the range's location is equal to the length of the underlying
string and the length is 0 (i.e., an insertion point at the end). (r. 2845418).
A bug in Cocoa applications where the parent window did not always become key when its sheet was dismissed has
been fixed. (r. 2800050).
Carbon WindowRefs for Cocoa NSWindows (created using -initWithWindowRef:) now have their regions maintained
correctly as the Cocoa window resizes and moves on the screen. (r. 2769632).
NSOutlineView has had its row limit of 32767 children in an item removed. (r. 2761925).
A problem where a drawer associated with a utility window overlapping another utility window could be displayed
with the wrong window has been corrected (r. 2659187).
Tooltip rects are now clipped to the visible frame of their view's parent scroll view. (r. 2565501).
Calling NSButton setKeyEquivalent will now cause the default button to be displayed in the "default" key manner.
(r. 2450365).
In some situations, NSTableView used to incorrectly call the willDisplayCell: delegate method before setting the
cells object value with setObjectValue:. This has been fixed. NSTableView should now always set the object value of
the cell first before sending it's delegate the willDisplayCell: delegate message. (r. 2362114).
In some cases, AppKit did not send a mouseExited event the first time the mouse was moved outside a tracking rect.
This problem has been corrected. (r. 2480290).
Back to top
Core Foundation
Core Foundation is a set of APIs used as a common data and service abstraction layer for other high level software facilities
in Mac OS X. Please refer to CoreFoundation release notes
(file:///Developer/Documentation/ReleaseNotes/CoreFoundation.html on your 10.2 system) for more details.
Preference Services allows you to store values that are associated with a key that can later be used to look up the
preference value when you need it. Key/value pairs are assigned a scope using a combination of user name, application ID,
and host (computer) name.
In order to better support operation in a managed environment, a new API has been added to CFPreferences: Boolean
CFPreferencesAppValueIsForced(CFStringRef key, CFStringRef applicationID); Developers may call this to
determine the user's ability to change the value for a given preference key. If a key is "forced" then developers
should disable UI appropriate to changing the value. Previously, there was no mechanism to determine if a value
was forced for a particular key. (r. 2889315).
Back to top
CFReadStream and CFWriteStream are abstractions of one-way byte streams that are used much as file descriptors are
used in POSIX. They can be created to or from files, sockets, or memory; CFNetwork defines other useful kinds of streams.
Async notification of dynamic store changes has been added, meaning that an event-based socket stream that has a
link go dead will receive an error event indicating a dead connection. All socket streams by default are opted into
the auto-erroring. (r. 2705758).
Property names and values have been added to CFNetwork/CFSocketStream.h for manipulating SOCKS proxies.
These include support for SOCKS4 and SOCKS5. (r. 2705566).
CFReadStreams and CFWriteStreams created to/from a host no longer block in open looking up the host's IP
address; instead, the lookup is done asynchronously, and the call to CFReadStreamOpen (or CFWriteStreamOpen)
returns immediately. (r. 2683774).
Socket reading I/O performance has been improved. (r. 2938957).
Back to top
String Services is an API that provides a suite of efficient string-manipulation and string-conversion routines.
A problem where CFStringGetBytes would ignore its range parameter when asked to retrieve a range of bytes from
a Unicode (kCFStringEncodingUnicode ) string has been corrected. (r. 2812392).
CFStringCreateWithCString now does better error checking and will return NULL if passed an improperly encoded
UTF-8 C string. For example, if you provide a C style string and indicate that the format of the string is
kCFStringEncodingUTF8 but the string contains non-UTF-8 characters, then CFStringCreateWithCString will
return NULL. (r. 2980386).
Back to top
Core Foundation's XML parser for reading XML documents.
CFXMLParser now handles UTF-8 documents with a byte order mark (BOM). (r. 2826988).
CFXMLTreeCreateXMLData would sometimes put extra spaces in the data when using CFXMLTreeCreateFromData
and/or CFXMLTreeCreateXMLData. This problem was fixed. (r. 2453608).
The XML parser didn't properly handle real numbers +Inf, -Inf and NaN in plists. We now correctly handle such
numbers. (r. 2740510).
Back to top
Core Foundation (general)
Core Foundation is a set of APIs used as a common data and service abstraction layer for other high level software facilities
in Mac OS X.
Files.h is no longer included in CoreFoundation.h or CFURL.h. Now, if you were including CoreFoundation.h and you
used any of the declarations in Files.h, you will need to explicitly #include <Files.h>. (r. 2868727).
There are several changes to CFNumbers handling of NaN and infinities: (a) CFEqual() would return false on two
different NaN CFNumbers as the parameters, but return true with the same NaN CFNumber as both parameters.:
NaNs might be logically equal, but not mathematically equal. To eliminate this inconsistency, we make CFNumbers
with NaNs equal to each other. This change will only affect applications linked on Jaguar or later. (b)Added detail to
the debug description of CFNumbers. We now include more precision; distinguish zero from negative zero; always
include sign on values; and more). This change will affect all applications. (c) Changed the formatting description
produced by CFNumber to: include more precision on doubles and floats; report special values as "nan",
"+infinity", and "-infinity"; remove trailing zeros on the value; and report small values (under 1.0x10^-3) in
scientific notation. This change will only affect applications linked on Jaguar or later. (d) The value of
CFNumberCreate() with float and double values is checked against NaN and the infinities, and the global value is
returned if the value matches. This change will affect all applications. (e) CFNumberCompare() has been corrected
to match the documentation in the header comment regarding NaN, infinities and zeros. This change will only affect
applications linked on Jaguar or later. (r. 2867452).
Using CFPropertyListCreateXML to generate XML from a CFDictionaryRef would cause a crash if any dictionary key
was something other than a CFString. We no longer crash in this situation. (r. 2830305).
Using CFStringFindWithOptions() to check for "Ends With" would sometimes return false positives. We now
return correct data in all cases. (r. 2813801).
In some Carbon applications, a slash ("/") in a path name would crash when loading a nib file. This on longer
occurs. (r. 2787552).
In rare cases where an XML file size was exactly a multiple of a page size, calling
CFPropertyListCreateFromXMLData with that XML file would cause an application to crash. We no longer crash in
this situation. (r. 2765819).
The error messages returned by CFPropertyListCreateFromXMLData have been improved. (r. 2722422).
Removing a CFTree created using CFTreeInsertSibling would inadvertently release more memory than was
necessary, possibly leading to an application crash. We now correctly release memory in this
situation.(r.2747173). (r. 2387606).
CFLog messages are now time stamped. (r. 2956225).
The new Core Foundation data type CFNull has been added for symmetry with the Cocoa NSNull data type. Now NULL
(nonexistant) values can be represented in CFDictionaries. (r. 2828586).
The CFPropertyList parser has been updated to properly treat "&quot;" as a double quote. (r. 2738226).
CFMutableDataRef data pointers are now 16 byte aligned. (r. 2701601).
CFTreeSetContext appeared in the headers but was not implemented. We now implement this call. (r. 2570830). .
Please refer to CoreFoundation release notes
(file:///Developer/Documentation/ReleaseNotes/CoreFoundation.html on your 10.2 system) for a lot more
Back to top
Core OS
The Core OS incorporates essential services that are generally devoid of a user interface. These facilities range from
memory management to process management.
Kernel panic information is now recorded in NVRAM and at the next system startup that information is written to
the /Library/Logs/panic.log. This allows panics to be reported without the inconvenience of having to write down
the information or copy the information from the screen by some other means. (r. 2795225).
Panic Text now displays the HW and IP Addr. (r. 2774419).
The CALL_EXTERN_AGAIN macro grew the stack by 56 bytes, which was not 16 byte aligned. This has been fixed.
(r. 2226272).
Multiple TRUE/FALSE definitions no longer invalidate precompiled headers. (r. 2219860).
All storage support (SCSI) is now being done through the IOSCSIArchitectureModelFamily and relevant pieces. Thus
the IOSCSIDrive.kext and other similar kexts were removed from the system. (r. 2824289).
CGSGetNextEventRecord would at times return a garbage event type. That was the event type values returned by
this API does not match the actual event. This problem was resolved. (r. 2782314).
Back to top
The Common Unix Printing System.
CUPS has been integrated into Mac OS X. (r. 2849589).
Back to top
The Concurrent Versions System.
The CVS command line tool now supports the -R option, which allows you to check out from a read-only repository
(such as a CD-ROM). (r. 2919717).
CVS's unwrap facility now updates the modification time of untar'd files. (r. 2938582).
Back to top
Disk Arbitration
The DiskArbitration Server tracks and provides notification services announcing new disks.
The Disk Arbitration routine DiskArb_EjectKeyPressed has now been deprecated. The framework still exports the
function, but it does nothing. This function is in an Apple-private framework and third party developers should not
be calling it. (r. 2880342).
Supplemented the "disktool" command line tool (which was always intended as a test tool) with a more
user-oriented "diskutil" command line tool. (r. 2817377).
The "disktool" command line utility no longer remounts all partitions on a drive when you request a particular
partition (for example, "disktool -m disk1s12"). (r. 2817376).
Disk Arbitration now wakes up the monitor when the user inserts a disk. (r. 2788175).
The disktool command line utility now quits after mounting volumes with the "-m" option. (r. 2780308).
Disk Arbitration now respects information in "/etc/fstab". See the man page, autodiskmount(8), for details. (r.
Back to top
The Dock provides a convenient graphical interface for launching applications and organizing frequently used items.
A problem where an application's dock tile image was not being set to its original image when the application quit
(after it was set to a custom image by a call to SetApplicationDockTileImage) has been corrected. Now, the image is
restored to its original image as expected. (r. 2738381).
Back to top
File Systems
This section discusses changes and improvements in the file systems installed with Mac OS X 10.2.
Apple's implementation of AFP (AppleTalk Filing Protocol) over TCP server that allows AppleShare clients to connect and
access files.
Improved the security of the password changing mechanism. (r. 2818447).
Previously, if you connected to the server using the admistrator's long name, you would not see the user's home
directory. This has been fixed. (r. 2800012).
Revised the AFP protocol to support more than 16 bits worth of items in a folder. (r. 2757392).
Due to problems displaying UTF-8 messages (such as disconnect messages) on the client, the server now only
sends messages in old-style script encodings. (r. 2971846).
Personal File Sharing now supports the ability to turn off guest access via NetInfo--there is no user interface for
this. (r. 2949059).
Fixed problem where the AFP client was always using the ByteRangeLock call instead of ByteRangeLockExt even on
AFP 3.0 or newer servers. (r. 2936968).
Copying a file from a Mac OS X AFP server to a Mac OS 9.x AFP server while the current time zone is observing
Daylight Saving Time could cause the destination copy to have its modification time set off by one hour. This could
happen if the file being copied had a modification time when DST was not in effect. This problem has now been fixed.
(r. 2892452).
mount_afp no longer requires a password embedded on the command line. Instead, it accepts an afp:// URL and
prompts separately for the password. (r. 2886847).
Fixed a problem where PBGetCatInfo could return the wrong number of files in the root directory of an AFP
volume. (r. 2883190).
The modification time of a file on an AFP server was reported relative to the clock on the client system. This has
been changed to use the time reported on the server. This prevents the modification time from changing simply
because of clock skew between the client and server. (r. 2877917).
Fixed a problem where certain folders could not be copied from a Mac OS 9 AFP server to a client Mac OS X system
with the primary language set to Simplified Chinese. (r. 2872906).
The API function AFPSortSharedVolumes was not being properly exported, causing link errors if that function was
referenced. (r. 2858101).
The AFP client now logs various events to the system log file in addition to providing user notification of the events.
These events are: umount failures, idle disconnects, reconnect attempts, and whether session will show true vs.
mapped permissions. (r. 2848604).
Fixed a problem where FSGetCatalogInfoBulk would return incorrect permissions on mounted AppleShare volumes
while FSGetCatalogInfo and lstat would return the correct values. (r. 2832434).
The AFP server now handles non-ASCII characters in file names better. (r. 2803650).
The AFP server now correctly handles UFS boot volumes with traditional Mac OS clients. (r. 2797781).
Fixed a problem where directory enumeration using FSGetCatalogInfoBulk could return extra non-existent files
when called to enumerate files on an AFP volume. (r. 2795825).
Doing a CatSearch on the AFP server no longer blocks other clients from doing work for long periods of time. (r.
The AFP 3.0 protocol was extended to require a UTF-8 server name in addition to the local encoded server name be
sent in the serverinfo packet. (r. 2675317).
Back to top
AFP Server
Implements an AFP (AppleTalk Filing Protocol) over TCP server that allows AppleShare clients to connect and access files.
The AFP server now handles file EOF better, working around another bug (r. 2905716). The upshot is that you can
now use "vi" to edit files on an AFP volume. (r. 2903677).
In the AFP server, we now correctly recognize certain AFP commands as user activity. This prevents an idle
timeout when copying large files up to the server. (r. 2898895).
The AFP server now handles large (greater than the old AppleTalk maximum of approximately 576 bytes)
command packets. Previously the only large command packets that were handled correctly were writes. (r.
The AFP server now correctly handles the SIGTERM signal sent to the parent (all of its children terminate and then
it terminates) and the SIGHUP signal sent to the child (the child re-reads its preferences). (r. 2885293).
Searching for files by date on the AFP server now works correctly. Previously it would return seemingly random
results. (r. 2878165).
You can no longer share two different share points (AFP volumes) whose names differ only in case. (r. 2870015).
The AFP server now has the ability to deny guest access to a share point, even if the contents of the share point
would otherwise be accessible by guest users. (r. 2865398).
The server now supports the AFP 3.1 protocol extension that allows UNIX-to-UNIX implementations of AFP to not
translate user and group IDs. See the discussion of kNoNetworkUserIDs in the AFP 3.1 protocol specification for
more details. (r. 2848567).
By default the server no longer allows clients logged in as an admin user to access files that are only readable by
root. (r. 2838703).
Previously a bug in the server caused it to disconnect sleeping clients. This has been rectified. (r. 2835079).
Changed the server to allow clients to create symlinks properly. (r. 2827876).
If the AFP server is on and you insert an audio CD, the CD now appears in the server's list of share points. (r.
By default the AFP server now allows the client to reconnect if they were disconnected on idle or server shut down.
(r. 2793339).
The AFP server now behaves better if the user unmounts a volume that is in use by one of its clients. (r.
The AFP server now respects the Max Reply Size field of the FPEnumerateExt request. (r. 2739396).
The AFP server's protocol version string is now "AFP3.1". (r. 2651749).
The AFP server now works as expected when booted from UFS. (r. 2625961).
The AFP server now correctly handles disk quotas on the volumes it is serving. Operations exceeding the disk quota
will be fail with kFPDiskQuotaExceeded (-5047). (r. 2976212).
The AFP server no longer lets you set the EOF of a file if growing the file would exceed the free disk space. (r.
When operating in its default permissions model, the AFP server no longer allows non-root clients to set the
ownership of items to root. (r. 2967478).
The AFP server now implements the DHX2 UAM. (r. 2933358).
The AFP server now correctly handles range locks beyond the EOF. (r. 2922663).
The server now works correctly with paths longer than 128 characters. Previously a sign extension bug made it
impossible to access files buried deep on the server. (r. 2895343).
The owner of a file on an AFP server previously could call chown on a file and change the file's owner without first
gaining root privileges. This is no longer allowed. (r. 2866129).
The AFP server now correctly sets the ownership of resource fork files when it's serving from UFS. Previously
these files were owned by root, which made it impossible for the user to access them when logged into the server
directly. (r. 2820795).
The AFP server now supports Kerberos authentication.(r. 2850300). .
The AFP server now supports byte range locking by calling through to the underlying BSD byte range lock support.
Along with other changes in Mac OS X 10.2, this significantly improves support for exclusive file access. .
Changes to the AFP server to support empty passwords better. (r. 2960930).
Back to top
The Hierarchical File System.
A problem where certain erroneous calls to getattrlist could cause a kernel panic has been corrected. (r.
FSGetCatalogInfo was returning inconsistent results. Some files that were not locked were showing up as locked.
The list of locked files would also vary between runs. This problem was fixed. (r. 2797739).
A problem where PBCatSearch could fail to find some newly created file system items if called immediately after
their creation has been corrected. (r. 2941532).
A problem where dates were not being adjusted correctly for daylight savings time on HFS standard formatted
volumes has been corrected. (r. 2884313).
Previously if any space is allocated to a file on an HFS/HFS+ volume but no data is written to the newly allocated
space, this space is not reclaimed as it ordinarily would be at the time of the close() call. This problem was fixed
and now there is no space leakage if a file is allocated and then closed without adding any data. (r. 2760998).
Back to top
Volume format used by MS-DOS and Microsoft Windows.
Fixed a bug where ejecting a MS-DOS volume without unmounting it first could hang the system. (r. 2894402).
Corrected problems preventing Mac OS X from recognizing some FAT32 FireWire hard drives. (r. 2893955).
A problem where fsck_msdos did not properly handle devices with sector sizes greater than 512 bytes has been
corrected. (r. 2883078).
Fixed a problem with certain invalid long names on MS-DOS disks. The problem happened when long names were a
multiple of 13 characters and contained an extra (invalid) entry with only a NULL terminator and padding. (r.
A problem where FSpMakeFSRef() would fail for some Japanese file names on MS-DOS formatted volumes has been
corrected. (r. 2765643).
A problem where FSCreateFileUnicode() could fail when asked to create a file with a nine character file name on a
MS-DOS formatted volume has been corrected. (r. 2754174).
Problems preventing FSpSetFLock from working as expected on MS-DOS formatted volumes have been corrected. In
the past, FSpSetFLock would return noErr without actually locking the file. (r. 2759105).
Back to top
Network Filesystem, originally developed by Sun Microsystems, used in UNIX environments for sharing volumes over
TCP/IP networks.
A number of performance and stability enhancements have been incorporated into the implementation of NFS
provided with Mac OS X 10.2 (r. 2465832) (r. 2827760).
Problems preventing the use of mmap() for memory mapped files over NFS have been corrected. (r. 2472566).
Back to top
Server Message Block, Microsoft's file sharing protocol for Windows.
Socket read size was reduced from the full packet size to improve performance with remote clients (such as
Windows, Linux and BSD). (r. 2917352).
SMB now ignores windows shares ending in a dollar sign (e.g. c$) as these are administrative shares not intended
for ordinary use. This is also windows client behavior for non-administrators. (r. 2899088).
Problems that could occur when reading more than 128K at a time from a file on a SMB share have been corrected.
(r. 2797032).
A problem where the NSL browser could fail with SMB servers having names with no corresponding DNS host name
has been corrected. (r. 2787668).
SMB browsing is only supported on the local subnet. .
Back to top
UDF is a file system plug-in that allows access to Universal Disk Format volumes. This format is used for consumer DVD
media and can also be used as a multi-platform disk format.
Corrected a problem with UDF's conversion of on-disk ISO Latin-1 names to Unicode. The symptom was that a file
with ISO Latin-1 characters in its name would not show up properly (or at all). (r. 2835582).
UDF now supports read/write access to UDF formatted DVD-RAM disks (r. 2477531).
The UDF file system is now capable of handling files larger than 2 GB. (r. 2944397).
UDF not returns the VOL_CAP_FMT_PERSISTENTOBJECTIDS flag from getattrlist appropriately, depending on the
UDF volume format. UDF formats prior to 2.0 didn't support persistent object IDs. This problem was causing
aliases to UDF volumes to not work correctly. (r. 2762832).
Back to top
The Unix File System.
A problem where the disk cache for UFS volumes was not being flushed before shutdown or restart has been
corrected. (r. 2908945).
Back to top
WebDAV stands for "Web-based Distributed Authoring and Versioning". It is a set of extensions to the HTTP protocol which
allows users to collaboratively edit and manage files on remote web servers.
Problems using WebDAV FS to mount a volume on a port other than the default http port (port = 80) have been
corrected. (r. 2777825). .
Problems with DNS lookups via Airport have been corrected (r. 2780350). .
Interoperability with non-iDisk WebDAV servers has been improved. HTTP header lines up to 4096 characters
(1024 characters in 10.1.5) are now accepted (rr. 2788583, 2944883). Chunked Transfer Coding is now
handled correctly in all known cases (r. 2868057, 2872308). Digest challenges with zero-length domain
directives are now accepted (r. 2804676). Connection headers with the close token are now handled (2921033).
DAV headers with extend text are now correctly parsed (r. 2891691). All Informational 1xx HTTP status codes
are now handled (r. 2951626). .
Performance has been improved. WebDAV FS sends fewer requests to the server (r. 2858454, 2919924).
Latency of the first read or write after opening a file has been reduced (r. 2864082, 2879261). WebDAV FS's use
of sockets has been optimized (r. 2929972, 2919564). WebDAV FS now asks the server for only the properties it
needs which reduces the amount of data the server has to return (r. 2937458). WebDAV FS uses the buffer cache
more effeciently (r. 2895257, 2853856). The use of temporary files for most requests has been eliminated (r.
2944883). .
Memory leaks have been eliminated and crashing bugs have been fixed (rr. 2874995, 2879528, 2806688,
2958029, 2963540, 2771229, 2989544, 3000493, 3002584). .
WebDAV FS's version is now included in its User-Agent request-header field so servers can identify specific
versions of WebDAV FS (rr. 2797472, 2891668, 2881656). .
The directory link count of directories on WebDAV volumes is now set to 1 indicating that WebDAV FS does not
support link counts. This allows the find command (and other FTS(3) based software) to work on WebDAV volumes
(r. 2546611). .
Access to URLs longer than 255 characters, and up to 1024 characters beyond the mount URL, are now supported
(r. 2755598). .
The same URL cannot be used to mount multiple copies of a WebDAV volume (r. 2884337). .
The WebDAV authentication dialog now shows both the URL and the realm string making it easier for the user to
know why they are being asked for authentication information (r. 2788480). .
WebDAV FS now warns the user if a server asking for authentication only supports the non-secure Basic
authentication scheme (r. 2904390). .
When a WebDAV server cannot be reached, the timeout before an error is returned has been reduced from up to 10
minutes to 2 minutes maximum (r. 2517387). .
The source code for the webdavfs project has been cleaned up. All warnings from gcc3 and kextload validation
failures have been eliminated (r. 2911492, 2917367, 2796114, 2919408). .
Back to top
Routines for drawing and displaying graphical information on the screen are discussed in this section.
ATS (Apple Type Services)
ATS provides APIs that make it possible for Mac OS applications to manage and access fonts, and draw glyphs to the screen.
The new routine GetFSRefForFileToken can be used to retrieve a FSRef from a fileToken. (r. 2894186).
Fixed a problem that could cause FontMetrics to crash when used with some older Mac OS 9 suitcase fonts. (r.
A problem where the Kotoeri character palette could not represent Gaiji characters (SJIS: over 0xF040, Unicode:
over u+E000) has been corrected. (r. 2831210).
True Type font files with the extension '.ttf' are now recognized in Mac OS X. (r. 2823850).
Problems where the routines ATSGlyphGetIdealMetrics and ATSGlyphGetScreenMetrics would return incorrect
error codes have been corrected. (r. 2791182).
Already created instances of Multiple Master fonts are now supported. The creation of new instances is not
supported and requires the use of products from Adobe under Classic.(r. 2618745) (r. 2739365).
Fixed a crash when the invalid value NULL was passed as the text encoding parameter to
FMGetFontFamilyTextEncoding. (r. 2677209).
Added hooks for 3rd party font activation. See "Font query message hooks" in ATSFont.h for more information. (r.
Calling ATSFontFamilyGetName with the name parameter set to NULL now returns paramErr instead of crashing.
(r. 2621484).
ATSFontGetFileSpecification now returns paramErr if the oFile parameter is NULL. (r. 2610513).
System-critical fonts can no longer be deactivated by non-system Font Manager clients. (r. 2599690).
Finding all the fonts within a particular domain (using FMCreateFontFamilyIterator or FMCreateFontIterator,
e.g.) would fail if fonts were in nested directories. We now properly iterate though all subdirectories by default.
(r. 2897297).
In some instances, the directory returned from FMGetFontTableDirectory was an incorrect font table for LWFN
fonts. We now indicate there are no entries in the directory in these cases. (r. 2848718).
Creating or using an OTF(CID) format font which contains more than 32676 glyphs would sometimes crash an
application. We now allow over 32676 glyphs. (r. 2821918).
In rare cases, ATSFontFindFromName() returns no matches, even when using the CFStringRef returned by
ATSFontGetName(). We now correctly return all fonts. (r. 2764305).
Back to top
ATSUI (Apple Type Services for Unicode Imaging)
ATSUI is core technology for Unicode text drawing and editing on OS X. It is fully multilingual and provides basic services as
well as high-end typographical control. It can be used with Quartz or Quickdraw based applications.
kATSLineDisableAllBidirectionalReordering has been removed and kATSLineDisableAllCharacterMorphing has been
renamed to kATSLineDisableAllGlyphMorphing. (r. 2925657).
The original API ATSUMeasureText will still function fine though each process that calls it will get a single syslog
stating that it is deprecated and that they should use ATSUGetUnjustifiedBounds instead. (r. 2918417).
ATSUI will now display the specified glyph when kATSUGlyphInfoTag attribute exists and if the font is not
consistent with the glyph attribute, it will ignore the glyph attribute. (r. 2883308).
Developers now have direct access to the ATSUI glyph rec array and are able to manage the steps of line layout
directly, altering bidi, glyph metamorphosis, and justification as needed. (r. 2853741).
Multi-run ATSUTextLayout objects now transfer styles into the ATSUGlyphInfoArray correctly. (r. 2850959).
A new API ATSUHighlightInactiveText is now available. This API allows callers to have better control over the
appearance of selected text as it is drawn when the window containing the text is inactive. (r. 2842617).
ATSUStyles can now have their ascent and descent values changed using the kATSUAscentTag, kATSUDescentTag, and
additionally the leading can also be set using the kATSULeadingTag. (r. 2804497).
ATSUI now has layout control facilities to override user anti-aliasing preference. To control the anti-aliasing for
an entire layout or line you can use one of the Layout options: kATSLineApplyAntiAliasing or
kATSLineNoAntiAliasing. (r. 2754392).
The style's leading is now retrieved from the ATSUStyle using the ATSUGetAttribute with the kATSULeadingTag. If
the ATSUI client did not set the leading (which can now be specified using this tag), the ATSUGetAttribute will
return kATSUNotSetErr and the font's leading value. (r. 2621797).
Added support for RGB-Alpha using the CGColorSpaceRef in ATSUStyle records. (r. 2951269).
A problem where ATSUClearLayoutControls was not returning the error code kATSUInvalidAttributeTagErr in cases
where it should have has been corrected. (r. 2927064).
The new kATSLineUseDeviceMetrics option has been added to allow layout and line breaking in device space. (r.
The kATSUFontMatrixTag style transform matrix is now implemented. (r. 2911269).
Back to top
ColorSync provides system-level color management that enables publishing software to achieve repeatable and consistent
color on-screen, in print, and for electronic delivery.
When update a procedure based profile, the procedure profile proc is called with the cmWriteAccess selector a
number of times to write out the data from the profile. If the function that handles the cmWriteAccess (or
cmWriteSpool) command cannot write out all the bytes requested, then the procedure profile proc is called again
with the cmWriteAccess (or cmWriteSpool) selector to write out the remaining bytes. There was a problem in the
update code where the calls to write additional bytes after the first call would always be passed the address of the
beginning of the buffer rather than the beginning of the bytes needing to be written. This problem has been
corrected.(r. 2892979) (r. 2928633).
The NCMUnflattenProfile call will now unflatten the data into a profile correctly if the number of bytes that are
sent back by the call back proc are less than the number of bytes requested by the call back proc. (r. 2910239).
Fixed bug where calling CMSetProfileElement to set tags that are obtained from an existing profile into a newly
created profile would result in error -50 for certain tags from certain profiles. (r. 2906498).
NCWNewLinkProfile no longer returns error -50 when used with big (>100kb) profiles. (r. 2897811).
Fixed bug where no error is returned for attempts to register a profile for a device at a scope outside the user's
domain. (r. 2890764).
Fixed a bug where callback proc of CMIterateColorDevices was not being called for registered devices of different
scopes. (r. 2858107).
Fixed bug where a display device would not be returned by CMIterateColorDevices unless it was registered with the
scope of kCFPreferencesAnyUser, kCFPreferencesCurrentHost. Now CMIterateColorDevices will return display
devices registered with the scope of kCFPreferencesCurrentUser, kCFPreferencesCurrentHost. (r. 2858100).
A problem where CMIterateColorDevices would always return the last device has been corrected. Now,
CMIterateColorDevices will return the correct device if more than one device is registered. (r. 2858094).
Fixed bug where CMSetDeviceProfiles returns a paremeter error (paramErr = -50) for a device registered with
the scope of kCFPreferencesCurrentUser or kCFPreferencesCurrentHost that has two registered factory profiles.
(r. 2858093).
Fixed NCMUnflattenProfile so that it will no longer return error code -4205 when asked to unflatten a profile to a
file based profile. (r. 2858082).
A problem where the count field of the CMDeviceProfileArray was not being reset to zero by calls to
CMGetDeviceFactoryProfiles for devices containing no profiles has been corrected. (r. 2858075).
Notifications of type kCMDeviceRegisteredNotification now occur when calls to CMRegisterColorDevice are made to
register a new device. (r. 2858059).
A problem in CMUpdateProfile where it could return the error code -17w when asked to update a procedure based
profile has been corrected. (r. 2857996).
Fixed a bug in CMCopyProfile where it could return the error -48 when asked to copy a path based profile to a
network volume. (r. 2857909).
A problem where attempting to create a new profile on a network volume could fail and return the result code -48
has been corrected. (r. 2857277).
A problem where under some circumstances calling CMCopyProfile to copy a profile from one file to another could
result in an invalid profile has been corrected. (r. 2855010).
CMUpdateProfile no longer returns error -4205 when asked to update a buffer based profile. (r. 2854781).
A problem where CMIterateColorDevices would return the error code -4227 when a NULL callback procedure
pointer was provided has been corrected. (r. 2854778).
Calls to CMSetDeviceDefaultProfileID specifying the id of a profile that is not registered will now return a
parameter error (paramErr = -50). (r. 2838339).
Fixed a crash that could occur when matching colors to a bitmap or matching colors to a Lab profile. (r.
Correct dictionary of names now passed in to callback of CMIterateDeviceProfiles. (r. 2768385).
The dictionary of names passed in to the profileNames field of the CMDeviceProfileInfo parameter of the
CMIterateDeviceProfiles callback proc are no longer set to NULL when calling the CMIterateDeviceProfiles call
with flags set to cmIterateCustomDeviceProfiles. (r. 2768351).
The routine CMIterateDeviceProfiles was leaking at least 64 bytes of memory each time it is called. This memory
leak has been removed. (r. 2759292).
If a device class has multiple devices registered for it, and the default device is unregistered, a new default device
is now correctly set. (r. 2751923).
In the past, if a device class has devices registered for it with scope of kCFPreferencesCurrentUser,
kCFPreferencesAnyHost, or kCFPreferencesAnyUser, kCFPreferencesCurrentHost, but does not have devices
registered for it with the scope of kCFPreferencesCurrentUser, kCFPreferencesCurrentHost, then no defacto
default device would be set for it. Now, the defacto default device will be set for a class if class has no devices set as
such. (r. 2747577).
CMIterateDeviceProfiles no longer crashes when called with the proc parameter set to NULL. (r. 2743114).
Fixed CMGetDeviceFactoryProfiles to return the newly updated default profile id in the defaultProfID parameter.
(r. 2743028).
Fixed CMSetDeviceFactoryProfiles to return an error if you pass in illegal values in the dataVersion field and the
reserved fields of CMDeviceProfileInfo. (r. 2699519).
Error is now returned from CMSetDeviceProfiles if either the data version or the reserved fields contain illegal
values. (r. 2966779).
Fixed problem where switching between the different ColorSync Profiles wouldn't take effect for certain displays.
(r. 2859752).
Added new device notification kCMPrefsChangeDeviceNotification for changes in ColorSync Prefs panel. (r.
A problem where the resulting image would be drawn incorrectly when CMMatchImage was used with very wide
JPEG files (over 4100 pixels wide) has been corrected. (r. 2838201).
Fixed crash in CMIterateColorSyncFolder for profiles with Unicode text tag of 'mluc' but not having a language field
of 'en'. (r. 2836866).
A memory leak in CMGetDefaultDevice has been corrected. (r. 2802812).
It is now possible to proof with a named color space profile in the middle of the proof sequence. (r. 2744111).
A number of memory leaks have been corrected. (r. 2935758).
Back to top
The Image Capture architecture provides a common API for discovering digital imaging devices and transferring images
from them.
The TWAIN consortium's libraries have been added to the system in the form of a framework and may be accessed
from applications. (r. 2849393).
Back to top
OpenGL / OpenGL Carbon / AGL
OpenGL is a vendor-neutral, multi-platform graphics standard with broad industry support. OpenGL APIs allow you to
develop portable, interactive 2D and 3D graphics applications.
A problem where aglDescribePixelFormat could return incorrect results has been corrected. (r. 2879045).
A problem where glutHideWindow() was not working correctly in Mac OS X 10.1 has been corrected. (r.
GLUT implementation is now compliant with the GLUT 3 specification. (r. 2781483).
A problem where the Mac OS X implementation of aglGetInteger() was returning incorrect values when called with
the AGL_BUFFER_RECT parameter has been corrected. (r. 2765920).
A crashing bug in the routine glutDestroyWindow() has been corrected. (r. 2765003).
OpenGL multi-texture coordinate clipping now works as expected when texture unit zero is disabled. (r.
A problem where calling aglGetCurrentContext() before any GL contexts have been created would crash (rather
than returning NULL) has been corrected. (r. 2876559).
A problem that surfaced in Mac OS X 10.1.3 where glDrawElements could fail if the indices provided where not
aligned on a word boundary. This problem has been corrected in Mac OS X 10.2. (r. 2869834).
Both the vertex array object and vertex array range extensions are now supported in Mac OS X 10.2. (r.
Dependent texturing is supported in Mac OS X 10.2 through the use of Shader Builder. (r. 2808977).
GL_TEXTURE_BASE_LEVEL cosmetic issue Changing the texture base level from 0 will now work correctly on
NVIDIA hardware .
Back to top
This section discusses new features, bug fixes, and new APIs in the Mac OS X 10.2 printing services.
Two new constants (kSyncTicketFromPane and kSyncPaneFromTicket) have been added to the Printing dialog
extension API constants to this API for interpreting the Sync function's Boolean parameter. These constants are
defined in the file PMPrintingDialogExtensions.h. (r. 2891441).
makequeues now supports custom IOMs.
Automatic creation of USB printer queues is supported for a broader range of printers. - Olav Andrade (r.
A new API, PMPrinterGetState, that allows callers to check the state of a printer queue has been added. (r.
New API, PMSessionEnablePrinterPresets, has been added that allows callers to enable printing presets in the
Print dialog. (r. 2849635).
Problems where PICTs containing fractionally rotated text or graphics did not print as expected have been
corrected. (r. 2843826).
PMPrinterGetResolution now returns min/max range independent of the current printer module settings. (r.
All printing routines that return data will now return NULL if there is an error. (r. 2843168).
Problems with printing some PICTs with embeded ColorSync source profiles have been corrected. (r. 2839776).
A new API was added, PMPrinterGetMakeAndModelName, that allows callers to retrieve information about the
make, model and name of a printer. (r. 2811370).
A new attribute has been added, kUSBIOMSetAltInterface, that allows Printer Modules to select an alternate USB
interface. (r. 2811344).
In the past, Termiate routines in PDEs were not being called if the Initialize routine failed. Now, Terminate
routines will be called even if the Initialize routine fails. (r. 2797592).
PMRelease now correctly handles code that incorrectly tries to release objects obtained via "get" calls like
PMContextGetCurrentPrinter. (r. 2793493).
New APIs to get a ticket and template from a session have been added. These APIs are
PMSessionGetTicketFromSession and PMSessionGetTemplateFromSession. (r. 2788795).
A new API has been added, PMPrinterIsPostScriptCapable, that callers can use to determine if a given printer is a
PostScript printer. (r. 2776545).
Improved handling of NSPrintInfo attributes. A number of new NSPrintInfo attributes are now supported including
NSPrintPagesPerSheet, NSPrintReversePageOrder, NSPrintJobDisposition, NSPrintSavePath, and others (r.
2574589). (r. 2773511).
New APIs have been added to NSPrinter.h and NSPrintInfo.h that allow callers to determine the imageable area of
printed pages. (r. 2766258).
Normally, when a PDE returns kPMDontSwitchPDEError from its Sync function, switching panels, Preview, and
Print should be disabled, but, under in some cases the kPMDontSwitchPDEError result code was being ignored.
These problems have been corrected. (r. 2764767).
A problem where PMSessionSetDestination was returning kPMGeneralError rather than using the default format
when the destFormat parameter was set to NULL has been corrected. (r. 2741954).
New Carbon APIs have been added that allow callers to have greater control the page Collation and the ability to set
the Collated state for print jobs. (r. 2715677).
PDEs can now send a Carbon Event to their window to change size after their Prologue has completed. (r.
Embedded PMPageFormat and PMPrintSettings objects are now properly encoded into NSPrintInfo objects. (r.
-[NSPrinter printerNames] now returns the list of available printers (added via Print Center) instead of the list
of possible NetInfo printers as in 10.1. (r. 2960293).
A number of new PMPrinter APIs that allow for some printing administrative functionality have been added to
PMPrinter.h. (r. 2932965).
The Print dialog no longer changes printers if a PDE returns an error due to invalid page ranges, etc. (r.
Fixed a memory leak in NSPrintPanel's setAccessoryView. (r. 2893943).
Print Center now sends correctly formed SendData requests while auto configuring printers via PAP. (r.
A new API, PMPrinterGetDeviceURI, has been added that allows callers to find out a printer's network address. (r.
Improved handling of PostScript query responses that contain DOS line endings. (r. 2786812).
Added support for user-specified custom paper sizes. (r. 2713854).
Mac OS X 10.2 ships with a USB Printer Class driver. (r. 2431394).
A problem where PostScript printing of PDFs using Separation or DeviceN color spaces could fail over a seven bit
communications channel has been corrected. (r. 2825012).
Corrected a problem that could cause a crash when printing images whose color elements are stored in planar (not
in mesh) style. (r. 2853653).
Back to top
Quartz 2D
Quartz 2D is a feature-rich, two-dimensional drawing engine that is accessible from all Mac OS X application
environments outside of the kernel. The Quartz 2D application programming interface (API) is easy to use and gives you
access to powerful features such as Bezier curves, path-based drawing, transparency, and advanced color management.
New server side gamma fade APIs are now exported from CoreGraphics/CGDisplayFade.h. (r. 2882664).
The PNG Data Provider is now available for application's use through the API :
CGImageCreateWithPNGDataProvider in CoreGraphics/CGImage.h (r. 2882655).
New APIs have been introduced for Axial and Radial gradients. The new APIs are contained in
CoreGraphics/CGShading.h (r. 2882637).
A new API, CGContextSetPatternPhase, has been added that allows callers adjust the alignment a pattern when it is
drawn. (r. 2846854).
Fixed bug where QDPictDrawToCGContext draws nothing in millions of color mode. (r. 2837169).
Cmd-Brightness and mirroring reconfiguration trigger should do nothing if a full screen app is running
<BR><BR>Put support in IOGraphics so CG can tell the kernel side the display is captured so that Cmd-Brightness
and mirroring reconfiguration trigger does nothing if a full screen app is running. - Steve Martin (r. 2830991).
WindowServer crashed randomly. Fixed a corrupted region object to address a bug where WindowServer crashes
due to a memory smasher. (r. 2829598).
A problem where CGPostKeyboardEvent for caps lock key could alter the reported state of the shift key has been
corrected. (r. 2742243).
Problems with rendering images taller than 32767 pixels or wider than 32767 pixels have been corrected. (r.
A problem where rotated patterns were not being drawn as expected has been corrected. (r. 2976284).
Added a convenience API, CGColorSpaceCreateWithName, that allows callers to retrieve ColorSync information
directly from CoreGraphics. (r. 2953354).
It is now possible to switch out the active application when the menu bar is hidden. (r. 2950690).
A new API was added to CoreGraphics/CGContext.h, CGContextSetShouldSmoothFonts, that allows callers to disable
text anti-aliasing. (r. 2940365).
Problems rendering some CGImageRefs with custom decode arrays have been corrected. (r. 2936294).
CFDictionarys returned by CGDisplayAvailableModes now include the number of bytes per scan line that can be
accessed using the kCGDisplayBytesPerRow key value. (r. 2893175).
Quartz 2D now respects embedded vector clip paths found in jpeg files when it is rendering them. (r. 2879701).
A memory leak of about 46 bytes that could occur when releasing a CGBitmapContext has been corrected. (r.
Problems with displaying PDF files with Device CMYK colors or images have been corrected. (r. 2837498).
Problems causing CGRectDivide to produce erroneous results have been corrected. (r. 2791321).
CGPostKeyboardEvent fixed to work for help key (key code 0x72). (r. 2784337).
A problem where CGContextStrokePath could hang when adding a zero length stroke has been corrected. (r.
Cases where calling CGPostKeyboardEvent from Cocoa applications would fail with certain key codes have been
corrected. (r. 2689300).
Problems where the CGRemoteAccess event APIs were not preventing display sleep have been corrected. (r.
Back to top
QuickDraw is a part of the Mac OS used for drawing and displaying graphical information on the screen and other raster
Fixed problem where calling DrawPicture to draw a picture to a GWorld could result in some parts of the image
being clipped incorrectly for some bit depth combinations. (r. 2896796).
Routines have been added to QuickDraw.h that allow callers to temporarily disable region and polygon recording.
(r. 2873386).
A problem where calls to FrameRoundedRect with invalid or empty rectangles could result in drawing operations
has been corrected. (r. 2868895).
A problem where the default picture data recording routine could attempt to access a NULL pointer has been
corrected. (r. 2868114).
A number of new Local/Global coordinate transformation routines have been added. These include
QDLocalToGlobalPoint, QDGlobalToLocalPoint, QDLocalToGlobalRect, QDGlobalToLocalRect, QDLocalToGlobalRegion,
and QDGlobalToLocalRegion. (r. 2835945).
A problem when FillCRect would not draw anything when drawing misaligned 32 bit patterns has been corrected.
(r. 2833800).
A problem where some poorly formatted pictures could hang the picture parsing code has been corrected. (r.
A problem that occurred Mac OS X 10.0 and Mac OS X 10.1 in where calls to NewGDevice could switch the current
GDevice has been corrected. Now, calls to NewGDevice no longer switch the current GDevice. (r. 2814795).
The new APIs, QDSwapTextFlags and QDSwapPortTextFlags, have been added to QuickDraw.h that allow callers to
ask QuickDraw to use Quartz 2D for drawing anti-aliasing text. (r. 2810408).
Problems in PaintPoly that could cause it to draw incorrectly when drawing some self-crossing polygons have been
corrected. (r. 2807382).
To simplify debugging, attempts to call QuickDraw to do any drawing between calls to QDBeginCGContext and
QDEndCGContext are now logged to the console as "Ignoring QuickDraw drawing between QDBeginCGContext and
QDEndCGContext". (r. 2802466).
A problem that occurred in Mac OS X 10.1 where calls to CopyBits could write beyond the end of the destination
PixMap's raster array (and cause heap corruption) when the destination's rowBytes value was not an even
multiple of 4 has been corrected. (r. 2792873).
Some new Cursor APIs have been added to QuickDraw.h that allow callers to specify larger cursors. These APIs
includeQDIsNamedPixMapCursorRegistered, QDRegisterNamedPixMapCursor, QDUnregisterNamedPixMapCursor,
QDSetNamedPixMapCursor, and QDSetCursorScale. (r. 2786270).
A problem where calls to CopyBits using the transparent copy mode could result in a black vertical line on the edge
of the destination rectangle have been corrected. (r. 2780384).
A problem where DrawPicture could read past the end past the end of the picture data in memory when drawing
large pictures has been corrected. (r. 2735743).
Fixed CopyDeepMask now works as expected when the mask is 2, 4, or 8 bits deep. (r. 2557268).
CreateNewPort can now be called from a daemon process. (r. 2519829).
Error checking for Region size overflow during UnionRgn, SectRgn, or DiffRgn calculations has been improved.
Now, when an overflow is detected, QDerror will return a non zero result code and the resulting region will be set
to an empty region. (r. 2377836).
A memory leak in SetPortPenPixPat has been corrected. (r. 2975566).
A problem where InitGDevice was not always setting the gdType field in GDHandles reliably has been corrected.
This problem was present in all versions of InitGDevice until now. (r. 2964709).
Some drawing problems with CopyDeepMask have been corrected (r. 2867617). As well, a problem where
CopyDeepMask could crash if the maskRect was different than either the src or dst rectangle has been corrected.
(r. 2908766).
Previously, calls to CopyBits with a 1, 2, or 4 bit source and a 32 bit destination would only set the alpha channel
to 255 if the destination was a window buffer. Now, the alpha channel will be set to 255 when the destination is an
off-screen GWorld as well. (r. 2852806).
A problem where calls made to SetCPixel during printing could crash has been corrected. (r. 2840205).
A problem where calls to GetPictInfo() could call the get picture data QDProc with a zero byte count has been
corrected. (r. 2840062).
A problem that appeared in Mac OS X 10.1.2 where GetPictInfo could hang when called with a JPEG compressed
picture has been corrected. (r. 2833865).
A problem where calls to HasDepth for the main device were returning false for all bit depths after the main
device's depth was switched to 8-bit has been corrected. (r. 2799168).
A number of problems in the drawing produced by calls to CopyMask have been corrected. These included clipping
issues (r. 2779309), mask width calculations (r. 2585796), the appearance of diagonal lines (r. 2637002) (r.
Large cursor support, for cursors up to 64 by 64 pixels, has been added to the QuickDraw APIs. (r. 2827587).
Back to top
QuickDraw Text
QuickDraw Text is the part of the Mac OS used for drawing and displaying textual information on the screen and other
raster devices.
A new API, QDSwapPortTextFlags, has been added that allows callers to set the QD text drawing flags on a per-port
basis. (r. 2888518).
Improved QuickDraw rendering of Japanese anti-aliased text. (r. 2489470).
Back to top
This section discusses changes and new features for device driver writers provided in Mac OS X 10.2.
The Apple's support for connected ATA devices.
Large ATA hard drives (over 137 GB - 48-bit LBA addressing) are now supported on systems with large ATA drive
support in the boot ROM. All changes are documented in the relevant header files in IOATAFamily. .
Back to top
Apple's ethernet software provides low level networking connectivity by controlling Apple ethernet hardware supplied by
Apple with Apple hardware.
Implemented support to force the UniNEnet driver to disable auto-negotiation mode and to force a specific media
type and speed with the ifconfig tool. For example, the following terminal commands can be used: % ifconfig en0
media 10baseT/TP % ifconfig en0 mediaopt half-duplex (r. 2798973).
The media and mediaopt settings are only supported on computers with gmac+ Ethernet chipsets.
Cases where some third party ethernet adapters were sometimes mistaken for the primary ethernet interface on
certain machines in 10.1.x have been corrected. (r. 2764618).
Back to top
Apple's support for the IEEE 1394 High Performance Serial Bus standard.
A new API, RemoveIsochCallbackDispatcherFromRunLoop, has been added that allows callers to remove any
IsochRunLoopSources they have installed using AddIsochCallbackDispatchToRunLoop. (r. 2795841).
The routines AddCallbackDispatcherToRunLoop and AddIsochCallbackDispatcherToRunLoop have been updated to
allow callers to specify valid runloop modes for the callback routines they are being used to install. (r.
The IOKit FireWire headers have been updated so they can be used with standard C. (r. 2737041).
Fixed a problem with isoch reception on PCI-Lynx machines (i.e. B&W G3, original G4). (r. 2851043).
The timout period for AVC devices to respond after a bus reset has been increased to accommodate slower devices.
(r. 2842540).
Add support in FireWire DV for DVCPRO CIP headers. (r. 2709090).
Improved compatibility with a number of third party FireWire cards. (r. 2923203).
Back to top
HID Support
The Human Interface Device (HID) class is one of several device classes described by the USB (Universal Serial Bus)
architecture. The HID class consists primarily of devices humans use to control a computer system's operations.
A problem where getElementValue() would not query a device (if the value being requested had not been included in
a previous input report provided by the device) has been corrected. (r. 2883840).
The HID Manager now publishes unit and unit exponent properties for each hid element. (r. 2883290).
Added support for scroll wheel acceleration. (r. 2880436).
The HID Manager now supports Mouse devices. (r. 2770086).
The HID manager now supports Keyboard devices. .
The HID manager now supports non-USB mouse and keyboard devices. (r. 2861323).
A new method, IOHIDDevice::updateElementValue, has been added to ensure values return for feature element
inquiries are up to date. It is called when ever a user client attempts to access a value for a feature element. The
new method calls to IOHIDDevice::getReport to poll the device for the report values. Then it calls
IOHIDDevice::handleReport with the descriptor that was filled in with getReport. (r. 2731494).
A problem where IOMatchingDictionaries ware returning all HID devices rather than just matching ones has been
corrected. Now only matching devices are returned. (r. 2690962).
Added horizontal scroll wheel support. (r. 2660532).
Back to top
Apple's object-oriented I/O development model. The I/O Kit provides a framework for simplified driver development,
supporting many families of devices.
A memory leak in IOCreatePlugInInterfaceForService where one or more CFArrays were not being released has
been corrected (r. 2927887).
Fixed the IODataQueueDequeue call so that the dataSize parameter is updated properly, even when the data pointer
is null. (r. 2926620).
Both IOGeneralMemoryDescriptor and IOSubMemoryDescriptor now have a serialize method so they can display
themselves in ioreg output. (r. 2916500).
The ioreg tool now has an option for printing numbers in hex. (r. 2916477).
IOPCIBridge now conforms to the PCI spec which says that an I/O memory range read from the PCI config register
may have their 16 upper bits set to 0, in which case they should be ignored. Previously IOPCIBridge assumed that
all 32 bits of an I/O range were valid. (r. 2909765).
Memory descriptor redirect (protected from access during sleep) now works for non-block-mapped mappings (<
32K). (r. 2893715).
Fixed problem where IOSharedInterruptController could become permanently disabled on MP systems. (r.
Fixed a problem with IODataQueue where an entry that just fit at the end of the queue memory buffer would instead
be added at the start of the buffer. This would cause the user client code to return the wrong entry. (r. 2860701).
The routine IOSleep() is now uninterruptible. (r. 2857482).
The ioreg and IORegistryExplorer tools fixed a problem that didn't show @location for objects that are part of an
alias on the device tree plane. With the addition of IORegistryEntryGetLocationInPlane() API call, the tools now
work correctly. (r. 2856361).
Added the ability to describe a parent object in a matching dictionary. (r. 2845592).
Fixed a problem with interruptible IOCommandGate::commandSleep() that could corrupt the driver's work loop.
(r. 2789143).
A mechanism was added to track the number of OSContainers an object is in. If the retain count goes less than the
container count the system will panic. This is to track cases where drivers are releasing too many object
references thus corrupting the I/O Registry. (r. 2781013).
Changed IOMemoryDescriptor::getSourceSegment() to no longer ignore errors from
IOMemoryDescriptor::prepare(). This avoids the rare case where callers would assume that the memory was
prepared when it actually wasn't. (r. 2757553).
Added new API IOBufferMemoryDescriptor::inTaskWithOptions.This method allocates a memory buffer with a given
size and alignment in the task's address space specified, and returns a memory descriptor instance representing
the memory. Pageability and sharing are specified with option bits. This API is useful for graphics accelerators
drivers, for example. (r. 2950553).
The constant kIOMasterPortDefault may now be passed in IOKit APIs. When the kIOMasterPortDefault constant is
used, the IOKit APIs will look up the default master port on behalf of the caller. (r. 2920131).
A new API, IOServiceGetMatchingService, has been added that allows callers to create simpler code for locating
services they require. This new call is a combination of IOServiceGetMatchingServices() and IOIteratorNext() that
saves callers from having to create iterator and retrieve the first object from it when it is known that there is
only one match. (r. 2920026).
Back to top
Mass Storage
Drivers for storage devices such as hard disks and CD-RW drives.
Fixed a problem that occurs when editing content on a disk node that (a) has content that some content driver
wishes to probe, and (b) whose driver is not loaded at the time it is needed to probe. (r. 2913406).
Fixed a bug that caused premature closure of the IOBlockStrorage driver before all of its the completion routines
had finished executing. (r. 2886160).
Added support in Storage Family to accommodate incrementally recordable file systems. For instance, udf on CD-R.
(r. 2885228).
IOBlockStorageDevice now supports 64-bit block numbers. (r. 2826537).
The new IOMedia object property kIOMediaRemovableKey and IOBlockStorageDevice object property
kIOPropertyProtocolCharacteristicsKey { kIOPropertyPhysicalInterconnectLocationKey } are now available in
IOMedia.h, IOStorageDeviceCharacteristics.h. These properties are used to describe objects as either "removable"
and "detachable". (r. 2751422).
The property IOMediaIcon was added to IOMedia objects to support custom media icons. As well the new
KextManagerCreateURLForBundleIdentifier() client function has been added for getting path to a loaded bundle so a
program can get at the bundle and its info dictionary. (r. 2566007).
Back to top
Power Manager
The Power Manager is the part of the Mac OS that controls power to the internal hardware devices of Macintosh PowerBook
Uninterruptible power supplies are now supported. A basic driver now exists for UPSes conforming to the USB
Power Class specification. The default behavior is for the system to be shut down via /sbin/halt when the UPS
battery is drained below 20% of its capacity. Developers can replace this behavior with their own UPS monitor
process.(r. 2863893). (r. 2972495).
Back to top
SCSI Architecture Model (SAM)
Support for devices conforming to the SCSI Architecture Model. This includes ATAPI, FireWire, and some USB storage
Added a new API, SetAutoSenseDataBuffer, to SCSITaskInterface to allow retrieving sense data longer than the
minimum eighteen bytes. (r. 2972370).
The synchronize cache command is now sent to devices which have a write cache. The write cache is enabled at
startup and then disabled at shutdown. (r. 2957580).
Added kIOMessageTrayStateHasChanged and kIOMessageMediaAccessChange notifications to SCSITask User Client. (r.
A memory leak in SCSITaskUserClient has been corrected. (r. 2767519).
SAM commands now have reasonable timeouts to prevent ill-behaved devices from hanging the system indefinitely.
(r. 2760367).
The SCSI Protocol Layer now supports the required Management functions as defined by the SCSI Architecture
Model. These functions include Target Reset, Logical Unit Reset, Abort Task, etc. (r. 2587364).
Back to top
USB Support
A set of APIs for communicating with USB devices connected to your Macintosh.
Fixed a problem with ResetPipe which did not work properly with Isoc pipes where the result was such that USB
did not function properly after an attempt to use one was made. (r. 2912416).
Implemented the following changes to USB isochronous transfers: (a) If we get an DATAOVERRUN because the whole
Transfer Descriptor was late, we change the error to kIOReturnIsoTooOld. This will allow a client to realize that all
the frames in the TD will have a kIOUSBNotSent2Err so it does not have to parse all the frames in the TD. And, (b)
When setting the aggregateStatus (status that will be returned if the completion had no error but frames in the TD
did have errors), assign a low priority to kIOReturnUnderrun. We will only return kIOReturnUnderrun if there is
NO other error in any of the frames. The underrun condition is fairly common for isoc transactions and not as
useful as more important errors. (r. 2884265).
Fixed the SetAlternateSettings function to return a failure result if there is insufficient bandwidth. (r.
Fixed a problem with the IOUSBInterfaceUserClient such that in an asynchronous call, the user client object was
being released prior to the completion callback. (r. 2874390).
IOUSBHIDDriver now subclasses setReport. The original implementation supported getReport only. This makes it
possible to use the standard HID Manager calls to send data to a HID device. (r. 2872057).
A potential problem in the routine IOUSBInterface::handleOpen that could cause it to fail in circumstances where it
was okay to proceed has been fixed. (r. 2869674).
Implemented a session ID property for an IOUSBDevice to use in tracking a device. The session ID property changes
each time the device is re-connected. (r. 2858029).
Converted the AppleUSBMouse driver to subclass from IOHIDFamily. You can now see the Apple USB Mouse device
from the HID Explorer sample code. (r. 2855953).
Implemented support for ClassicMustSeize and ClassicMustNotSeize at the USB Interface level. This functionality
was already supported, since Mac OS X 10.1, at the USB Device level. This is discussed further in the USB SDK's
document User Mode USB Arbitration. (r. 2853912).
Implemented a fix with USB so that the Isochronous error codes are correctly returned to the caller. Previously,
the return errors were being shifted 1 extra bit resulting in incorrect results. (r. 2850929).
Fixed the GetConfiguration call so that it would not overwrite memory on return. If you call the "IOReturn
(*GetConfiguration)(void *self, UInt8 *configNum)" function passing in a buffer of memory instead of a single
UInt8 byte's address, the first byte "configNum" is correctly set, however, the 3 bytes following this location
would be overwritten. (r. 2842636).
Fixed bug that caused delays with certain USB input devices using universal HID driver. (r. 2830705).
Implemented USB suspend/resume support. (r. 2778595).
Fixed a problem with data corruption in reading audio tracks from some USB Mass Storage devices. (r. 2771845).
Fixed a problem where connecting a USB hub with multiple USB keyboards attached would result in some of the
keyboards failing to enumerate. (r. 2763848).
Fixed the IOUSBDevice::GetFullConfigurationDescriptor call so that the call is reentrant. (r. 2756249).
Fixed the SetReport call in the IOUSBHIDDriver so that it will set report values on a specified HID device. (r.
Fixed the USB Mass Storage Class driver so that when media in a manual eject USB floppy drive is removed, the
volume will always be unmounted from the desktop. (r. 2917459).
Fixed conditions where USB requests to read and write on stalled pipes get queued on the endpoint. USB requests
now return immediate errors in this condition. (r. 2905718).
Fixed to USB Mass Storage driver to address a panic condition which occurred with a number of USB Mass Storage
devices when they were hot unplugged. (r. 2826979).
Fixed bug where the IOUSBHIDGetReport call in IOUSBHIDDriver could return invalid information. (r. 2588665).
So clients can specify a request count when calling the IOUSBPipe read and write methods, the GetReqCount()
method has been added. This allows clients to explicitly specify the number of bytes to transfer rather than
requiring the use of the getLength method from the IOMemoryDescriptor to determine the number of bytes to
transfer. (r. 2465039).
Fixed the Isochronous code in the IOUSBFamily to return IOReturn values in the frStatus fields of an isochronous
frame structure, instead of the hardware status codes which were previously being returned (r. 2809227). .
Back to top
This section discusses changes and fixes present in the Java implementation provided in Mac OS X 10.2.
Bridge Technology
Java Bridge Technology allows Java classes to subclass Objective-C classes and reference Objective-C classes.
A problem where Cocoa Java programs invoked from Java failed to exit has been corrected. (r. 2856185).
Java Bridge didn't handle calls from Objective-C to Java properly when the function had a float parameter, it now
does. (r. 2714366).
Back to top
Java Embedding is a framework that allows Java Applets to be embedded inside of Carbon applications.
Drawing with Swing from two threads could cause a hang in some applications. This has been fixed. (r. 2900957).
A problem where some Java plugins could crash while being loaded has been corrected. (r. 2922549).
Back to top
Java Classes
The Java Classes component includes all parts of Apple's Java implementation beyond the virtual machine: AWT/Swing,
tools, Apple APIs, hardware acceleration, etc.
Some Java applications packaged on 10.1.x stated they required a newer version of Mac OS X to run when launched
in 10.1.0. This problem has been corrected and these applications can be run in Mac OS X 10.2. (r. 2901962).
The hwaccellist has been updated to be an opt out list instead of an opt in list. (r. 2870062).
The Policy tool didn't allow saving of files with a dot (.) in front of the name as expected by java, it now does. (r.
2863801). has been updated to use FSRefs for better interoperability with the Mac OS X file
system. (r. 2855255).
Calling Paper.setImageableX() (and Y()) or setImageableArea() now work properly for setting custom page
margins. (r. 2851380).
A race condition that could occur while attempting to use multiple signed Applets at the same time has been fixed.
(r. 2847933).
OpenGL glyphvector drawing is now implemented. We also now correctly determine visual boundaries of primitives
we draw using fall backs, so that they no longer get clipped when blit back to the screen. (r. 2805509).
With OpenGL acceleration on, the Mix.BezierScroller demo in Java2Demo had a bad frame, this has been fixed. (r.
A problem where a JavaApplications would hang if it tried to activate multiple JDialogs has been corrected (r.
A problem where Java applications launched with an open document Apple Event would not receive the event has
been fixed. Now, the event is queued until the application is ready to process it. (r. 2784162).
A problem where modifier keys were being dropped for command events inside of java.awt has been corrected. (r.
A problem in where attempting to set the clipping region to an empty area could cause an error has
been corrected. (r. 2693942).
A problem where Java frames were not displaying their appropriate anchors has been corrected. (r. 2559558).
A problem where some applets failed to load because of untrusted server cert chain exceptions has been corrected
by updating JSSE certificate authority certificates. (r. 2970172).
Some miscalculations in the offset of a scrollpane's content when more than one scroll bar was being used have been
corrected. (r. 2962419).
A problem where scaling a jpg on the fly to fit inside of part of a drawable surface did not produce any visible
image has been corrected. This problem appeared with Java 1.3.1 update 1. (r. 2891548).
The value returned by The MouseEvent.getY() value was being calculated incorrectly in cases where
Frame.setLocation(x, y) set the y location between -1 and -20. This problem has been corrected. (r. 2883773).
A problem where the pageDialog function always returned the same PageFormat object provided as a parameter
rather than an updated PageFormat object has been corrected. This problem appeared with Java 1.3.1 Update 1. (r.
A problem where, under certain conditions, swing dialogs were not being updated correctly has been corrected.
This problem appeared with Java 1.3.1 Update 1. (r. 2869281).
A problem where it was not possible to drag windows above the system menu bar on multiple monitor systems has
been corrected. This problem appeared with Java 1.3.1 Update 1. (r. 2868758).
A problem where Java Swing Applets did not reload correctly in some internet browsers has been corrected. This
problem appeared with Mac OS X 10.1.2. (r. 2846360).
A problem where Client drag images were ignored has been corrected. (r. 2783811).
A problem where multiple help menus could be inadvertently created has been corrected. (r. 2755635).
Tidied up Java Web Start's interaction with the dock. Radically reduced the number of different icons shown in the
dock as a Java Web Start application starts up. (r. 2751985).
The MRJOpenApplicationHandler was not being called on Mac OS X when the openDocument event caused the
application to be launched, it only worked when the application was already running. This has been fixed, so that
the openDocument event is delivered even if the application was not running when the document was dropped on it.
(r. 2720352).
The MRJQuitHandler method was being called twice if there was also an MRJAboutHandler. Now, it is only called
once. (r. 2680426).
A problem where displaying a dialog inside of the MRJQuitHandler method would hang an application has been
corrected. (r. 2591363).
The MRJToolkit has been updated to support the standard application menu operations including quitting the
application, bringing up the About Box, and bringing up the Preferences dialog. (r. 2511089).
A race condition in Thread.stop() has been corrected. (r. 2870719).
Back to top
Java Deprecations
This section lists Apple Java APIs that have been deprecated as of Mac OS X 10.2 Jaguar. The APIs have been flagged as
deprecated and will trigger a deprecation warning at compile time.
MRJFileUtils has been deprecated. (r. 2964506).
MRJ Drag and Drop is now deprecated. Use the pure Java 2 Drag and Drop api's instead. (r. 2889765).
MRJ DataTransfer ( is deprecated in Jaguar. (r. 2905002).
MRJ console ( has been deprecated in Jaguar. (r. 2905006).
Back to top
Java VM
Java Virtual Machine used in Mac OS X.
HotSpot used to ignore the ThreadStackSize=n JVM setting, now it handles it properly. (r. 2913774).
JVM used to truncate an invoking thread's stack size to 512K, it now leaves the invoking stack size alone. (r.
The Java SDK now contains all Sun changes for 1.3.1_03. (r. 2895871).
Back to top
Launch Services
Launch Services provides APIs applications can use for launching other applications.
LaunchServices is now thread safe. (r. 2896505).
Local applications on hard drives are now launched before identical copies of the same application found on CD
drives. (r. 2815028).
A problem where local programs were not being given preference at document-opening time over server
application has been corrected. Now, a local copy of an app takes priority over a copy with the same version
number located on a network volume. A higher version number will trump the local copy, but in that case you can
set a preference for the local copy using the Finder's Info Window. (r. 2645865).
The kLSLaunchDontSwitch flag is now respected when using LSOpenFromURLSpec. Previously, this flag was
ignored. (r. 2755764).
MIME info can now appear in application plists along side CFBundleTypeExtensions and CFBundleTypeOSTypes to
identify files an application is capable of displaying or editing by MIME type. The MIME key is
CFBundleTypeMIMETypes. (r. 2722760).
The new LaunchServices APIs, LSCopyKindStringForTypeInfo() and LSCopyKindStringForMIMEType(), were added
to allow callers to retrieve kind strings of non-existent files. (r. 2696767).
Previous 1K restriction to the length of URLs that can be passed to Launch Services have been removed. Now URLs
can be of any size. .
Back to top
Mach Kernel
The complete Mac OS X core operating system environment that includes Mach, BSD, the I/O Kit, file systems, and
networking components.
Fixed a subtle bug in IOCatalogue where, if IOCatalogue was asked to add a new personality, it would compare the
personality against all those it knows, but would check only the keys of the dictionaries already present. This could
lead to a case where adding a new personality that is a superset of an existing one would cause the existing one to be
dropped as a duplicate. (r. 2928968).
When Safe Booting (shift key down), ignore I/O Kit personalities with the IOKitDebug property. This is to allow
developers to bypass loading a panic()ing boot-time kext. (r. 2864324). (r. 2920410).
sprintf and snprintf now support quad-ints (%qd, %qu, %qx, etc). (r. 2917340).
kextload now does full authentication by default, and only allows the invoker to skip authentication if the kext is not
being loaded (as with -n). (r. 2906248).
New commands kextload, kextunload, and kextcache obsolete kmodload/kmodsyms, kmodunload, kmodsyms, and
mkextcache.(r. 2875218, 2875215, 2899022) (r. 2898582).
Kext loading now passes through dependencies on kexts with no binary directly to the next kext that does have a
binary. Arbitrary levels of aliasing through codeless kexts are supported. (NOTE: This only works for run-time
kext loading. The boot-time loader does not yet support this feature.) (r. 2894843). (r. 2894843).
If kextd or kextload is launched in safe boot mode (shift key down), it will not use the info dictionary cache and will
instead re-scan the kexts themselves. (r. 2887998).
dyld now correctly handles unknown load commands with the LC_REQ_DYLD bit set. (r. 2882932).
A problem where the routine thread_sleep_mutex() was returning an invalid value has been corrected. (r.
The criteria for kernel preemption has been expanded to tasks running in the application band, and those member
threads with +importance that are not timeshared. (r. 2862611).
A race condition inside of the routine wait_queue_remove() that could cause unpredictable behavior for threads in
an un-interruptible wait state has been corrected. (r. 2857550).
The kextload command now allows more than one kext argument to be specified. (WARNING: Utilizing this feature
may make error diagnostics difficult as any returned error exit status is ambiguous for multiple kexts.) (r.
The maximum limit for malloc was too small. This has been increased to a limit of 2.5 GB for the text, data, and
heap and the default stack can be up to 509 MB (r. 2848946). (r. 2848945).
In order to reduce application launch times, the kernel now maintains information about the working set of an
application between launches (in "/var/vm/app_profile"). Pre-heat files are meant to be transparent to the user;
however, developers who are constantly re-working their applications may find that their pre-heat files are
getting large. The files may become clogged with out-of-date profiles on applications who's versions have changed.
As a result, developers may find that it is good to clear out the old pre-heat files on test machines once in a while.
To do this, become super-user and do a rm -r /private/var/vm/app_profile and then reboot. app_profile is the
directory which contains the profile files. The directory is automatically re-created on reboot. (r. 2847332).
As xnu no longer builds with PBWO and the presence of the PB.project file was confusing people into thinking that
it was, we've removed this file. (r. 2841647).
A problem where terminating a mach thread from another mach thread could leave a thread running but marked as
ABORTED with thread-self ports disabled has been corrected. This problem could only occur on MP machines. (r.
A problem in the processor_set_threads() routine that could cause can cause thread reference underflows or
kernel data corruption and/or panics has been corrected. (r. 2838105).
The version number of,,,,
and has been incremented to 6.0. (r. 2796646).
The routine KUNCUserNotificationDisplayFromBundle call now uses a "%@" character sequence to separate out
words to add to the dialog it presents. (r. 2795373).
Fixed a long-standing problem where a dependency version incompatibility would report the requested version of
the dependency instead of its actual version. (r. 2789001).
All non-Objective-C mach headers have been modified to use #include instead of #import for better compatibility
with C programs. (r. 2778821).
A problem where the Velocity Engine and floating point contexts could be lost when a machine was put to sleep has
been corrected. (r. 2777855).
The processor load averages reported by systctl() (and, therefore, by "w", "uptime" and friends) have been
corrected so they have meaning similar to the values reported on other Unix systems. (r. 2752471).
kernel malloc has been updated to return a pointer to a zero length block of memory when called with a zero
argument. Prior to this change kernel malloc would return NULL if asked to create a zero length block. (r.
The kextload command now correctly returns a nonzero result for some error conditions that used to return zero,
such as if the binary to load was absent. (r. 2712179). (r. 2712179).
The kextload command now does more extensive error checking when parsing kext plists. (r. 2679397).
System V Semaphores for xnu are installed with Mac OS X 10.2. (r. 2676742).
It is now possible to enable hardware floating point exceptions. (r. 2656343).
Panic dumps to the screen are now a boot-time option. To turn off the dialog and get the old textual presentation of
info on the screen, set boot-args to debug=0x100. (r. 2653104).
The panic dump no longer includes dependency info for in-kernel kernel modules such as
This information added no real benefit and simply made panic dumps longer. (r. 2641919).
Previously, the CFBundleIdentifier property was required in all IOKitPersonalities. In most cases that property
would simply refer to the KEXTs own bundle. Now, a personality without a CFBundleIdentifier property is assumed
to be referring to its own bundle. (r. 2604841).
Incompatibilities between the headers <sys/systm.h> and <kern/sched_prim.h> that prevented them from being
included in the same kext source file have been corrected. (r. 2578701).
Kernel panics are now displayed in a dialog box. It is possible for developers to turn on the older display when it is
needed (see 2653104 above). (r. 2512985).
A problem where a kernel hang could occur when mapping files has been corrected. (r. 2477145).
Many third party kexts do not load in Jaguar due to strict permissions checking. Now, all kext bundles must have
owner and group root:wheel with permissions 755 for folders and 644 for files in order to load. If a kext fails this
check, the user is presented with a panel informing them that the kext could be a security hole, and offering them
the option to allow it to load anyway, to fix its ownership and permissions so it will load from that point on, or to
disallow the load. (r. 2867143).
CFBundlePointerFromFunctionName was crashing when the named function was not present. This has been fixed.
(r. 2857197).
The new kext management code produces better diagnostic messages if a kext cannot be loaded. (r. 2803079).
Loading too many boot-time kexts built with full symbols can cause the secondary loader (BootX) to run out of
memory. The result is the broken System Folder icon at boot time. Future releases of Mac OS X after 10.2 may
allocate more memory for BootX. However, it's never necessary for debugging purposes to run a kext with full
symbols. The symbols only need to be visible to the debugging system, not the target system. <BR><BR>See previous
comment submitted.(r. 2941822). .
Fixed a bug where Kernel panic could occur when the vmmStopVM kernel API was called. (r. 2837235).
Fixed a bug where a funnel lock was being held during vm_map_remove. This call can block and cause the mouse to
be "skittery" when relinquishing huge number of pages. (r. 2826784).
Back to top
Math & Logical Utils
The mathematical libraries included with Mac OS X.
A complete BLAS implementation ships with Mac OS X 10.2. The Basic Linear Algebra Subroutines (BLAS) are high
quality leaf routines for performing basic vector and matrix operations. Level 1 BLAS consists of vector-vector
operations, Level 2 BLAS consists of matrix-vector operations, and Level 3 BLAS have matrix-matrix operations.
The efficiency, portability, and the wide adoption of the BLAS have made them common place in the development of
high quality linear algebra software such as LAPACK or other technologies requiring fast vector and matrix
calculations. This BLAS implementation covers vector and scalar, complex and real, single and double precision.
For more information refer to <> .
The LAPACK library ships with Mac OS X 10.2. LAPACK provides routines for solving systems of simultaneous
linear equations, least-squares solutions of linear systems of equations, eigenvalue problems, and singular value
problems. The associated matrix factorizations (LU, Cholesky, QR, SVD, Schur, generalized Schur) are also
provided, as are related computations such as reordering of the Schur factorizations and estimating condition
numbers. Dense and banded matrices are handled, but not general sparse matrices. In all areas, similar
functionality is provided for real and complex matrices, in both single and double precision. LAPACK in vecLib
makes full use of the hand tuned BLAS and fully benefits from its performance. This LAPACK implementation covers
vector and scalar, complex and real, single and double precision. For more information refer to
<>. Note that vecLib's LAPACK was built using the FORTRAN to C
converter called f2c. As a result, users must be aware that: (a) ALL arguments must be passed by reference. This
includes all scalar arguments such as matrix dimension M and N, and (b) there is a difference in the definition of a
two-dimensional array in Fortran and C. For more information refer to <>.
The FixMath routines have been optimized and their rounding operations have been corrected to be in sync with
previous versions of FixMath. The algorithms in FixMath have been revamped to give the same answers in jaguar
as in Mac OS 9. All rounding mode sensitivities have been corrected and major performance improvements to all
functions have been made. .
The libm library is now standard compliant. The new math library in jaguar is now IEEE-754 and C99 compliant
in double precision. In addition, the new libm is faster than MathLib found in Mac OS 9 and faster than libm in Mac
OS 10.1.x. .
SIGFPE (New in 10.2) Jaguar floating-point environment now fully supports IEEE-754 style exception halts. .
rounding control (changed in 10.2) The return values of the floating point environment routines fesetround(),
feholdexcept() have been changed and corrected. These routines in Mac OS 10.1.x and earlier returned boolean
status opposite to that specified by C99. Jaguar libm corrects this and brings them into agreement with the
ISO/IEC 9899:1999 (C99) specification. .
The gamma function has been changed in Mac OS X 10.2. See Technical Q&A 1143 for more information
<> .
Quiet and signaling NaNs have been changed in Mac OS X 10.2. FP_SNAN, FP_QNAN are deprecated in the final C99
spec. The new <math.h> defines them to be the standard FP_NAN. .
Back to top
Facilities for symetric multiprocessing built in to Mac OS X.
pthread_exit() from main() wasn't waiting for other threads to finish. This has been fixed. (r. 2888517).
pthread_setcancelstate, pthread_setcanceltype returned wrong flags. This has been fixed. (r. 2653228).
The pthread_setcancelstate and pthread_setcanceltype API's would crash if the second paramater was NULL. This
has been fixed. (r. 2458277).
Back to top
This section discusses changes and new features in the networking services provided in Mac OS X 10.2.
AppleTalk is a built-in network protocol that supports communications over AppleTalk networks.
Fixed a problem where names written to the /etc/hostconfig file could include unreadable text for the
APPLETALK_HOSTNAME entry. Now, an alternate encoding scheme is used. (r. 2911094).
Modified the NBP tuple unpacking code to fix a potential crashing problem which could result if the code read past
the end of the reply buffer. (r. 2903925).
When you enable AppleTalk and apply the change, if there is an AppleTalk zone name, the name will appear in the
popup. (r. 2886131).
Fixed a problem with the ADSP in the kernel such that a heavily loaded Mac Manager server (250+ clients) would
panic the system. (r. 2822909).
Modified checkATStack function so that the RUNNING result is only returned when the AppleTalk stack has
completed loading. Previously, the checkATStack function would return the RUNNING result while the AppleTalk
stack was still being loaded. (r. 2806488).
Fixed the AppleTalk Framework header file at_proto.h to include the "C" wrapper for use with C++ code. (r.
Fixed a bug in AppleTalk routing which caused a multihomed system to use the wrong source address when sending
packets out the non-default interface. (r. 2741178).
Fixed the problem that an AFP Server could not be seen on any active connection on a 4-port Ethernet card. (r.
Fixed a problem such that changes in AppleTalk state were not being reported. (r. 2561461).
Reduced the amount of memory consumed by the atp_open call. (r. 2882827).
Back to top
BSD Networking APIs.
The BSD networking APIs included with Mac OS X.
ftpd has been updated to lukemftpd 1.1. (r. 2889211).
Correction to handling of IP_MULTICAST_IF socket option. (r. 2847168).
Removed uucpd from Mac OS X since it was not used. (r. 2780797).
Fixed the Ethernet demultiplexor to recognize the DLIL_DESC_SNAP socket option to allow a raw Ethernet endpoint
to process incoming Ethernet SNAP packets. (r. 2953085).
Fixed the Ethernet demultiplexor to handle incoming SAP and SNAP packets with the size field set for 1500. This
problem only affected raw Ethernet sockets. (r. 2952858).
Implemented support for an application to send and receive ICMP echo packets for a normal user with no
administrative privileges. Instead of opening a raw IP socket like this: socket(PF_INET, SOCK_RAW,
IPPROTO_ICMP), you can now open a non-privileged datagram oriented socket: socket(PF_INET, SOCK_DGRAM,
IPPROTO_ICMP). (r. 2655317).
Back to top
CFNetwork provides various network facilities using Core Foundation data types and calling conventions. Most notably, it
provides facilities for building and processing HTTP requests, building and using various kinds of direct socket
connections, and advertising or discovering network services shared via Rendezvous. It is available as part of the Core
Services framework.
Added a comment to "CFSocketStream.h" to clarify that the TLS/SSL setting can be negotiated upwards after a
stream has been opened. (r. 2915430).
CFReadStreamOpen no longer fails if the first character of the host name is a digit (for example, ""). (r.
Added support for SOCK v5 firewalls. (r. 2833743).
Added support for SOCK v4 firewalls. (r. 2833740).
Added CFNetwork APIs to browse for and register services using Rendezvous. See "CFNetwork/CFNetServices.h" for
more information. (r. 2833543).
Previously CFNetwork would always send the port number in the "Host" header when requesting a URL. That caused
problems for some servers. Now CFNetwork only puts the port number in the "Host" header if it's not 80. (r.
An HTTP stream can now accept its payload data from a stream. (r. 2706564).
Added support for persistent HTTP connections. (r. 2705578).
Added support for HTTP digest authentication. (r. 2705542).
Fixed a bug related to asynchronous downloads. CFNetwork was occasionally signalling that bytes were available
when they weren't. This happened most often when the client calls CFReadStreamRead multiple times in response to
a single signal of kCFStreamEventHasBytesAvailable. (r. 2973276).
CFNetwork now returns an error, as opposed to crashing, if you pass it a request with high-bit set characters. (r.
Fixed a problem where passing a bad host name to CFNetwork would sometimes cause it to crash. (r. 2923325).
Fixed a bug that caused CFReadStreamCopyProperty to return NULL intermittently when asking for the property
kCFStreamPropertyHTTPResponseHeader. (r. 2916653).
Fixed a bug that caused CFReadStreamRead to hang. (r. 2915455).
HTTP headers transmitted at the end of a chunked response are now properly picked up and added to the response
headers; before, they were misparsed and could cause crashes. (r. 2912738).
Fixed an incompatibility with web servers that expect three CRLF pairs after a request whose Content-Length
header is 0. (r. 2896595).
Fixed a problem where CFNetwork would consider %00 in the host name portion of the URL to be the end of the
URL. (r. 2890529).
Fixed an HTTP/1.1 problem where the server responds with a 100-continue response, but CFNetwork would not
continue. This is most common when sending POST requests. (r. 2851403).
Fixed a problem that could cause the kCFStreamEventHasBytesAvailable event to be delivered after the
kCFStreamEventEndEncountered event. (r. 2840545).
Back to top
DHCP and BOOTP servers provide automated network address configuration services. This section discusses changes in Mac
OS X's facilities for accessing DHCP and BOOTP servers.
Changes have been implemented to support interfaces being removed from the network. (r. 2879871).
DHCP now correctly sets the "secs" field of request packets to the number of seconds since DHCP was started.
Previously that field was erroneously always set to 0, which caused problems for some DHCP servers. (r.
The DHCP client now asks for the LDAP configuration option (95). (r. 2823022).
Changes to support single-link multihoming (multiple network configurations using the same network card). (r.
It is now possible to configure the DHCP server (via properties in the "/config/dhcp" NetInfo node) to hand out
addresses only to clients with known MAC addresses. (r. 2804638).
DHCP now exports a public API for requesting non-standard DHCP options and for accessing the lease time. See
<SystemConfiguration/DHCPClientPreferences.h> and <SystemConfiguration/SCDynamicStoreCopyDHCPInfo.h> for
more details. (r. 2794670).
The DHCP client now tries harder to get an address, which improves compatibility with spanning tree switches. (r.
When configured to use DHCP, the system now allocates a link local address quicker and then continues to probe for
a DHCP server. This allows Rendezvous to function sooner after waking up a machine on a network without a DHCP
server. (r. 2901898).
The DHCP client now does not pass a hostname option to the server if the computer's name contains characters that
would be invalid according to the DHCP specification. (r. 2822711).
The DHCP server now supports multiple boot images. (r. 2477608).
Back to top
Internet Config
Internet Config provides an API to access and manage Internet-related preferences.
Internet Config has been moved out of Carbon and into the new HIServices framework (a sub-framework of the
Application Services framework). This makes it easier to access from non-Carbon applications. (r. 2786960).
Internet Config now correctly handles URLs with pound ('#') characters in them. (r. 2783916).
Calling ICEditPreferences with a proxy key (for example, kICUseFTPProxy) now opens the Network preferences
panel, where you can edit the proxy setting. Previously it would open the Internet preferences panel. (r.
Updated the IC mappings to map .jar files to JAR Launcher. (r. 2747714).
As the system currently provides no user interface to edit file mappings, calling ICEditPreferences with the
kICMapping key now returns an error. (r. 2940580).
Fixed a problem where, if you requested a valid helper application preference, Internet Config would return the
correct information but return an error result of icPrefNotFoundErr rather than noErr. (r. 2919430).
IC now handles arbitrary sized URLs passed to ICLaunchURL. This, combined with a fix to the "open location"
scripting addition, means that you can now launch URLs longer than 255 characters from scripts. (r. 2871281).
IC now correctly handles user data added to kICMapping preference entries. (r. 2690150).
Back to top
The Network Services Location (NSL) Manager provides a protocol-independent way for applications to discover network
services that are available in the local network.
NSLPrepareRequest now allows you to pass in NULL for the contextPtr. (r. 2886211).
The Connect To Server dialog now displays UTF-8 strings containing Japanese characters correctly. (r.
Now, NSL will launch Open Directory if it is not running when the Connect To Server dialog box is involked.(r.
2783362). .
NSL only supports browsing Rendezvous services through its high level GUI API (NSLStandardGetURL). A user
selecting a service located via Rendezvous will not show an IP address or URL. The URL gets generated after the
item is selected and the dialog is dismissed..
The Service Discovery plug-ins in Open Directory (Rendezvous, SLP, AppleTalk, SMB) are initialized on demand.
This can cause a delay seeing the Neighborhoods (Scopes, Workgroups, Zones) the first time Connect To Server is
invoked after a restart. .
NSL now has a concept of a "Simple Network". If the set of neighborhoods found is equal to the set of "default"
neighborhoods, NSL will return 0 neighborhoods. Searching for services in the "default" will show a single list of
services from all service discovery protocols. This can be seen in Connect To Server when switching between a
network that has more than one Scope, Zone, or Workgroup, to a simple network that is unmanaged.
Back to top
OpenTransport is a set of APIs used by CFM-Carbon applications to access TCP/IP services.
Fixed Open Transport PPP so that asynchronous PPP endpoints which register to receive notification of PPP
events, receive the standard notification events. (r. 2756632).
Implemented a fix for an asynchronous OTLookupName call so that the call get cleaned up properly if the mapper
provider is closed before completing the lookup. (r. 2652603).
Changes in the system's IP network configuration now close inet providers and generate kOTProviderIsClosed
events on their notifiers. When that happens, the provider is already internally closed and OTCloseProvider is the
only legal API call that can be made on it. (r. 2446614).
Fixed a memory leak with the OTConnect call as implemented in Carbon Open Transport. (r. 2897246).
Fixed the OTInetAddressToName call so that it would not used cached data from a previous OTInetStringToAddress
call. A previous OTInetStringToAddress might resolve a name which points to multiple hosts with unique IP
addresses and host names. (r. 2875786).
Fixed a bug where calling OTIoctl(..., I_OTConnect, ...) to establish a PPP connection could crash the system. (r.
The Jaguar WWDC seed contained a version of OpenTransport that was a bit too aggressive in closing providers
when a configuration change occurred. The GM version of Jaguar takes an approach that is friendlier to the
multihomed environment of OS X. When a configuration change occurs, OpenTransport will only close inet
endpoints that were bound to an address that is no longer present on the system.
Fixed a problem in which multiple calls to OTRcvUData for the same packet would corrupt the TUnitData structure.
Back to top
Service Location Protocol (SLP) is the protocol used by OS 9 and OS X to discover certain services on IP networks. Apple
now recommends that developers should use Rendezvous instead of SLP.
After switching locations, all services that were registered via SLP are deregistered. It is up to the registering
application to make sure that they re-register themselves after such an occurrence. (r. 2896398).
SLP now supports more than 2K of scope information. This was done by using the field in the standard SLP header
for marking the packet as having overflow data that needs to be re-requested by the client with a TCP connection.
(r. 2773380).
On Mac OS X Server, the SLP regfile is now deleted on each reboot to keep old registrations from persisting. (r.
2718327). (r. 2772412).
Unplugging the net cable while NSL is doing a search impedes searches, this has been fixed. (r. 2739157).
Improved error reporting for SLP when networking is down. (r. 2732590).
A problem where a crash could occur when repeatedly running a service search and cancelling it before it had
completed has been corrected. (r. 2600622).
A number of memory leaks and crashing bugs have been corrected. (r. 2969856).
A problem where the routine dsGetRecordList() could return erroneous information when called with a match type
of eDSExact has been corrected. (r. 2949248).
The routine dsGetRecordList() was returning duplicate results in most cases. This problem has been corrected. (r.
Back to top
Simple Network Management Protocol (SNMP) for Mac OS X.
SNMP support has been added to Mac OS X 10.2. (r. 2561896).
Back to top
URL Access
The URL Access Manager provides application support for downloading data from or uploading data to a Universal Resource
Locator (URL), with support for automatic decompression of compressed files.
URL Access now deletes partially uploaded files when the transfer fails. (r. 2891692).
Fixed a bug that caused downloads to fail when encountering a redirection. (r. 2880313).
Fixed a bug that caused URL Access to return an impossible error (kURLExtensionFailureError). (r. 2858557).
Calling URLGetError() now returns the correct error code instead of always returning 404. (r. 2817022).
After downloading a folder using URLDownload, caling URLGetCurrentState() now returns the correct value instead
of 0. (r. 2804425).
When specifying kURLDisplayAuthFlag, URLDownload will now only prompt you for a password if necessary. (r.
URL Access can now FTP download files with special characters in their names. (r. 2939783).
Fixed a bug that would cause URLDownload to return -1 when posting to a certain HTTPS server. (r. 2906557).
Fixed a crashing bug when downloading folders using URLDownload. (r. 2892959).
Increased the number of allowable redirections from 1 to 4. (r. 2868534).
Fixed a bug that would cause URL Access transactions to never complete because server was returning "100
Continue" responses. (r. 2855680).
Fixed bug that caused URLNewReference to return +1 if URL had illegal characters. (r. 2843098).
URL Access now sends notifications for kURLResourceFoundEvent, kURLUploadingEvent, and
kURLDownloadingEvent. (r. 2813269).
URLGetProperty for kURLResourceSize now returns the correct value instead of 0. (r. 2783715).
Fixed a bug that caused FTP uploads to leave 0 length files when the disk was full. (r. 2752669).
URL Access now properly handles "100 Continue" replies from HTTP 1.1 servers. (r. 2872047).
Back to top
Open Directory
Open Directory provides an abstraction layer designed to isolate clients of the Open Directory programming interface from
the actual implementation of a directory system.
Support for password server authentication methods has been added. (r. 2932522).
Added Open Directory support for managed client types. (r. 2878911).
Added LDAPv3 Open Directory plug-in with read/write support. (r. 2878721).
A new error code, eDSSchemaError, has been assimilated into the Directory Services APIs. This error is returned
when a Directory Services operation is attempted that violates the schema of the directory service being accessed.
(r. 2871811).
Previously, calls dsGetRecordList() with more than one recName could fail under certain conditions by only
providing information in the first record when more information was available. This error has been corrected. (r.
These methods are supported with either Password Server or the legacy Authentication Manager ("tim"). (r.
Added a new BSD Configuration File Open Directory plug-in. (r. 2852585).
A problem where the dsAddAttributeValue routine would not accept a NULL tDataNodePtr parameter has been
corrected. Now, a NULL tDataNodePtr means 'add an attribute without an initial value'. (This works on NetInfo, but
may not be supported on some directory systems, such as LDAP.) (r. 2852078).
The new kDS1AttrPicture standard type constant has been added to directory services. This constant can be used to
access the picture attribute associated with each user. (r. 2846085).
The new Open Directory standard type constants: kDSNAttrPort and kDSNAttrLocation were added to the Open
Directory constant database to support NSL/Rendezvous lookup. (r. 2829443).
Previously Open Directory required the calling process to be running as root before any calls could be made to a
node that modified a directory. For example, dsSetRecordName() and dsCreateRecordAndOpen() would
unconditionally fail with a eDSPermissionError if the calling process was not running as root. This restriction has
been relaxed so that non-root processes can authenticate to a node reference using dsDoDirNodeAuth in order to
make changes. (r. 2778611).
Problems where some Open Directory lookup operations could fail for user names with some combinations of
characters (usually underscores mixed with brackets) in their names have been corrected. (r. 2762543).
The Open Directory daemon now registers a key inside of the system configuration framework to indicate a restart
of the daemon was experienced. This key is only temporary though and is intended to be used by configd. (r.
GetDirNodeInfo now checks for buffers passed which are too small (similar to what GetRecordList does). When a too
small buffer is detected a eDSBufferTooSmall error is returned. (r. 2975226).
A new attribute, kDS1AttrTypeAdminLimits, was added to support Workgroup Manager admin limits. (r.
Added new error codes to support password policy features of the Password Server: eDSAuthQualityCheckFailed,
eDSAuthPasswordTooShort, eDSAuthPasswordTooLong, eDSAuthPasswordNeedsLetter, and
eDSAuthPasswordNeedsDigi (r. 2951855).
Added constants, kDS1AttrPresetUserIsAdmin and kDS1AttrHomeLocOwner, to describe new attributes. These
attributes describe if a preset user is admin (or not) and the owner associated with a workgroup's home directory.
(r. 2945978).
Support for Password Server was added to both the NetInfo and the LDAPv3 plug-ins. .
Back to top
QuickTime provides various multimedia services for the Mac OS, including the ability to display movies and facilities for
the translation and display of various audio and visual data file formats.
Mac OS X 10.2 ships with QuickTime 6. New features, changes, and bug fixes in QuickTime 6 are documented in the
QuickTime 6 documentation. .
Back to top
This section discusses changes and new features in the security services provided in Mac OS X 10.2.
Kerberos is a networking protocol designed to allow strong client/server authentication.
Support for client commands: kinit, klist, kdestroy, kpasswd was added to system.
The Kerberos library provided with Mac OS X 10.2 has been simplified so it is more convenient for programmers
to use. (r. 2829684).
The Kerberos ticket manager is installed with Mac OS X 10.2. (r. 2949384).
A problem where attempting to use a Kerberos command line tool when no preference file existed could create an
empty preferences file has been corrected. (r. 2824235).
A problem where the kinit tool did not do any error checking on the format of the renew parameter has been
corrected. (r. 2816142).
Back to top
Security Framework
The security framework exports a security APIs for use with Mac OS X.
Add a function to the TP module to enable developers and sysadmins to generate Cert Signing Requests. (r.
CSP, TP, CL modules are now thread safe. (r. 2897036).
Added SSLSetCertificate() for server side SSL support. (r. 2886598).
Added expanded per-cert error reporting to TP Policy verification. The evidence chain returned by
CSSM_TP_CertGroupVerify now has policy-specific error codes reported in the returned evidence chain. (r.
The Keychain database schema was updated to facilitate storage of certificates per the CDSA spec. (r. 2858506).
Added SecureTransport APIs. (r. 2855500).
Fixed a problem where KCAddGenericPassword would return a CDSA error code when a write to the KeyChain file
failed because of insufficient permissions. Now the OSErr wrPermErr is returned instead. (r. 2775734).
Keychains now support storing public as well as protected items. This is part of allowing certificates to be stored
in keychains. (r. 2304871).
Additional X509 root certificates have been included. (r. 2973839).
The trusted anchor certificates are now stored in a (root write-protected) keychain file. This makes the set of
anchor certs easier to update by system administrators and via Software Update. (r. 2950315).
New tool /usr/bin/certtool added to: (a) Create a key pair and a self-signed root cert, add them to a keychain. Used
for early debugging of server-side code. (b) Create a key pair and an associated Cert SIgning Request (CSR). A CSR
is the means by which one requests a cert authority (CA) such as Verisign to provide a "real" cert which is signed
by a recognized CA. (c) Import a cert obtained from the CA to whom one sent the CSR generated in step 2, add it to a
keychain, and bind the cert with the keypair generated in step 2. This is the "real world" procedure for obtaining
an SSL cert for a server which uses SecureTransport. (r. 2911384).
CSSMOID_SHA1 has been added to oidsalg.h. This is a common industry-standard value but not required by the CDSA
spec. (r. 2901582).
Brought the names of the fields in the cssm_context structure in cssmtype.h up to date with the CDSA 2.0 spec.
This does not affect binary compatibility. (r. 2900877).
Added the constant CSSMERR_DL_INVALID_DL_HANDLE which was missing from cssmerr.h. (r. 2900467).
Added the constant CSSMERR_CSSM_FUNCTION_NOT_IMPLEMENTED which was missing from cssmerr.h. (r.
gGuidCssm was declared external in Security/cssmapple.h, but was not actually exported. This symbol is now
exported correctly. (r. 2892955).
Fixed a memory leak when calling KCFindInternetPassword. (r. 2843883).
Added support for smart cards that comply with the JavaCard 2.1 standard. (r. 2824101).
New Security APIs added to simplify use of the underlying Common Data Security Architecture (CDSA). (r.
New APIs were added to Security.framework for working with X.509 certificates.(r. 2887929) (r. 2892437).
Added certificate support APIs to Security.framework.(r.2846641). (r. 2866950).
The list of trusted root certificates is now user modifiable, so that additional roots can be added, or existing roots
marked as not trusted. (r. 2824109).
Checking compliance with the CDSA 2.1 specification by running through the CDSA conformance test suite
developed by UniSoft. (r. 2824077).
Fixed memory leaks when calling KCFindGenericPassword and KCFindAppleSharePassword. (r. 2953620).
Data types in the layered services of Security.framework (such as KCRef) are now true Core Foundation objects.
(r. 2904268).
If the default keychain has been deleted but other keychains exist, the create/select keychain dialog is now
presented instead of the create keychain dialog so the user can choose an alternate keychain. (r. 2853839).
The Carbon SecurityHI framework now uses the Cocoa SecurityHICocoa framework. This takes advantage of the
ability to mix Carbon and Cocoa UI in Jaguar. (r. 2851842).
Fixed a problem where retrieving a 'cusi' (has custom icon) attribute would return the wrong value. (r.
Fixed a problem where NSKeyChainItem could return a bogus value for a numeric attribute stored in a keychain. .
A no-pad option was added for raw RSA encryption and signing. Before, PKCS1-style padding was assumed. (r.
Basic validity checking of incoming KeyAttr flags (RETURN_DATA, ALWAYS_SENSITIVE, NEVER_EXTRACTABLE) is
now done at this level rather than by the CSP. (r. 2879872).
CSSM_DigestDataClone has now been implemented. (r. 2890980).
Fixed a bug that would cause AuthorizationExecuteWithPrivileges to fail if run more than once in the same login
session. (r. 2824995).
Back to top
This section discusses changes and new features in the text handling facilities provided in Mac OS X 10.2.
Multilingual Text Editor
MultiLingual Text Editing (MLTE) supplies a C language interface for creating and editing Unicode text documents. Although
MLTE may appear to be functionally similar to TextEdit in many ways, MLTE provides many features that are not provided
in TextEdit.
Mac OS X 10.2 includes MLTE version 1.5. (r. 2908662).
Mouse wheel events are now supported by the MLTE APIs. (r. 2526078). (r. 2875253).
Improved performance of TXNObjects in CG transformations. (r. 2864521).
Added support in MLTE to honor the "scroll to here" setting. (r. 2822866).
New API TXNScroll added to MLTE (MacTextEditor.h). (r. 2822193).
MLTE now supports printing with a CGContext. (r. 2818402).
TXNAdjustCursor now behaves correctly if the second parameter, ioCursorRgn, is NULL. (r. 2812991).
A problem where Drag scrolling would only occur while the mouse is moving has been corrected. (r. 2763883).
A problem where the grow box area wasn't appearing in an MLTE pane object when it was requested, by way of the
kTXNDrawGrowIconMask, has been corrected. (r. 2677645).
The new TXNControlTag, kTXNVisibilityTag, has been made available in MacTextEditor.h for controlling the drawing
state of MLTE objects. Under normal circumstances, each time some type attributes are set, the TXNObject will
redraw. However, with this tag set, MLTE panes will no longer draw every time a type attribute is set. Setting this
tag will not cause a refresh of the TXNObject pane, and unsetting this tag will not force an update. (r. 2936678).
The new kTXNSingleLevelUndo tag has been added to MacTextEditor.h. This tag allows a choice for MLTE clients
between supporting a relatively expensive multiple undo or a simple single undo state. (r. 2930283).
URL support has been added to MLTE. (r. 2927249).
MLTE now fully supports monostyled text with kTXNMonostyledTextMask (r. 2689984).
Back to top
Text Encoding Converter
The Text Encoding Converter enables the conversion of text data from one encoding to another (e.g., Mac OS Roman to
The Eject Symbol is now mapped to 0x8C as the char code in the MacKeyboard encoding and to the
Corporate-Use-Area Unicode code point U+F804. (r. 2781691).
Improvements to Text Encoding Conversion between Macintosh Korean and Unicode 2.1 or 3.0. (r. 2765765).
TECGetMailTextEncodings and TECCountMailTextEncodings now supports Tier 3 languages. (r. 2969270).
TEC support added for the following DOS encodings: kTextEncodingDOSGreek, kTextEncodingDOSBalticRim,
kTextEncodingDOSLatin2, kTextEncodingDOSTurkish, kTextEncodingDOSIcelandic, and kTextEncodingDOSRussian.
(r. 2842283).
The new APIs GetTextEncodingFromScriptInfo and GetScriptInfoFromTextEncoding have been added to TEC. These
APIs replace UpgradeScriptInfoToTextEncoding and RevertTextEncodingToScriptInfo where you pass NULL as the
font name. (r. 2588276).
Added support for converting to canonically composed Unicode (kUnicodeCanonicalCompVariant) and to two HFS
Plus-specific variants (kUnicodeHFSPlusDecompVariant and kUnicodeHFSPlusCompVariant).
kUnicodeHFSPlusDecompVariant is now the recommended way for requesting decompositions with HFS Plus
exclusions, instead of using kUnicodeUseHFSPlusMapping.(r. 2715044). .
Output of unnecessary direction overrides has been reduced when converting from MacArabic and MacHebrew to
Unicode. (rr. 2544128, 2972010, 2967339).
Back to top
Text Services Manager
The Text Services Manager provides facilities for applications to communicate with various text processing utilities that
provide services such as special text input methods, spell checking, hyphenation, etc.
TSM support for Glyph Input has been added. (r. 2883312).
Additional support for general keyboard navigation has been added. (r. 2858720).
Improved performance/robustness of input methods and application switching. (r. 2825097).
Back to top
TextEdit is a simple text-processing service that provides basic text-handling for small amounts of text. It was introduced
with the original version of Macintosh system software. An enhanced text-processing service, the Multilingual Text Engine
(MLTE), was introduced in Mac OS 9. Most TextEdit functions are not recommended for use on Mac OS X, so you should use
MLTE instead of TextEdit.
A problem where auto-scrolling would stop if the mouse were moved outside of the window containing the text edit
field has been corrected. (r. 2836264).
Fixed a problem with TextEdit where 2-byte text would not have the gray baseline displayed to help distinguish it
from unconfirmed text. (r. 2793871).
Back to top
Unicode Utilities
The Unicode Utilities provides a collection of Unicode text handling routines.
Calling UCCompareText() with kUCCollateDigitsAsNumberMask no longer reads text off the end of a block. (r.
The routine UCGetCollationKey now returns actualKeySize with noErr instead of paramErr when collationKey is
NULL. (r. 2843282).
Changed UCKeyTranslate to return noErr and zero length string instead of param err when the key code is out of
range. (r. 2841440).
The routine LocaleGetRegionLanguageName no longer returns an empty string. (r. 2920226).
UCGetCollationKey now produces smaller collation keys whenever possible. NOTE: the collation keys produced by
UCGetCollationKey() are not guaranteed to be compatible accross system versions. (r. 2843266).
Back to top
Acrobat version of this Note (460K)
Back to top
Technical Notes by Date | Number | Technology | Title
Developer Documentation | Technical Q&As | Development Kits | Sample Code