ResKnife/External/MoreFiles/MoreFiles.c
2002-03-29 14:59:03 +00:00

1 line
17 KiB
C
Executable File

/*
File: MoreFiles.c
Contains: The long lost high-level and FSSpec File Manager functions.
Version: MoreFiles
Copyright: © 1992-2001 by Apple Computer, Inc., all rights reserved.
You may incorporate this sample code into your applications without
restriction, though the sample code has been provided "AS IS" and the
responsibility for its operation is 100% yours. However, what you are
not permitted to do is to redistribute the source as "DSC Sample Code"
after having made changes. If you're going to re-distribute the source,
we require that you make it clear in the source that the code was
descended from Apple Sample Code, but that you've made changes.
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):
<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 );
}
/*****************************************************************************/