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