@@ -54,10 +54,17 @@ #ifdef OF_NINTENDO_DS # include # include #endif + +#ifdef OF_AMIGAOS +# ifdef OF_AMIGAOS3 +# define INTUITION_CLASSES_H +# endif +# include +#endif #ifndef O_BINARY # define O_BINARY 0 #endif #ifndef O_CLOEXEC @@ -68,11 +75,11 @@ #endif #ifndef O_EXLOCK # define O_EXLOCK 0 #endif -#ifndef OF_MORPHOS +#ifndef OF_AMIGAOS # define closeHandle(h) close(h) #else struct of_file_handle { of_file_handle_t previous, next; BPTR handle; @@ -101,11 +108,11 @@ iter = iter->next) Close(iter->handle); } #endif -#ifndef OF_MORPHOS +#ifndef OF_AMIGAOS static int parseMode(const char *mode) { if (strcmp(mode, "r") == 0) return O_RDONLY; @@ -207,11 +214,11 @@ @try { void *pool = objc_autoreleasePoolPush(); int flags; -#ifndef OF_MORPHOS +#ifndef OF_AMIGAOS if ((flags = parseMode([mode UTF8String])) == -1) @throw [OFInvalidArgumentException exception]; flags |= O_BINARY | O_CLOEXEC; @@ -268,12 +275,16 @@ mode: mode errNo: errNo]; } if (handle->append) { +# ifdef OF_MORPHOS if (Seek64(handle->handle, 0, OFFSET_END) == -1) { +# else + if (Seek(handle->handle, 0, OFFSET_END) == -1) { +# endif Close(handle->handle); @throw [OFOpenItemFailedException exceptionWithPath: path mode: mode errNo: EIO]; @@ -361,11 +372,11 @@ if ((ret = read(_handle, buffer, (unsigned int)length)) < 0) @throw [OFReadFailedException exceptionWithObject: self requestedLength: length errNo: errno]; -#elif defined(OF_MORPHOS) +#elif defined(OF_AMIGAOS) if (length > LONG_MAX) @throw [OFOutOfRangeException exception]; if ((ret = Read(_handle->handle, buffer, length)) < 0) @throw [OFReadFailedException exceptionWithObject: self @@ -399,18 +410,22 @@ if ((bytesWritten = write(_handle, buffer, (int)length)) < 0) @throw [OFWriteFailedException exceptionWithObject: self requestedLength: length bytesWritten: 0 errNo: errno]; -#elif defined(OF_MORPHOS) +#elif defined(OF_AMIGAOS) LONG bytesWritten; if (length > LONG_MAX) @throw [OFOutOfRangeException exception]; if (_handle->append) { +# ifdef OF_MORPHOS if (Seek64(_handle->handle, 0, OFFSET_END) == -1) +# else + if (Seek(_handle->handle, 0, OFFSET_END) == -1) +# endif @throw [OFWriteFailedException exceptionWithObject: self requestedLength: length bytesWritten: 0 errNo: EIO]; @@ -443,11 +458,11 @@ of_offset_t ret; if (_handle == OF_INVALID_FILE_HANDLE) @throw [OFNotOpenException exceptionWithObject: self]; -#ifndef OF_MORPHOS +#ifndef OF_AMIGAOS # if defined(OF_WINDOWS) ret = _lseeki64(_handle, offset, whence); # elif defined(OF_HAVE_OFF64_T) ret = lseek64(_handle, offset, whence); # else @@ -458,26 +473,34 @@ @throw [OFSeekFailedException exceptionWithStream: self offset: offset whence: whence errNo: errno]; #else + LONG translatedWhence; + switch (whence) { case SEEK_SET: - ret = Seek64(_handle->handle, offset, OFFSET_BEGINNING); + translatedWhence = OFFSET_BEGINNING; break; case SEEK_CUR: - ret = Seek64(_handle->handle, offset, OFFSET_CURRENT); + translatedWhence = OFFSET_CURRENT; break; case SEEK_END: - ret = Seek64(_handle->handle, offset, OFFSET_END); + translatedWhence = OFFSET_END; break; default: - ret = -1; - break; + @throw [OFSeekFailedException exceptionWithStream: self + offset: offset + whence: whence + errNo: EINVAL]; } - if (ret == -1) +# ifdef OF_MORPHOS + if ((ret = Seek64(_handle->handle, offset, translatedWhence)) == 1) +# else + if ((ret = Seek(_handle->handle, offset, translatedWhence)) == 1) +# endif @throw [OFSeekFailedException exceptionWithStream: self offset: offset whence: whence errNo: EINVAL]; #endif