Use SDL_RWops

This commit is contained in:
Joshua Granick
2015-02-04 10:46:28 -08:00
parent 5fce030485
commit f7ec042ce5
9 changed files with 190 additions and 42 deletions

View File

@@ -145,7 +145,7 @@ namespace lime {
ByteArray ByteArray::FromFile(const OSChar *inFilename)
{
FILE *file = lime::fopen (inFilename, "rb");
FILE_HANDLE *file = lime::fopen (inFilename, "rb");
if (!file)
{
#ifdef ANDROID
@@ -170,7 +170,7 @@ value lime_byte_array_overwrite_file(value inFilename, value inBytes) {
// file is created if it doesn't exist,
// if it exists, it is truncated to zero
FILE *file = lime::fopen (val_os_string(inFilename), "wb");
FILE_HANDLE *file = lime::fopen (val_os_string(inFilename), "wb");
if (!file)
{
#ifdef ANDROID

View File

@@ -8,24 +8,48 @@
namespace lime {
int fclose (FILE *stream) {
FILE* FILE_HANDLE::getFile () {
return ::fclose (stream);
return (FILE*)handle;
}
FILE *fdopen (int fd, const char *mode) {
int fclose (FILE_HANDLE *stream) {
return ::fdopen (fd, mode);
if (stream) {
int value = ::fclose ((FILE*)stream->handle);
if (stream) delete stream;
return value;
}
return 0;
}
FILE* fopen (const char *filename, const char *mode) {
FILE_HANDLE *fdopen (int fd, const char *mode) {
FILE* result = ::fdopen (fd, mode);
if (result) {
return new FILE_HANDLE (result);
}
return NULL;
}
FILE_HANDLE *fopen (const char *filename, const char *mode) {
FILE* result;
#ifdef HX_MACOS
FILE *result = ::fopen (filename, "rb");
result = ::fopen (filename, "rb");
if (!result) {
CFStringRef str = CFStringCreateWithCString (NULL, filename, kCFStringEncodingUTF8);
CFURLRef path = CFBundleCopyResourceURL (CFBundleGetMainBundle (), str, NULL, NULL);
@@ -42,38 +66,45 @@ namespace lime {
CFRelease (path);
}
}
return result;
#else
return ::fopen (filename, mode);
result = ::fopen (filename, mode);
#endif
}
size_t fread (void *ptr, size_t size, size_t count, FILE *stream) {
if (result) {
return new FILE_HANDLE (result);
}
return ::fread (ptr, size, count, stream);
return NULL;
}
int fseek (FILE *stream, long int offset, int origin) {
size_t fread (void *ptr, size_t size, size_t count, FILE_HANDLE *stream) {
return ::fseek (stream, offset, origin);
return ::fread (ptr, size, count, stream ? (FILE*)stream->handle : NULL);
}
long int ftell (FILE *stream) {
int fseek (FILE_HANDLE *stream, long int offset, int origin) {
return ::ftell (stream);
return ::fseek (stream ? (FILE*)stream->handle : NULL, offset, origin);
}
size_t fwrite (const void *ptr, size_t size, size_t count, FILE *stream) {
long int ftell (FILE_HANDLE *stream) {
return ::fwrite (ptr, size, count, stream);
return ::ftell (stream ? (FILE*)stream->handle : NULL);
}
size_t fwrite (const void *ptr, size_t size, size_t count, FILE_HANDLE *stream) {
return ::fwrite (ptr, size, count, (FILE*)stream->handle);
}