home *** CD-ROM | disk | FTP | other *** search
- #include "amiga.h"
- #include "files.h"
- #include <amiga/ioctl.h>
-
- static int delete_open_file(char *name)
- {
- BPTR nlock = Lock(name, SHARED_LOCK);
-
- if (nlock)
- {
- int err = errno, i;
-
- i = _last_fd();
- while (--i >= 0)
- if (ioctl(i, _AMIGA_DELETE_IF_ME, &nlock) == 0)
- {
- errno = err;
- return 0;
- }
- UnLock(nlock);
- }
- return -1;
- }
-
- int unlink(char *file)
- {
- long err;
-
- chkabort();
- if (DeleteFile(file)) return 0;
- err = IoErr();
- if (err == ERROR_DELETE_PROTECTED)
- {
- if (SetProtection(file, 0) && DeleteFile(file)) return 0;
- err = IoErr();
- }
- if (err == ERROR_OBJECT_IN_USE && delete_open_file(file) == 0) return 0;
- errno = convert_oserr(err);
- return -1;
- }
-