home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Source Code / C / Applications / Moscow ML 1.42 / e_mac / e_filelink.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-05-18  |  1.8 KB  |  81 lines  |  [TEXT/CWIE]

  1. /* e_filelink.c */
  2. /* 05Sep95 e */
  3.  
  4. #include <Files.h>
  5. #include <Aliases.h>
  6. #include <errno.h>
  7. #include <sys/stat.h>
  8. #include <sys/param.h>
  9. #include "os_mac_str.h"
  10. #include "os_mac_proto.h"
  11.  
  12. #if 0
  13.  
  14. oops, I think MWERKS stat IS lstat
  15.  
  16. lstat( char *path, struct stat *buf )
  17. {
  18. }
  19.  
  20. #endif
  21.  
  22. long readlink( char *linkname, char *buffer, long maxlen )
  23. { FSSpec fss;
  24.   unsigned char pbuf[256];
  25.   OSErr err;
  26.   Boolean isFolder, wasAliased;
  27.   short cur_vol;
  28.   long cur_dir, len = -1;
  29.  
  30.   c_to_p( linkname, pbuf );
  31.   HGetVol( NULL, &cur_vol, &cur_dir );
  32.   err = FSMakeFSSpec( cur_vol, cur_dir, pbuf, &fss );
  33.   if( err == noErr )
  34.     err =  ResolveAliasFile( &fss, 1, &isFolder, &wasAliased );
  35.   if( err == noErr && wasAliased )
  36.   {
  37.     len = getfullpath( fss.vRefNum, fss.parID, fss.name, buffer, maxlen, 0 );
  38.   }
  39.   return (len > 0 ) ? len : -1;
  40. }
  41.  
  42. char *realpath( char *linkname, char *buffer )
  43. { FSSpec fss;
  44.   unsigned char pbuf[256];
  45.   OSErr err;
  46.   Boolean wasAliased;
  47.   Boolean isFolder;
  48.   short cur_vol;
  49.   long cur_dir, len;
  50.  
  51.   c_to_p( linkname, pbuf );
  52.   HGetVol( NULL, &cur_vol, &cur_dir );
  53.   err = FSMakeFSSpec( cur_vol, cur_dir, pbuf, &fss );
  54.   if( err == noErr )
  55.     err =  ResolveAliasFile( &fss, 1, &isFolder, &wasAliased );
  56.   if( err == noErr )
  57.   { len = getfullpath( fss.vRefNum, fss.parID, fss.name, buffer, MAXPATHLEN, 0 );
  58.     if( len > 0 )
  59.         return buffer;
  60.   }
  61.   return NULL; // error
  62. }
  63.  
  64. static unsigned char * cdstr = "\p:";
  65.  
  66. char *e_getcwd( char *buffer, int size )
  67. { FSSpec fss;
  68.   OSErr err;
  69.   short cur_vol;
  70.   long cur_dir, len;
  71.  
  72.   HGetVol( NULL, &cur_vol, &cur_dir );
  73.   err = FSMakeFSSpec( cur_vol, cur_dir, cdstr, &fss );
  74.   if( err == noErr )
  75.   { len = getfullpath( fss.vRefNum, fss.parID, fss.name, buffer, size, 0 );
  76.     if( len > 0 )
  77.         return buffer;
  78.   }
  79.   return NULL; // error
  80. }
  81.