home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Applications / Portable Patmos 1.1 / patmos-src / src / rename.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-01-19  |  1.2 KB  |  45 lines  |  [TEXT/KAHL]

  1. #include <sys/types.h>
  2. #include <string.h>
  3. #include <fcntl.h>
  4. #include <errno.h>
  5. #include "crtlocal.h"
  6. #include <Folders.h>
  7.  
  8. static FSSpec *trashID(int volume)
  9.     {
  10.     static FSSpec tempID = {0};
  11.     if (!tempID.parID || (tempID.vRefNum != volume))
  12.         {
  13.         FindFolder(volume,kTrashFolderType,kDontCreateFolder,&tempID.vRefNum,&tempID.parID);
  14.         }
  15.     return &tempID;
  16.     }
  17.  
  18. int rename(const char *old, const char *new)
  19.     {
  20.     int err;
  21.     Str63    junk = "\p____tmp____";
  22.     FSSpec oldspec = hfs_canon(crt_parID, old, 0);
  23.     FSSpec newspec = hfs_canon(crt_parID, new, 0);
  24.     if (!*oldspec.name) return -1;
  25.     if (!*newspec.name) return -1;
  26.     if (!memcmp(&oldspec,&newspec,sizeof(FSSpec))) return 0;
  27.     FSpCatMove(&newspec,trashID(newspec.vRefNum));
  28.     if (oldspec.parID!=newspec.parID)
  29.         {
  30.         CMovePBRec paramBlock;
  31.         err = errtran(FSpRename(&oldspec,junk));
  32.         if (err) return -1;
  33.         memcpy(oldspec.name, junk, 1+*junk);
  34.         paramBlock.ioNamePtr = oldspec.name;
  35.         paramBlock.ioVRefNum = oldspec.vRefNum;
  36.         paramBlock.ioDirID = oldspec.parID;
  37.         paramBlock.ioNewDirID = newspec.parID;
  38.         paramBlock.ioNewName = 0;
  39.         err = errtran(PBCatMoveSync(¶mBlock));
  40.         if (err) return -1;
  41.         oldspec.parID = newspec.parID;
  42.         }
  43.     err = errtran(FSpRename(&oldspec,newspec.name));
  44.     return err?-1:0;
  45.     }