diff options
Diffstat (limited to 'mac/tclMacFCmd.c')
-rw-r--r-- | mac/tclMacFCmd.c | 80 |
1 files changed, 10 insertions, 70 deletions
diff --git a/mac/tclMacFCmd.c b/mac/tclMacFCmd.c index e22b365..f1a39b2 100644 --- a/mac/tclMacFCmd.c +++ b/mac/tclMacFCmd.c @@ -9,7 +9,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclMacFCmd.c,v 1.17 2002/04/19 14:18:45 das Exp $ + * RCS: @(#) $Id: tclMacFCmd.c,v 1.18 2002/10/09 11:54:20 das Exp $ */ #include "tclInt.h" @@ -65,6 +65,11 @@ CONST TclFileAttrProcs tclpFileAttrProcs[] = { {GetFileReadOnly, SetFileReadOnly}, {GetFileFinderAttributes, SetFileFinderAttributes}}; +/* + * File specific static data + */ + +static long startSeed = 248923489; /* * Prototypes for procedure only used in this file @@ -87,8 +92,6 @@ static int DoRenameFile _ANSI_ARGS_((CONST char *src, CONST char *dst)); OSErr FSpGetFLockCompat _ANSI_ARGS_((const FSSpec *specPtr, Boolean *lockedPtr)); -static OSErr GenerateUniqueName _ANSI_ARGS_((short vRefNum, - long dirID1, long dirID2, Str31 uniqueName)); static OSErr GetFileSpecs _ANSI_ARGS_((CONST char *path, FSSpec *pathSpecPtr, FSSpec *dirSpecPtr, Boolean *pathExistsPtr, @@ -218,7 +221,7 @@ DoRenameFile( Str31 tmpName; FSSpec tmpFileSpec; - err = GenerateUniqueName(dstFileSpec.vRefNum, + err = GenerateUniqueName(dstFileSpec.vRefNum, &startSeed, dstFileSpec.parID, dstFileSpec.parID, tmpName); if (err == noErr) { err = FSpRenameCompat(&dstFileSpec, tmpName); @@ -334,7 +337,7 @@ MoveRename( * dest directory, and rename temp to target. */ - err = GenerateUniqueName(srcFileSpecPtr->vRefNum, + err = GenerateUniqueName(srcFileSpecPtr->vRefNum, &startSeed, srcFileSpecPtr->parID, dstID, tmpName); FSMakeFSSpecCompat(srcFileSpecPtr->vRefNum, srcFileSpecPtr->parID, tmpName, &tmpSrcFileSpec); @@ -436,7 +439,7 @@ DoCopyFile( * Backup dest file. */ - dstErr = GenerateUniqueName(dstFileSpec.vRefNum, dstFileSpec.parID, + dstErr = GenerateUniqueName(dstFileSpec.vRefNum, &startSeed, dstFileSpec.parID, dstFileSpec.parID, tmpName); if (dstErr == noErr) { dstErr = FSpRenameCompat(&dstFileSpec, tmpName); @@ -707,7 +710,7 @@ DoCopyDirectory( FSpRstFLockCompat(&srcFileSpec); } if (err == noErr) { - err = GenerateUniqueName(dstFileSpec.vRefNum, dstFileSpec.parID, + err = GenerateUniqueName(dstFileSpec.vRefNum, &startSeed, dstFileSpec.parID, dstFileSpec.parID, tmpName); } if (err == noErr) { @@ -934,69 +937,6 @@ DoRemoveDirectory( /* *--------------------------------------------------------------------------- * - * GenerateUniqueName -- - * - * Generate a filename that is not in either of the two specified - * directories (on the same volume). - * - * Results: - * Standard macintosh error. On success, uniqueName is filled with - * the name of the temporary file. - * - * Side effects: - * None. - * - *--------------------------------------------------------------------------- - */ - -static OSErr -GenerateUniqueName( - short vRefNum, /* Volume on which the following directories - * are located. */ - long dirID1, /* ID of first directory. */ - long dirID2, /* ID of second directory. May be the same - * as the first. */ - Str31 uniqueName) /* Filled with filename for a file that is - * not located in either of the above two - * directories. */ -{ - OSErr err; - long i; - CInfoPBRec pb; - static unsigned char hexStr[16] = "0123456789ABCDEF"; - static long startSeed = 248923489; - - pb.hFileInfo.ioVRefNum = vRefNum; - pb.hFileInfo.ioFDirIndex = 0; - pb.hFileInfo.ioNamePtr = uniqueName; - - while (1) { - startSeed++; - pb.hFileInfo.ioNamePtr[0] = 8; - for (i = 1; i <= 8; i++) { - pb.hFileInfo.ioNamePtr[i] = hexStr[((startSeed >> ((8-i)*4)) & 0xf)]; - } - pb.hFileInfo.ioDirID = dirID1; - err = PBGetCatInfoSync(&pb); - if (err == fnfErr) { - if (dirID1 != dirID2) { - pb.hFileInfo.ioDirID = dirID2; - err = PBGetCatInfoSync(&pb); - } - if (err == fnfErr) { - return noErr; - } - } - if (err == noErr) { - continue; - } - return err; - } -} - -/* - *--------------------------------------------------------------------------- - * * GetFileSpecs -- * * Gets FSSpecs for the specified path and its parent directory. |