C H A P T E R 3

Working with Records

if ( dirStatus == eDSNoErr )

{

attrType = dsDataNodeAllocateString(gDirRef, kDS1AttrPrimaryGroupID );

if ( attrType != NULL )

{

dirStatus = dsGetRecordAttributeInfo(recRef, attrType,

&pAttrInfo );

if ( pAttrInfo != NULL )

{

dirStatus = dsDeallocAttributeEntry( gDirRef, pAttrInfo

);

pAttrInfo = NULL;

}

dirStatus = dsDataNodeDeAllocate( gDirRef, attrType ); attrType = NULL;

}

}

dirStatus = dsDataNodeDeAllocate( gDirRef, recType ); recType = NULL;

}

dirStatus = dsDataNodeDeAllocate( gDirRef, recName ); recName = NULL;

}

} // GetRecInfo

Setting the Name of a Record

The sample code in Listing 3-3 demonstrates how to set the name of a record. The sample code opens an Open Directory session and gets an Open Directory reference. Then it calls its MyOpenDirNode routine and passes to it the address of the node reference (nodeRef) that it has allocated. The MyOpenDirNode routine is described in the section “Opening and Closing a Node” (page 28).

The sample code then calls its SetRecordName routine and passes to it the node reference (nodeRef) obtained by calling its MyOpenDirNode routine.

The SetRecordName routine calls dsDataNodeAllocateString to allocate a data node (recName) containing the string “testuser”. This is the current name of the record. Then the SetRecordName routine calls dsDataNodeAllocateString to allocate a data node (recType) that specifies the record type (kDSStdRecordTypeUsers) of the record whose name is to be set.

The SetRecordName routine then calls dsOpenRecord with recName and recType as parameters to specify the record to open. If SetRecordName successfully opens the record, it receives a record reference (recRef). Then SetRecordName calls dsDataNodeAllocateString to allocate a data node (newRecName) containing the string “Robert Smith” (the new name that is it be set). The SetRecordName routine then calls dsSetRecordName to set the record’s new name and dsCloseRecord to close the record. It then cleans up by calling dsDataNodeDeAllocate to reclaim the memory associated with recName, recType, and

newRecName.

When the SetRecordName routine returns, the sample code in Listing 3-3 calls dsCloseDirNode to close the node that it opened in order to set the record’s name.

Setting the Name of a Record

37

2007-01-08 © 2007 Apple Inc. All Rights Reserved.

Page 37
Image 37
Apple OS X manual Setting the Name of a Record