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
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
Setting the Name of a Record | 37 |