00001
00002
00003
00004
00005 #include "postgres.h"
00006
00007 #include <sys/types.h>
00008 #include <stdio.h>
00009 #include <sys/types.h>
00010
00011 #ifdef LOWER_NODE
00012 #include <ctype.h>
00013 #define TOLOWER(x) tolower((unsigned char) (x))
00014 #else
00015 #define TOLOWER(x) (x)
00016 #endif
00017
00018 #include "crc32.h"
00019
00020
00021
00022
00023
00024
00025
00026
00027 #define _CRC32_(crc, ch) ((crc) = ((crc) >> 8) ^ crc32tab[((crc) ^ (ch)) & 0xff])
00028
00029
00030
00031
00032
00033
00034 static const unsigned int crc32tab[256] = {
00035 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,
00036 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
00037 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
00038 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
00039 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
00040 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
00041 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,
00042 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
00043 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
00044 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
00045 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940,
00046 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
00047 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116,
00048 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
00049 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
00050 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
00051 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a,
00052 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
00053 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818,
00054 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
00055 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
00056 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
00057 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c,
00058 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
00059 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
00060 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
00061 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
00062 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
00063 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086,
00064 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
00065 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,
00066 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
00067 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
00068 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
00069 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
00070 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
00071 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe,
00072 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
00073 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
00074 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
00075 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252,
00076 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
00077 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60,
00078 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
00079 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
00080 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
00081 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,
00082 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
00083 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,
00084 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
00085 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
00086 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
00087 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e,
00088 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
00089 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
00090 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
00091 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
00092 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
00093 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,
00094 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
00095 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,
00096 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
00097 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
00098 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,
00099 };
00100
00101 unsigned int
00102 ltree_crc32_sz(char *buf, int size)
00103 {
00104 unsigned int crc = ~((unsigned int) 0);
00105 char *p;
00106 int len,
00107 nr;
00108
00109 len = 0;
00110 nr = size;
00111 for (len += nr, p = buf; nr--; ++p)
00112 _CRC32_(crc, TOLOWER((unsigned int) *p));
00113 return ~crc;
00114 }