diff options
Diffstat (limited to 'include/utils/ObbFile.h')
| -rw-r--r-- | include/utils/ObbFile.h | 118 | 
1 files changed, 118 insertions, 0 deletions
| diff --git a/include/utils/ObbFile.h b/include/utils/ObbFile.h new file mode 100644 index 000000000000..5243f50051fd --- /dev/null +++ b/include/utils/ObbFile.h @@ -0,0 +1,118 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + *      http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef OBBFILE_H_ +#define OBBFILE_H_ + +#include <stdint.h> +#include <strings.h> + +#include <utils/RefBase.h> +#include <utils/String8.h> + +namespace android { + +// OBB flags (bit 0) +#define OBB_OVERLAY         (1 << 0) + +class ObbFile : public RefBase { +protected: +    virtual ~ObbFile(); + +public: +    ObbFile(); + +    bool readFrom(const char* filename); +    bool readFrom(int fd); +    bool writeTo(const char* filename); +    bool writeTo(int fd); +    bool removeFrom(const char* filename); +    bool removeFrom(int fd); + +    const char* getFileName() const { +        return mFileName; +    } + +    const String8 getPackageName() const { +        return mPackageName; +    } + +    void setPackageName(String8 packageName) { +        mPackageName = packageName; +    } + +    int32_t getVersion() const { +        return mVersion; +    } + +    void setVersion(int32_t version) { +        mVersion = version; +    } + +    int32_t getFlags() const { +        return mFlags; +    } + +    void setFlags(int32_t flags) { +        mFlags = flags; +    } + +    bool isOverlay() { +        return (mFlags & OBB_OVERLAY) == OBB_OVERLAY; +    } + +    void setOverlay(bool overlay) { +        if (overlay) { +            mFlags |= OBB_OVERLAY; +        } else { +            mFlags &= ~OBB_OVERLAY; +        } +    } + +    static inline uint32_t get4LE(const unsigned char* buf) { +        return buf[0] | (buf[1] << 8) | (buf[2] << 16) | (buf[3] << 24); +    } + +    static inline void put4LE(unsigned char* buf, uint32_t val) { +        buf[0] = val & 0xFF; +        buf[1] = (val >> 8) & 0xFF; +        buf[2] = (val >> 16) & 0xFF; +        buf[3] = (val >> 24) & 0xFF; +    } + +private: +    /* Package name this ObbFile is associated with */ +    String8 mPackageName; + +    /* Package version this ObbFile is associated with */ +    int32_t mVersion; + +    /* Flags for this OBB type. */ +    int32_t mFlags; + +    const char* mFileName; + +    size_t mFileSize; + +    size_t mFooterStart; + +    unsigned char* mReadBuf; + +    bool parseObbFile(int fd); +}; + +} +#endif /* OBBFILE_H_ */ | 
