home *** CD-ROM | disk | FTP | other *** search
/ Aminet 6 / Aminet 6 - June 1995.iso / Aminet / dev / gcc / libnixV0_8.lha / gnu / libnix-sources.lha / sources / nix / extra / chmod.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-12-12  |  1.1 KB  |  32 lines

  1. #include <sys/types.h>
  2. #include <sys/stat.h>
  3. #include <dos/dosextens.h>
  4. #ifdef __GNUC__
  5. #include <inline/dos.h>
  6. #endif
  7.  
  8. extern void __seterrno(void);
  9. extern char *__amigapath(const char *path);
  10.  
  11. int chmod(const char *name, mode_t mode)
  12. { int ret;
  13.  
  14. #ifdef IXPATHS
  15.   if((name=__amigapath(name))==NULL)
  16.     return -1;
  17. #endif
  18.  
  19.   if ((ret=~(SetProtection((STRPTR)name,((mode&S_IRUSR?0:FIBF_READ)|
  20.                                          (mode&S_IWUSR?0:FIBF_WRITE|FIBF_DELETE)|
  21.                                          (mode&S_IXUSR?0:FIBF_EXECUTE)|
  22.                                          (mode&S_IRGRP?FIBF_GRP_READ:0)|
  23.                                          (mode&S_IWGRP?FIBF_GRP_WRITE|FIBF_GRP_DELETE:0)|
  24.                                          (mode&S_IXGRP?FIBF_GRP_EXECUTE:0)|
  25.                                          (mode&S_IROTH?FIBF_OTR_READ:0)|
  26.                                          (mode&S_IWOTH?FIBF_OTR_WRITE|FIBF_OTR_DELETE:0)|
  27.                                          (mode&S_IXOTH?FIBF_OTR_EXECUTE:0))))))
  28.     __seterrno();
  29.                               
  30.   return ret;
  31. }
  32.