110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/** 210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @file op_fileio.c 310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * Reading from / writing to files 410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * 510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @remark Copyright 2002 OProfile authors 610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @remark Read the file COPYING 710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * 810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @author John Levon 910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @author Philippe Elie 1010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project */ 1110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 1210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#include <unistd.h> 1310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 1410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#include "op_fileio.h" 1510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 1610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#include "op_libiberty.h" 1710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 1810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#include <errno.h> 1910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#include <string.h> 2010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#include <stdlib.h> 2110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 2210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectstatic FILE * op_do_open_file(char const * name, char const * mode, int fatal) 2310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project{ 2410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project FILE * fp; 2510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 2610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project fp = fopen(name, mode); 2710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 2810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project if (!fp) { 2910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project if (fatal) { 3010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project fprintf(stderr,"oprofiled:op_do_open_file: %s: %s", 3110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project name, strerror(errno)); 3210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project exit(EXIT_FAILURE); 3310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project } 3410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project } 3510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 3610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project return fp; 3710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project} 3810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 3910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 4010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source ProjectFILE * op_try_open_file(char const * name, char const * mode) 4110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project{ 4210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project return op_do_open_file(name, mode, 0); 4310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project} 4410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 4510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 4610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source ProjectFILE * op_open_file(char const * name, char const * mode) 4710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project{ 4810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project return op_do_open_file(name, mode, 1); 4910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project} 5010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 5110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 5210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectvoid op_close_file(FILE * fp) 5310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project{ 5410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project if (fclose(fp)) 5510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project perror("oprofiled:op_close_file: "); 5610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project} 5710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 5810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 5910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectvoid op_write_file(FILE * fp, void const * buf, size_t size) 6010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project{ 6110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project size_t written; 6210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 6310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project if (size == 0) 6410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project return; 6510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 6610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project written = fwrite(buf, size, 1, fp); 6710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 6810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project if (written != 1) { 6910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project fprintf(stderr, 7010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project "oprofiled:op_write_file: wrote less than expected: %lu bytes.\n", 7110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project (unsigned long)size); 7210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project exit(EXIT_FAILURE); 7310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project } 7410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project} 7510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 7610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 7710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectvoid op_write_u8(FILE * fp, u8 val) 7810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project{ 7910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project op_write_file(fp, &val, sizeof(val)); 8010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project} 8110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 8210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 8310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectvoid op_write_u32(FILE * fp, u32 val) 8410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project{ 8510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project op_write_file(fp, &val, sizeof(val)); 8610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project} 8710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 8810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 8910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectvoid op_write_u64(FILE * fp, u64 val) 9010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project{ 9110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project op_write_file(fp, &val, sizeof(val)); 9210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project} 9310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 9410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 9510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectu32 op_read_int_from_file(char const * filename, int fatal) 9610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project{ 9710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project FILE * fp; 9810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project u32 value; 9910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 10010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project fp = fopen(filename, "r"); 10110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project if (fp == NULL) { 10210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project if (!fatal) 10310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project return (u32)-1; 10410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project fprintf(stderr, 10510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project "op_read_int_from_file: Failed to open %s, reason %s\n", 10610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project filename, strerror(errno)); 10710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project exit(EXIT_FAILURE); 10810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project } 10910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 11010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project if (fscanf(fp, "%u", &value) != 1) { 11110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project fclose(fp); 11210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project if (!fatal) 11310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project return (u32)-1; 11410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project fprintf(stderr, 11510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project "op_read_int_from_file: Failed to convert contents of file %s to integer\n", 11610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project filename); 11710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project exit(EXIT_FAILURE); 11810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project } 11910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 12010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project fclose(fp); 12110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 12210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project return value; 12310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project} 12410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 12510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 12610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectchar * op_get_line(FILE * fp) 12710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project{ 12810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project char * buf; 12910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project char * cp; 13010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project int c; 13110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project size_t max = 512; 13210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 13310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project buf = xmalloc(max); 13410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project cp = buf; 13510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 13610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project while (1) { 13710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project switch (c = getc(fp)) { 13810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project case EOF: 13910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project free(buf); 14010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project return NULL; 14110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project break; 14210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 14310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project case '\n': 14410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project case '\0': 14510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project *cp = '\0'; 14610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project return buf; 14710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project break; 14810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 14910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project default: 15010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project *cp = (char)c; 15110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project cp++; 15210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project if (((size_t)(cp - buf)) == max) { 15310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project buf = xrealloc(buf, max + 128); 15410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project cp = buf + max; 15510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project max += 128; 15610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project } 15710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project break; 15810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project } 15910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project } 16010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project} 16110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 16210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 16310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/* FIXME the debug info stuff should be handled by binutils */ 16410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectunsigned long 16510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectcalc_crc32(unsigned long crc, unsigned char * buf, size_t len) 16610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project{ 16710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project static const unsigned long crc32_table[256] = 16810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { 16910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 17010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 17110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 17210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 17310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 17410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 17510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 17610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 17710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 17810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, 17910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 18010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 18110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 18210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 18310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, 18410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, 18510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 18610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, 18710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 18810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 18910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 19010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 19110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, 19210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, 19310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 19410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 19510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 19610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 19710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, 19810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 19910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 20010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 20110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 20210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, 20310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 20410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 20510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 20610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 20710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, 20810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, 20910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 21010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, 21110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 21210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 21310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, 21410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 21510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 21610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, 21710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 21810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 21910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 22010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 0x2d02ef8d 22110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project }; 22210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project unsigned char * end; 22310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 22410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project crc = ~crc & 0xffffffff; 22510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project for (end = buf + len; buf < end; ++buf) 22610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project crc = crc32_table[(crc ^ *buf) & 0xff] ^ (crc >> 8); 22710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project return ~crc & 0xffffffff; 22810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project} 229