home *** CD-ROM | disk | FTP | other *** search
- /* Copyright (C) 1984 by Manx Software Systems, Inc. */
-
- #include <quickdraw.h>
- #include <pb.h>
- #include <errno.h>
-
- #define _DEBUG
- #include <max/debug.h>
-
- #ifdef TEST
- #include <stdio.h>
- #endif
-
- long setdir( path, dir, name )
- char * path;
- char * dir;
- char * name;
- {
- CInfoPBRec cpb;
- int err;
-
- splitname( path, dir, name );
-
- #ifdef TEST
- fprintf( stderr, "setdir: \"%s\" \"%s\" \"%s\"\n", name, dir, path );
- #endif
-
- cpb.ioNamePtr = ctop( dir );
-
- cpb.ioVRefNum = 0;
- cpb.ioFDirIndex = 0;
- cpb.u.di.ioDrDirID = 0L;
-
- if ((err = PBGetCatInfo( &cpb, 0 )) != 0 ) {
-
- #ifdef TEST
- fprintf( stderr, "setdir: err %d\n", err );
- #endif
-
- }
-
- ptoc( dir );
-
- #ifdef TEST
- fprintf( stderr, "setdir: path|%s dir|%s name|%s\n",
- path, dir, name );
- #endif
-
- return( cpb.u.di.ioDrDirID );
-
- }
-
- rename(old, new)
- char *old, *new;
- {
- register int i, err;
- long int freeb;
- int vrefnum;
-
- union {
- struct HPrmBlkRec pb;
- struct CMovePBRec cm;
- } pbcm;
-
- char nbuf[64], ndir[64], nname[32];
- char obuf[64], odir[64], oname[32];
-
-
- /* get vRefNum */
- if ( (i=hfixnam(old, obuf)) == 0 ||
- (pbcm.pb.ioVRefNum = hfixnam(new, nbuf)) == 0
- )
- return(-1);
- if (i != pbcm.pb.ioVRefNum) {
- errno = EINVAL;
- return(-1);
- }
-
-
- #ifdef TEST
- fprintf( stderr, "rename: obuf|%s -> nbuf|%s\n", obuf, nbuf );
- #endif
-
- /* get dir refnums, fix path names, get dir name, and name */
- pbcm.cm.ioNewDirID = setdir( nbuf, ndir, nname );
- pbcm.cm.ioDirID = setdir( obuf, odir, oname );
-
- /* use name only */
- if ( pbcm.cm.ioDirID != pbcm.cm.ioNewDirID ) {
- #ifdef TEST
- fprintf( stderr, "rename: catmove\n" );
- fprintf( stderr, "rename: %ld|%s -> %ld|%s\n",
- pbcm.cm.ioDirID, obuf, pbcm.cm.ioNewDirID, ndir );
- #endif
- /* use full path name including volume name */
- pbcm.pb.ioNamePtr = ctop(obuf);
- pbcm.cm.ioNewName = ctop(ndir);
- err = PBCatMove(&pbcm, 0);
- }
- else
- err = 0;
- if (err) {
- if (err == -48)
- err = EEXIST;
- errno = err;
- return(-1);
- }
- else {
- #ifdef TEST
- fprintf( stderr, "rename: rename\n" );
- fprintf( stderr, "rename: %ld|%s -> %ld|%s\n",
- pbcm.cm.ioDirID, oname, pbcm.cm.ioNewDirID, nname);
- #endif
- pbcm.pb.ioNamePtr = ctop(oname);
- pbcm.pb.u.iop.ioVersNum = 0;
- pbcm.pb.u.iop.ioMisc = ctop(nname);
- pbcm.cm.ioDirID = pbcm.cm.ioNewDirID;
- err = PBHRename(&pbcm, 0);
- if (err) {
- if (err == -48)
- err = EEXIST;
- errno = err;
- return(-1);
- }
- else
- return(0);
- }
- }
-
- #ifdef TEST
- #include <errno.h>
-
- main()
- {
- char command[100];
-
- char f1[100], f2[100];
-
- while(gets(command) != NULL) {
- sscanf( command, "%s%s", f1, f2 );
-
- fprintf( stderr, "test: %s %s\n", f1, f2 );
-
- if ( rename( f1, f2 ) == 0 )
- fprintf( stderr, "test: OK\n\n" );
- else
- fprintf( stderr, "test: ERROR %d\n\n", errno );
- }
- }
- #endif
-