home *** CD-ROM | disk | FTP | other *** search
- /* e_filelink.c */
- /* 05Sep95 e */
-
- #include <Files.h>
- #include <Aliases.h>
- #include <errno.h>
- #include <sys/stat.h>
- #include <sys/param.h>
- #include "os_mac_str.h"
- #include "os_mac_proto.h"
-
- #if 0
-
- oops, I think MWERKS stat IS lstat
-
- lstat( char *path, struct stat *buf )
- {
- }
-
- #endif
-
- long readlink( char *linkname, char *buffer, long maxlen )
- { FSSpec fss;
- unsigned char pbuf[256];
- OSErr err;
- Boolean isFolder, wasAliased;
- short cur_vol;
- long cur_dir, len = -1;
-
- c_to_p( linkname, pbuf );
- HGetVol( NULL, &cur_vol, &cur_dir );
- err = FSMakeFSSpec( cur_vol, cur_dir, pbuf, &fss );
- if( err == noErr )
- err = ResolveAliasFile( &fss, 1, &isFolder, &wasAliased );
- if( err == noErr && wasAliased )
- {
- len = getfullpath( fss.vRefNum, fss.parID, fss.name, buffer, maxlen, 0 );
- }
- return (len > 0 ) ? len : -1;
- }
-
- char *realpath( char *linkname, char *buffer )
- { FSSpec fss;
- unsigned char pbuf[256];
- OSErr err;
- Boolean wasAliased;
- Boolean isFolder;
- short cur_vol;
- long cur_dir, len;
-
- c_to_p( linkname, pbuf );
- HGetVol( NULL, &cur_vol, &cur_dir );
- err = FSMakeFSSpec( cur_vol, cur_dir, pbuf, &fss );
- if( err == noErr )
- err = ResolveAliasFile( &fss, 1, &isFolder, &wasAliased );
- if( err == noErr )
- { len = getfullpath( fss.vRefNum, fss.parID, fss.name, buffer, MAXPATHLEN, 0 );
- if( len > 0 )
- return buffer;
- }
- return NULL; // error
- }
-
- static unsigned char * cdstr = "\p:";
-
- char *e_getcwd( char *buffer, int size )
- { FSSpec fss;
- OSErr err;
- short cur_vol;
- long cur_dir, len;
-
- HGetVol( NULL, &cur_vol, &cur_dir );
- err = FSMakeFSSpec( cur_vol, cur_dir, cdstr, &fss );
- if( err == noErr )
- { len = getfullpath( fss.vRefNum, fss.parID, fss.name, buffer, size, 0 );
- if( len > 0 )
- return buffer;
- }
- return NULL; // error
- }
-