int stat(const char *name,struct stat *buf) { APTR oldwin,*wptr=&((struct Process *)FindTask(NULL))->pr_WindowPtr; struct FileInfoBlock *fib; BPTR lock; int ret=-1; #ifdef IXPATHS if((name=__amigapath(name))==NULL) return -1; #endif /* avoid possible dos-requesters ;-( */ oldwin=*wptr; *wptr=(APTR)ret; if((lock=Lock((STRPTR)name,SHARED_LOCK))!=0) { if((fib=(struct FileInfoBlock *)AllocDosObject(DOS_FIB,NULL))!=NULL) { if(Examine(lock,fib)!=DOSFALSE) ret=__stat(buf,fib); else __seterrno(); FreeDosObject(DOS_FIB,fib); } else __seterrno(); UnLock(lock); } else __seterrno(); *wptr=oldwin; return ret; }
__END_DECLS int chmod(const char *name, mode_t mode) { int ret; if((name=__amigapath(name))==NULL) return -1; if ((ret=~(SetProtection((STRPTR)name,((mode&S_IRUSR?0:FIBF_READ)| (mode&S_IWUSR?0:FIBF_WRITE|FIBF_DELETE)| (mode&S_IXUSR?0:FIBF_EXECUTE)| (mode&S_IRGRP?FIBF_GRP_READ:0)| (mode&S_IWGRP?FIBF_GRP_WRITE|FIBF_GRP_DELETE:0)| (mode&S_IXGRP?FIBF_GRP_EXECUTE:0)| (mode&S_IROTH?FIBF_OTR_READ:0)| (mode&S_IWOTH?FIBF_OTR_WRITE|FIBF_OTR_DELETE:0)| (mode&S_IXOTH?FIBF_OTR_EXECUTE:0)))))) __seterrno(); return ret; }
int open(const char *path,int flags,...) { extern char *__amigapath(const char *path); StdFileDes *sfd; #ifdef IXPATHS if((path=__amigapath(path))==NULL) return -1; #endif if ((sfd=_allocfd())) { sfd->lx_sys=0; sfd->lx_oflags=flags; if ((sfd->lx_fh=Open((char *)path,flags&O_TRUNC?MODE_NEWFILE: flags&(O_WRONLY|O_RDWR)?MODE_READWRITE:MODE_OLDFILE))) { _setup_file(sfd); return sfd->lx_pos; } __seterrno(); sfd->lx_inuse = 0; } return -1; }