Retired Document
Important: This sample code may not represent best practices for current development. The project may use deprecated symbols and illustrate technologies and techniques that are no longer recommended.
Sources/MoreFiles.c
/* |
File: MoreFiles.c |
Contains: The long lost high-level and FSSpec File Manager functions. |
Version: MoreFiles |
Copyright: © 1992-2002 by Apple Computer, Inc., all rights reserved. |
Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. |
("Apple") in consideration of your agreement to the following terms, and your |
use, installation, modification or redistribution of this Apple software |
constitutes acceptance of these terms. If you do not agree with these terms, |
please do not use, install, modify or redistribute this Apple software. |
In consideration of your agreement to abide by the following terms, and subject |
to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs |
copyrights in this original Apple software (the "Apple Software"), to use, |
reproduce, modify and redistribute the Apple Software, with or without |
modifications, in source and/or binary forms; provided that if you redistribute |
the Apple Software in its entirety and without modifications, you must retain |
this notice and the following text and disclaimers in all such redistributions of |
the Apple Software. Neither the name, trademarks, service marks or logos of |
Apple Computer, Inc. may be used to endorse or promote products derived from the |
Apple Software without specific prior written permission from Apple. Except as |
expressly stated in this notice, no other rights or licenses, express or implied, |
are granted by Apple herein, including but not limited to any patent rights that |
may be infringed by your derivative works or by other works in which the Apple |
Software may be incorporated. |
The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO |
WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED |
WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN |
COMBINATION WITH YOUR PRODUCTS. |
IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR |
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE |
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION |
OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT |
(INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN |
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
File Ownership: |
DRI: Apple Macintosh Developer Technical Support |
Other Contact: Apple Macintosh Developer Technical Support |
<http://developer.apple.com/bugreporter/> |
Technology: DTS Sample Code |
Writers: |
(JL) Jim Luther |
Change History (most recent first): |
<3> 8/23/02 JL [2853901] Updated standard disclaimer. |
<2> 2/7/01 JL Added standard header. Updated names of includes. |
<1> 12/06/99 JL MoreFiles 1.5. |
*/ |
#include <MacTypes.h> |
#include <MacErrors.h> |
#include <Files.h> |
#define __COMPILINGMOREFILES |
#include "MoreFiles.h" |
#include "MoreFilesExtras.h" |
/*****************************************************************************/ |
pascal OSErr HGetVolParms(ConstStr255Param volName, |
short vRefNum, |
GetVolParmsInfoBuffer *volParmsInfo, |
long *infoSize) |
{ |
HParamBlockRec pb; |
OSErr error; |
pb.ioParam.ioNamePtr = (StringPtr)volName; |
pb.ioParam.ioVRefNum = vRefNum; |
pb.ioParam.ioBuffer = (Ptr)volParmsInfo; |
pb.ioParam.ioReqCount = *infoSize; |
error = PBHGetVolParmsSync(&pb); |
if ( error == noErr ) |
{ |
*infoSize = pb.ioParam.ioActCount; |
} |
return ( error ); |
} |
/*****************************************************************************/ |
pascal OSErr HCreateMinimum(short vRefNum, |
long dirID, |
ConstStr255Param fileName) |
{ |
HParamBlockRec pb; |
pb.fileParam.ioNamePtr = (StringPtr)fileName; |
pb.fileParam.ioVRefNum = vRefNum; |
pb.ioParam.ioVersNum = 0; |
pb.fileParam.ioDirID = dirID; |
return ( PBHCreateSync(&pb) ); |
} |
/*****************************************************************************/ |
pascal OSErr FSpCreateMinimum(const FSSpec *spec) |
{ |
return ( HCreateMinimum(spec->vRefNum, spec->parID, spec->name) ); |
} |
/*****************************************************************************/ |
pascal OSErr ExchangeFiles(short vRefNum, |
long srcDirID, |
ConstStr255Param srcName, |
long dstDirID, |
ConstStr255Param dstName) |
{ |
HParamBlockRec pb; |
pb.fidParam.ioVRefNum = vRefNum; |
pb.fidParam.ioSrcDirID = srcDirID; |
pb.fidParam.ioNamePtr = (StringPtr)srcName; |
pb.fidParam.ioDestDirID = dstDirID; |
pb.fidParam.ioDestNamePtr = (StringPtr)dstName; |
return ( PBExchangeFilesSync(&pb) ); |
} |
/*****************************************************************************/ |
pascal OSErr ResolveFileIDRef(ConstStr255Param volName, |
short vRefNum, |
long fileID, |
long *parID, |
StringPtr fileName) |
{ |
HParamBlockRec pb; |
OSErr error; |
Str255 tempStr; |
tempStr[0] = 0; |
if ( volName != NULL ) |
{ |
BlockMoveData(volName, tempStr, volName[0] + 1); |
} |
pb.fidParam.ioNamePtr = (StringPtr)tempStr; |
pb.fidParam.ioVRefNum = vRefNum; |
pb.fidParam.ioFileID = fileID; |
error = PBResolveFileIDRefSync(&pb); |
if ( error == noErr ) |
{ |
*parID = pb.fidParam.ioSrcDirID; |
if ( fileName != NULL ) |
{ |
BlockMoveData(tempStr, fileName, tempStr[0] + 1); |
} |
} |
return ( error ); |
} |
/*****************************************************************************/ |
pascal OSErr FSpResolveFileIDRef(ConstStr255Param volName, |
short vRefNum, |
long fileID, |
FSSpec *spec) |
{ |
OSErr error; |
error = DetermineVRefNum(volName, vRefNum, &(spec->vRefNum)); |
if ( error == noErr ) |
{ |
error = ResolveFileIDRef(volName, vRefNum, fileID, &(spec->parID), spec->name); |
} |
return ( error ); |
} |
/*****************************************************************************/ |
pascal OSErr CreateFileIDRef(short vRefNum, |
long parID, |
ConstStr255Param fileName, |
long *fileID) |
{ |
HParamBlockRec pb; |
OSErr error; |
pb.fidParam.ioNamePtr = (StringPtr)fileName; |
pb.fidParam.ioVRefNum = vRefNum; |
pb.fidParam.ioSrcDirID = parID; |
error = PBCreateFileIDRefSync(&pb); |
if ( (error == noErr) || (error == fidExists) || (error == afpIDExists) ) |
{ |
*fileID = pb.fidParam.ioFileID; |
} |
return ( error ); |
} |
/*****************************************************************************/ |
pascal OSErr FSpCreateFileIDRef(const FSSpec *spec, |
long *fileID) |
{ |
return ( CreateFileIDRef(spec->vRefNum, spec->parID, spec->name, fileID) ); |
} |
/*****************************************************************************/ |
pascal OSErr DeleteFileIDRef(ConstStr255Param volName, |
short vRefNum, |
long fileID) |
{ |
HParamBlockRec pb; |
pb.fidParam.ioNamePtr = (StringPtr)volName; |
pb.fidParam.ioVRefNum = vRefNum; |
pb.fidParam.ioFileID = fileID; |
return ( PBDeleteFileIDRefSync(&pb) ); |
} |
/*****************************************************************************/ |
pascal OSErr FlushFile(short refNum) |
{ |
ParamBlockRec pb; |
pb.ioParam.ioRefNum = refNum; |
return ( PBFlushFileSync(&pb) ); |
} |
/*****************************************************************************/ |
pascal OSErr LockRange(short refNum, |
long rangeLength, |
long rangeStart) |
{ |
ParamBlockRec pb; |
pb.ioParam.ioRefNum = refNum; |
pb.ioParam.ioReqCount = rangeLength; |
pb.ioParam.ioPosMode = fsFromStart; |
pb.ioParam.ioPosOffset = rangeStart; |
return ( PBLockRangeSync(&pb) ); |
} |
/*****************************************************************************/ |
pascal OSErr UnlockRange(short refNum, |
long rangeLength, |
long rangeStart) |
{ |
ParamBlockRec pb; |
pb.ioParam.ioRefNum = refNum; |
pb.ioParam.ioReqCount = rangeLength; |
pb.ioParam.ioPosMode = fsFromStart; |
pb.ioParam.ioPosOffset = rangeStart; |
return ( PBUnlockRangeSync(&pb) ); |
} |
/*****************************************************************************/ |
pascal OSErr GetForeignPrivs(short vRefNum, |
long dirID, |
ConstStr255Param name, |
void *foreignPrivBuffer, |
long *foreignPrivSize, |
long *foreignPrivInfo1, |
long *foreignPrivInfo2, |
long *foreignPrivInfo3, |
long *foreignPrivInfo4) |
{ |
HParamBlockRec pb; |
OSErr error; |
pb.foreignPrivParam.ioNamePtr = (StringPtr)name; |
pb.foreignPrivParam.ioVRefNum = vRefNum; |
pb.foreignPrivParam.ioForeignPrivDirID = dirID; |
pb.foreignPrivParam.ioForeignPrivBuffer = (Ptr)foreignPrivBuffer; |
pb.foreignPrivParam.ioForeignPrivReqCount = *foreignPrivSize; |
error = PBGetForeignPrivsSync(&pb); |
*foreignPrivSize = pb.foreignPrivParam.ioForeignPrivActCount; |
*foreignPrivInfo1 = pb.foreignPrivParam.ioForeignPrivInfo1; |
*foreignPrivInfo2 = pb.foreignPrivParam.ioForeignPrivInfo2; |
*foreignPrivInfo3 = pb.foreignPrivParam.ioForeignPrivInfo3; |
*foreignPrivInfo4 = pb.foreignPrivParam.ioForeignPrivInfo4; |
return ( error ); |
} |
/*****************************************************************************/ |
pascal OSErr FSpGetForeignPrivs(const FSSpec *spec, |
void *foreignPrivBuffer, |
long *foreignPrivSize, |
long *foreignPrivInfo1, |
long *foreignPrivInfo2, |
long *foreignPrivInfo3, |
long *foreignPrivInfo4) |
{ |
return ( GetForeignPrivs(spec->vRefNum, spec->parID, spec->name, |
foreignPrivBuffer, foreignPrivSize, |
foreignPrivInfo1, foreignPrivInfo2, |
foreignPrivInfo3, foreignPrivInfo4) ); |
} |
/*****************************************************************************/ |
pascal OSErr SetForeignPrivs(short vRefNum, |
long dirID, |
ConstStr255Param name, |
const void *foreignPrivBuffer, |
long *foreignPrivSize, |
long foreignPrivInfo1, |
long foreignPrivInfo2, |
long foreignPrivInfo3, |
long foreignPrivInfo4) |
{ |
HParamBlockRec pb; |
OSErr error; |
pb.foreignPrivParam.ioNamePtr = (StringPtr)name; |
pb.foreignPrivParam.ioVRefNum = vRefNum; |
pb.foreignPrivParam.ioForeignPrivDirID = dirID; |
pb.foreignPrivParam.ioForeignPrivBuffer = (Ptr)foreignPrivBuffer; |
pb.foreignPrivParam.ioForeignPrivReqCount = *foreignPrivSize; |
pb.foreignPrivParam.ioForeignPrivInfo1 = foreignPrivInfo1; |
pb.foreignPrivParam.ioForeignPrivInfo2 = foreignPrivInfo2; |
pb.foreignPrivParam.ioForeignPrivInfo3 = foreignPrivInfo3; |
pb.foreignPrivParam.ioForeignPrivInfo4 = foreignPrivInfo4; |
error = PBSetForeignPrivsSync(&pb); |
if ( error == noErr ) |
{ |
*foreignPrivSize = pb.foreignPrivParam.ioForeignPrivActCount; |
} |
return ( error ); |
} |
/*****************************************************************************/ |
pascal OSErr FSpSetForeignPrivs(const FSSpec *spec, |
const void *foreignPrivBuffer, |
long *foreignPrivSize, |
long foreignPrivInfo1, |
long foreignPrivInfo2, |
long foreignPrivInfo3, |
long foreignPrivInfo4) |
{ |
return ( SetForeignPrivs(spec->vRefNum, spec->parID, spec->name, |
foreignPrivBuffer, foreignPrivSize, |
foreignPrivInfo1, foreignPrivInfo2, |
foreignPrivInfo3, foreignPrivInfo4) ); |
} |
/*****************************************************************************/ |
pascal OSErr HGetLogInInfo(ConstStr255Param volName, |
short vRefNum, |
short *loginMethod, |
StringPtr userName) |
{ |
HParamBlockRec pb; |
OSErr error; |
pb.objParam.ioNamePtr = (StringPtr)volName; |
pb.objParam.ioVRefNum = vRefNum; |
pb.objParam.ioObjNamePtr = userName; |
error = PBHGetLogInInfoSync(&pb); |
if ( error == noErr ) |
{ |
*loginMethod = pb.objParam.ioObjType; |
} |
return ( error ); |
} |
/*****************************************************************************/ |
pascal OSErr HGetDirAccess(short vRefNum, |
long dirID, |
ConstStr255Param name, |
long *ownerID, |
long *groupID, |
long *accessRights) |
{ |
HParamBlockRec pb; |
OSErr error; |
pb.accessParam.ioNamePtr = (StringPtr)name; |
pb.accessParam.ioVRefNum = vRefNum; |
pb.fileParam.ioDirID = dirID; |
error = PBHGetDirAccessSync(&pb); |
if ( error == noErr ) |
{ |
*ownerID = pb.accessParam.ioACOwnerID; |
*groupID = pb.accessParam.ioACGroupID; |
*accessRights = pb.accessParam.ioACAccess; |
} |
return ( error ); |
} |
/*****************************************************************************/ |
pascal OSErr FSpGetDirAccess(const FSSpec *spec, |
long *ownerID, |
long *groupID, |
long *accessRights) |
{ |
return ( HGetDirAccess(spec->vRefNum, spec->parID, spec->name, |
ownerID, groupID, accessRights) ); |
} |
/*****************************************************************************/ |
pascal OSErr HSetDirAccess(short vRefNum, |
long dirID, |
ConstStr255Param name, |
long ownerID, |
long groupID, |
long accessRights) |
{ |
HParamBlockRec pb; |
pb.accessParam.ioNamePtr = (StringPtr)name; |
pb.accessParam.ioVRefNum = vRefNum; |
pb.fileParam.ioDirID = dirID; |
pb.accessParam.ioACOwnerID = ownerID; |
pb.accessParam.ioACGroupID = groupID; |
pb.accessParam.ioACAccess = accessRights; |
return ( PBHSetDirAccessSync(&pb) ); |
} |
/*****************************************************************************/ |
pascal OSErr FSpSetDirAccess(const FSSpec *spec, |
long ownerID, |
long groupID, |
long accessRights) |
{ |
return ( HSetDirAccess(spec->vRefNum, spec->parID, spec->name, |
ownerID, groupID, accessRights) ); |
} |
/*****************************************************************************/ |
pascal OSErr HMapID(ConstStr255Param volName, |
short vRefNum, |
long ugID, |
short objType, |
StringPtr name) |
{ |
HParamBlockRec pb; |
pb.objParam.ioNamePtr = (StringPtr)volName; |
pb.objParam.ioVRefNum = vRefNum; |
pb.objParam.ioObjType = objType; |
pb.objParam.ioObjNamePtr = name; |
pb.objParam.ioObjID = ugID; |
return ( PBHMapIDSync(&pb) ); |
} |
/*****************************************************************************/ |
pascal OSErr HMapName(ConstStr255Param volName, |
short vRefNum, |
ConstStr255Param name, |
short objType, |
long *ugID) |
{ |
HParamBlockRec pb; |
OSErr error; |
pb.objParam.ioNamePtr = (StringPtr)volName; |
pb.objParam.ioVRefNum = vRefNum; |
pb.objParam.ioObjType = objType; |
pb.objParam.ioObjNamePtr = (StringPtr)name; |
error = PBHMapNameSync(&pb); |
if ( error == noErr ) |
{ |
*ugID = pb.objParam.ioObjID; |
} |
return ( error ); |
} |
/*****************************************************************************/ |
pascal OSErr HCopyFile(short srcVRefNum, |
long srcDirID, |
ConstStr255Param srcName, |
short dstVRefNum, |
long dstDirID, |
ConstStr255Param dstPathname, |
ConstStr255Param copyName) |
{ |
HParamBlockRec pb; |
pb.copyParam.ioVRefNum = srcVRefNum; |
pb.copyParam.ioDirID = srcDirID; |
pb.copyParam.ioNamePtr = (StringPtr)srcName; |
pb.copyParam.ioDstVRefNum = dstVRefNum; |
pb.copyParam.ioNewDirID = dstDirID; |
pb.copyParam.ioNewName = (StringPtr)dstPathname; |
pb.copyParam.ioCopyName = (StringPtr)copyName; |
return ( PBHCopyFileSync(&pb) ); |
} |
/*****************************************************************************/ |
pascal OSErr FSpCopyFile(const FSSpec *srcSpec, |
const FSSpec *dstSpec, |
ConstStr255Param copyName) |
{ |
return ( HCopyFile(srcSpec->vRefNum, srcSpec->parID, srcSpec->name, |
dstSpec->vRefNum, dstSpec->parID, |
dstSpec->name, copyName) ); |
} |
/*****************************************************************************/ |
pascal OSErr HMoveRename(short vRefNum, |
long srcDirID, |
ConstStr255Param srcName, |
long dstDirID, |
ConstStr255Param dstpathName, |
ConstStr255Param copyName) |
{ |
HParamBlockRec pb; |
pb.copyParam.ioVRefNum = vRefNum; |
pb.copyParam.ioDirID = srcDirID; |
pb.copyParam.ioNamePtr = (StringPtr)srcName; |
pb.copyParam.ioNewDirID = dstDirID; |
pb.copyParam.ioNewName = (StringPtr)dstpathName; |
pb.copyParam.ioCopyName = (StringPtr)copyName; |
return ( PBHMoveRenameSync(&pb) ); |
} |
/*****************************************************************************/ |
pascal OSErr FSpMoveRename(const FSSpec *srcSpec, |
const FSSpec *dstSpec, |
ConstStr255Param copyName) |
{ |
OSErr error; |
/* make sure the FSSpecs refer to the same volume */ |
if ( srcSpec->vRefNum != dstSpec->vRefNum ) |
{ |
error = diffVolErr; |
} |
else |
{ |
error = HMoveRename(srcSpec->vRefNum, srcSpec->parID, srcSpec->name, |
dstSpec->parID, dstSpec->name, copyName); |
} |
return ( error ); |
} |
/*****************************************************************************/ |
pascal OSErr GetVolMountInfoSize(ConstStr255Param volName, |
short vRefNum, |
short *size) |
{ |
ParamBlockRec pb; |
pb.ioParam.ioNamePtr = (StringPtr)volName; |
pb.ioParam.ioVRefNum = vRefNum; |
pb.ioParam.ioBuffer = (Ptr)size; |
return ( PBGetVolMountInfoSize(&pb) ); |
} |
/*****************************************************************************/ |
pascal OSErr GetVolMountInfo(ConstStr255Param volName, |
short vRefNum, |
void *volMountInfo) |
{ |
ParamBlockRec pb; |
pb.ioParam.ioNamePtr = (StringPtr)volName; |
pb.ioParam.ioVRefNum = vRefNum; |
pb.ioParam.ioBuffer = (Ptr)volMountInfo; |
return ( PBGetVolMountInfo(&pb) ); |
} |
/*****************************************************************************/ |
pascal OSErr VolumeMount(const void *volMountInfo, |
short *vRefNum) |
{ |
ParamBlockRec pb; |
OSErr error; |
pb.ioParam.ioBuffer = (Ptr)volMountInfo; |
error = PBVolumeMount(&pb); |
if ( error == noErr ) |
{ |
*vRefNum = pb.ioParam.ioVRefNum; |
} |
return ( error ); |
} |
/*****************************************************************************/ |
pascal OSErr Share(short vRefNum, |
long dirID, |
ConstStr255Param name) |
{ |
HParamBlockRec pb; |
pb.fileParam.ioNamePtr = (StringPtr)name; |
pb.fileParam.ioVRefNum = vRefNum; |
pb.fileParam.ioDirID = dirID; |
return ( PBShareSync(&pb) ); |
} |
/*****************************************************************************/ |
pascal OSErr FSpShare(const FSSpec *spec) |
{ |
return ( Share(spec->vRefNum, spec->parID, spec->name) ); |
} |
/*****************************************************************************/ |
pascal OSErr Unshare(short vRefNum, |
long dirID, |
ConstStr255Param name) |
{ |
HParamBlockRec pb; |
pb.fileParam.ioNamePtr = (StringPtr)name; |
pb.fileParam.ioVRefNum = vRefNum; |
pb.fileParam.ioDirID = dirID; |
return ( PBUnshareSync(&pb) ); |
} |
/*****************************************************************************/ |
pascal OSErr FSpUnshare(const FSSpec *spec) |
{ |
return ( Unshare(spec->vRefNum, spec->parID, spec->name) ); |
} |
/*****************************************************************************/ |
pascal OSErr GetUGEntry(short objType, |
StringPtr objName, |
long *objID) |
{ |
HParamBlockRec pb; |
OSErr error; |
pb.objParam.ioObjType = objType; |
pb.objParam.ioObjNamePtr = objName; |
pb.objParam.ioObjID = *objID; |
error = PBGetUGEntrySync(&pb); |
if ( error == noErr ) |
{ |
*objID = pb.objParam.ioObjID; |
} |
return ( error ); |
} |
/*****************************************************************************/ |
Copyright © 2003 Apple Computer, Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2003-01-14