The sample code then calls its GetRecInfo routine and passes to it the node reference (nodeRef) obtained
by calling its MyOpenDirNode routine.
The GetRecInfo routine calls dsDataNodeAllocateString to allocate two data nodes: one named
recName allocated using the string “admin” and one named recType using the constant
kDSStdRecordTypeGroups. Then the GetRecInfo routine calls dsOpenRecord to open the record whose
name and record type match recName and recType.
If dsOpenRecord returns successfully, the GetRecInfo routine calls dsDataNodeAllocateString to
allocate a data node (attrType) containing the constant kDS1AttrPrimaryGroupID. It then calls
dsGetRecordAttributeInfo using attrType to specify which attribute to get information for. The
dsGetRecordAttributeInfo function stores the attribute’sinformation in a tAttributeEntry structure.
To clean up, GetRecInfo calls dsDeallocAttributeEntry to deallocate the memory associated with
pAttrInfo and call dsDataNodeDeAllocate to reclaim the memory asociated with attrType, recName,
and recType.
When the GetRecInfo routine returns, the sample code in Listing 3-2 calls dsCloseDirNode to close the
node that it opened in order to get the information about a record’s attribute.
Listing 3-2 Getting information about a record’s attribute
void main ( )
{
long dirStatus = eDSNoErr;
tDirNodeReference nodeRef = NULL;
dirStatus = dsOpenDirService( &gDirRef );
if ( dirStatus == eDSNoErr )
{
dirStatus = MyOpenDirNode( &nodeRef );
if ( dirStatus == eDSNoErr )
{
GetRecInfo(nodeRef);
dsCloseDirNode( nodeRef );
}
}
if ( gDirRef != NULL )
{
dirStatus = dsCloseDirService( gDirRef );
}
}
void GetRecInfo ( const tDirNodeReference inDirNodeRef )
{
long dirStatus = eDSNoErr;
tRecordReference recRef = NULL;
tAttributeEntryPtr pAttrInfo = NULL;
tDataNodePtr recName = NULL;
tDataNodePtr recType = NULL;
tDataNodePtr attrType = NULL;
recName = dsDataNodeAllocateString( gDirRef, "admin" );
if ( recName != NULL )
{
recType = dsDataNodeAllocateString( gDirRef, kDSStdRecordTypeGroups);
if ( recType != NULL )
{
dirStatus = dsOpenRecord( inDirNodeRef, recType, recName, &recRef
);
36
Getting Information About a Record’s Attribute
2007-01-08 | © 2007 Apple Inc. All Rights Reserved.
CHAPTER 3
Working with Records