1b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Copyright 2014 the V8 project authors. All rights reserved. 2b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// Redistribution and use in source and binary forms, with or without 3b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// modification, are permitted provided that the following conditions are 4b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// met: 5b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// 6b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// * Redistributions of source code must retain the above copyright 7b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// notice, this list of conditions and the following disclaimer. 8b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// * Redistributions in binary form must reproduce the above 9b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// copyright notice, this list of conditions and the following 10b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// disclaimer in the documentation and/or other materials provided 11b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// with the distribution. 12b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// * Neither the name of Google Inc. nor the names of its 13b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// contributors may be used to endorse or promote products derived 14b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// from this software without specific prior written permission. 15b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// 16b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 28958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier// Utility functions used by parser-shell. 29b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 30014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#include "src/globals.h" 31014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 32b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include <stdio.h> 33b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 34b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochnamespace v8 { 35b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochnamespace internal { 36b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 37b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum Encoding { 38b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LATIN1, 39b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch UTF8, 40b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch UTF16 41b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 42b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 43b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst byte* ReadFileAndRepeat(const char* name, int* size, int repeat) { 44b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FILE* file = fopen(name, "rb"); 45b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch *size = 0; 46b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (file == NULL) return NULL; 47b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 48b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch fseek(file, 0, SEEK_END); 49014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch int file_size = static_cast<int>(ftell(file)); 50b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch rewind(file); 51b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 52b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch *size = file_size * repeat; 53b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 54b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch byte* chars = new byte[*size + 1]; 55b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch for (int i = 0; i < file_size;) { 56b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch int read = static_cast<int>(fread(&chars[i], 1, file_size - i, file)); 57b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch i += read; 58b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 59b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch fclose(file); 60b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 61b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch for (int i = file_size; i < *size; i++) { 62b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch chars[i] = chars[i - file_size]; 63b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 64b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch chars[*size] = 0; 65b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 66b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return chars; 67b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 68b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 69014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} // namespace internal 70014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} // namespace v8 71