1a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block// 2a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block// Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved. 3a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block// Use of this source code is governed by a BSD-style license that can be 4a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block// found in the LICENSE file. 5a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block// 6a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block 7a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block#ifndef _MMAP_INCLUDED_ 8a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block#define _MMAP_INCLUDED_ 9a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block 10a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block// 11a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block// Encapsulate memory mapped files 12a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block// 13a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block 14a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Blockclass TMMap { 15a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Blockpublic: 16a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block TMMap(const char* fileName) : 17a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block fSize(-1), // -1 is the error value returned by GetFileSize() 18a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block fp(NULL), 19a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block fBuff(0) // 0 is the error value returned by MapViewOfFile() 20a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block { 21a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block if ((fp = fopen(fileName, "r")) == NULL) 22a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block return; 23a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block char c = getc(fp); 24a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block fSize = 0; 25a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block while (c != EOF) { 26a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block fSize++; 27a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block c = getc(fp); 28a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block } 29a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block if (c == EOF) 30a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block fSize++; 31a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block rewind(fp); 32a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block fBuff = (char*)malloc(sizeof(char) * fSize); 33a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block int count = 0; 34a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block c = getc(fp); 35a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block while (c != EOF) { 36a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block fBuff[count++] = c; 37a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block c = getc(fp); 38a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block } 39a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block fBuff[count++] = c; 40a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block } 41a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block 42a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block char* getData() { return fBuff; } 43a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block int getSize() { return fSize; } 44a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block 45a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block ~TMMap() { 46a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block if (fp != NULL) 47a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block fclose(fp); 48a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block } 49a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block 50a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Blockprivate: 51a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block int fSize; // size of file to map in 52a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block FILE *fp; 53a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block char* fBuff; // the actual data; 54a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block}; 55a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block 56a9bfd6c4a32dfd9cc032cb67c6ccb8d09c16f579Steve Block#endif // _MMAP_INCLUDED_ 57