diff -r 000000000000 -r 6474c204b198 gfx/skia/trunk/src/utils/ios/SkOSFile_iOS.mm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gfx/skia/trunk/src/utils/ios/SkOSFile_iOS.mm Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,98 @@ +/* + * Copyright 2010 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include +#include "SkOSFile.h" +#include "SkString.h" + +struct SkFILE { + NSData* fData; + size_t fOffset; + size_t fLength; +}; + +SkFILE* sk_fopen(const char cpath[], SkFILE_Flags flags) { + if (flags & kWrite_SkFILE_Flag) { + return NULL; + } + + SkString cname, csuffix; + + const char* start = strrchr(cpath, '/'); + if (NULL == start) { + start = cpath; + } else { + start += 1; + } + const char* stop = strrchr(cpath, '.'); + if (NULL == stop) { + return NULL; + } else { + stop += 1; + } + + cname.set(start, stop - start - 1); + csuffix.set(stop); + + NSBundle* bundle = [NSBundle mainBundle]; + NSString* name = [NSString stringWithUTF8String:cname.c_str()]; + NSString* suffix = [NSString stringWithUTF8String:csuffix.c_str()]; + NSString* path = [bundle pathForResource:name ofType:suffix]; + NSData* data = [NSData dataWithContentsOfMappedFile:path]; + + if (data) { + [data retain]; + SkFILE* rec = new SkFILE; + rec->fData = data; + rec->fOffset = 0; + rec->fLength = [data length]; + return reinterpret_cast(rec); + } + return NULL; +} + +size_t sk_fgetsize(SkFILE* rec) { + SkASSERT(rec); + return rec->fLength; +} + +bool sk_frewind(SkFILE* rec) { + SkASSERT(rec); + rec->fOffset = 0; + return true; +} + +size_t sk_fread(void* buffer, size_t byteCount, SkFILE* rec) { + if (NULL == buffer) { + return rec->fLength; + } else { + size_t remaining = rec->fLength - rec->fOffset; + if (byteCount > remaining) { + byteCount = remaining; + } + memcpy(buffer, (char*)[rec->fData bytes] + rec->fOffset, byteCount); + rec->fOffset += byteCount; + SkASSERT(rec->fOffset <= rec->fLength); + return byteCount; + } +} + +size_t sk_fwrite(const void* buffer, size_t byteCount, SkFILE* f) { + SkDEBUGFAIL("Not supported yet"); + return 0; +} + +void sk_fflush(SkFILE* f) { + SkDEBUGFAIL("Not supported yet"); +} + +void sk_fclose(SkFILE* rec) { + SkASSERT(rec); + [rec->fData release]; + delete rec; +} +