gfx/skia/trunk/src/utils/ios/SkOSFile_iOS.mm

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/gfx/skia/trunk/src/utils/ios/SkOSFile_iOS.mm	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,98 @@
     1.4 +/*
     1.5 + * Copyright 2010 Google Inc.
     1.6 + *
     1.7 + * Use of this source code is governed by a BSD-style license that can be
     1.8 + * found in the LICENSE file.
     1.9 + */
    1.10 +
    1.11 +#include <Foundation/Foundation.h>
    1.12 +#include "SkOSFile.h"
    1.13 +#include "SkString.h"
    1.14 +
    1.15 +struct SkFILE {
    1.16 +    NSData* fData;
    1.17 +    size_t  fOffset;
    1.18 +    size_t  fLength;
    1.19 +};
    1.20 +
    1.21 +SkFILE* sk_fopen(const char cpath[], SkFILE_Flags flags) {
    1.22 +    if (flags & kWrite_SkFILE_Flag) {
    1.23 +        return NULL;
    1.24 +    }
    1.25 +
    1.26 +    SkString cname, csuffix;
    1.27 +
    1.28 +    const char* start = strrchr(cpath, '/');
    1.29 +    if (NULL == start) {
    1.30 +        start = cpath;
    1.31 +    } else {
    1.32 +        start += 1;
    1.33 +    }
    1.34 +    const char* stop = strrchr(cpath, '.');
    1.35 +    if (NULL == stop) {
    1.36 +        return NULL;
    1.37 +    } else {
    1.38 +        stop += 1;
    1.39 +    }
    1.40 +
    1.41 +    cname.set(start, stop - start - 1);
    1.42 +    csuffix.set(stop);
    1.43 +
    1.44 +    NSBundle* bundle = [NSBundle mainBundle];
    1.45 +    NSString* name = [NSString stringWithUTF8String:cname.c_str()];
    1.46 +    NSString* suffix = [NSString stringWithUTF8String:csuffix.c_str()];
    1.47 +    NSString* path = [bundle pathForResource:name ofType:suffix];
    1.48 +    NSData* data = [NSData dataWithContentsOfMappedFile:path];
    1.49 +
    1.50 +    if (data) {
    1.51 +        [data retain];
    1.52 +        SkFILE* rec = new SkFILE;
    1.53 +        rec->fData = data;
    1.54 +        rec->fOffset = 0;
    1.55 +        rec->fLength = [data length];
    1.56 +        return reinterpret_cast<SkFILE*>(rec);
    1.57 +    }
    1.58 +    return NULL;
    1.59 +}
    1.60 +
    1.61 +size_t sk_fgetsize(SkFILE* rec) {
    1.62 +    SkASSERT(rec);
    1.63 +    return rec->fLength;
    1.64 +}
    1.65 +
    1.66 +bool sk_frewind(SkFILE* rec) {
    1.67 +    SkASSERT(rec);
    1.68 +    rec->fOffset = 0;
    1.69 +    return true;
    1.70 +}
    1.71 +
    1.72 +size_t sk_fread(void* buffer, size_t byteCount, SkFILE* rec) {
    1.73 +    if (NULL == buffer) {
    1.74 +        return rec->fLength;
    1.75 +    } else {
    1.76 +        size_t remaining = rec->fLength - rec->fOffset;
    1.77 +        if (byteCount > remaining) {
    1.78 +            byteCount = remaining;
    1.79 +        }
    1.80 +        memcpy(buffer, (char*)[rec->fData bytes] + rec->fOffset, byteCount);
    1.81 +        rec->fOffset += byteCount;
    1.82 +        SkASSERT(rec->fOffset <= rec->fLength);
    1.83 +        return byteCount;
    1.84 +    }
    1.85 +}
    1.86 +
    1.87 +size_t sk_fwrite(const void* buffer, size_t byteCount, SkFILE* f) {
    1.88 +    SkDEBUGFAIL("Not supported yet");
    1.89 +    return 0;
    1.90 +}
    1.91 +
    1.92 +void sk_fflush(SkFILE* f) {
    1.93 +    SkDEBUGFAIL("Not supported yet");
    1.94 +}
    1.95 +
    1.96 +void sk_fclose(SkFILE* rec) {
    1.97 +    SkASSERT(rec);
    1.98 +    [rec->fData release];
    1.99 +    delete rec;
   1.100 +}
   1.101 +

mercurial