1 /* 2 * Copyright (C) 2008 The Android Open Source Project 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * * Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * * Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in 12 * the documentation and/or other materials provided with the 13 * distribution. 14 * 15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 18 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 19 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 20 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 21 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 22 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 23 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 24 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 25 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26 * SUCH DAMAGE. 27 */ 28 29 #include <stdio.h> 30 #include <stdlib.h> 31 #include <string.h> 32 #include <errno.h> 33 #include <fcntl.h> 34 #include <unistd.h> 35 #include <limits.h> 36 37 #include <windows.h> 38 39 void get_my_path(char exe[PATH_MAX]) 40 { 41 char* r; 42 43 GetModuleFileName( NULL, exe, PATH_MAX-1 ); 44 exe[PATH_MAX-1] = 0; 45 r = strrchr( exe, '\\' ); 46 if (r) 47 *r = 0; 48 } 49 50 51 void *load_file(const char *fn, unsigned *_sz) 52 { 53 HANDLE file; 54 char *data; 55 DWORD file_size; 56 57 file = CreateFile( fn, 58 GENERIC_READ, 59 FILE_SHARE_READ, 60 NULL, 61 OPEN_EXISTING, 62 0, 63 NULL ); 64 65 if (file == INVALID_HANDLE_VALUE) 66 return NULL; 67 68 file_size = GetFileSize( file, NULL ); 69 data = NULL; 70 71 if (file_size > 0) { 72 data = (char*) malloc( file_size ); 73 if (data == NULL) { 74 fprintf(stderr, "load_file: could not allocate %ld bytes\n", file_size ); 75 file_size = 0; 76 } else { 77 DWORD out_bytes; 78 79 if ( !ReadFile( file, data, file_size, &out_bytes, NULL ) || 80 out_bytes != file_size ) 81 { 82 fprintf(stderr, "load_file: could not read %ld bytes from '%s'\n", file_size, fn); 83 free(data); 84 data = NULL; 85 file_size = 0; 86 } 87 } 88 } 89 CloseHandle( file ); 90 91 *_sz = (unsigned) file_size; 92 return data; 93 } 94