1 /* 2 * Copyright (C) 2014 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 /*================================================================================================== 18 19 Source Name: dmMetaDataBuffer.cc 20 21 General Description: Implementation of the DMMetaDataBuffer class 22 23 ==================================================================================================*/ 24 25 #include "dm_uri_utils.h" 26 #include "dmStringUtil.h" 27 #include "dmMetaDataBuffer.h" 28 29 UINT32 DMMetaDataBuffer::m_bCorrupted = 0; // due to multiple passing by value, it's reasonable to use static 30 31 32 DMMetaDataBuffer::DMMetaDataBuffer() 33 { 34 m_pBuffer = NULL; 35 m_nOffset = 0; 36 #ifndef DM_IGNORE_BMDF_VERIFICATION 37 m_nFilesSize = 0; 38 #endif 39 } 40 41 DMMetaDataBuffer::DMMetaDataBuffer(MDF_BUFFER_T pBuffer) 42 { 43 m_pBuffer = pBuffer; 44 m_nOffset = 0; 45 #ifndef DM_IGNORE_BMDF_VERIFICATION 46 m_nFilesSize = ReadUINT32(); 47 m_nOffset = 0; 48 #endif 49 } 50 51 52 53 CPCHAR DMMetaDataBuffer::ReadString() 54 { 55 UINT32 offset = ReadUINT32(); 56 57 #ifndef DM_IGNORE_BMDF_VERIFICATION 58 if ( offset >= m_nFilesSize ) { 59 m_bCorrupted = 1; 60 return ""; 61 } 62 #endif 63 CPCHAR str = (CPCHAR)(m_pBuffer + offset); 64 return str; 65 } 66 67 68 UINT16 DMMetaDataBuffer::ReadUINT16() 69 { 70 UINT16 value = 0; 71 72 for (UINT32 i=0; i<sizeof(UINT16); i++) 73 { 74 value |= (*(m_pBuffer+m_nOffset)) << (i*8); 75 m_nOffset++; 76 } 77 return value; 78 } 79 80 81 UINT32 DMMetaDataBuffer::ReadUINT32() 82 { 83 UINT32 value = 0; 84 85 for (int i=0; i<sizeof(UINT32); i++) 86 { 87 value |= (*(m_pBuffer + m_nOffset)) << (i*8); 88 m_nOffset++; 89 } 90 return value; 91 } 92 93 FLOAT DMMetaDataBuffer::ReadFLOAT() 94 { 95 FLOAT value = 0; 96 UINT8 *ptr = (UINT8 *)&value; 97 UINT8 len = sizeof(FLOAT) - 1; 98 99 for (int i=0; i<=len; i++) 100 { 101 *(ptr+i) = *(m_pBuffer+m_nOffset); 102 m_nOffset++; 103 } 104 105 return value; 106 } 107