| Index: tools/telemetry/third_party/gsutilz/third_party/crcmod/python2/src/_crcfunext.c
|
| diff --git a/tools/telemetry/third_party/gsutilz/third_party/crcmod/python2/src/_crcfunext.c b/tools/telemetry/third_party/gsutilz/third_party/crcmod/python2/src/_crcfunext.c
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..208d2e9d75e4f2349e0c8fc02410e455a0e0153d
|
| --- /dev/null
|
| +++ b/tools/telemetry/third_party/gsutilz/third_party/crcmod/python2/src/_crcfunext.c
|
| @@ -0,0 +1,501 @@
|
| +//-----------------------------------------------------------------------------
|
| +// Low level CRC functions for use by crcmod. This version is the C
|
| +// implementation that corresponds to the Python module _crcfunpy. This module
|
| +// will be used by crcmod if it is built for the target platform. Otherwise,
|
| +// the Python module is used.
|
| +//
|
| +// Copyright (c) 2004 Raymond L. Buvel
|
| +//
|
| +// Permission is hereby granted, free of charge, to any person obtaining a copy
|
| +// of this software and associated documentation files (the "Software"), to
|
| +// deal in the Software without restriction, including without limitation the
|
| +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
| +// sell copies of the Software, and to permit persons to whom the Software is
|
| +// furnished to do so, subject to the following conditions:
|
| +//
|
| +// The above copyright notice and this permission notice shall be included in
|
| +// all copies or substantial portions of the Software.
|
| +//
|
| +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
| +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
| +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
| +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
| +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
| +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
| +// IN THE SOFTWARE.
|
| +//-----------------------------------------------------------------------------
|
| +
|
| +// Force Py_ssize_t to be used for s# conversions.
|
| +#define PY_SSIZE_T_CLEAN
|
| +#include <Python.h>
|
| +
|
| +// Make compatible with previous Python versions
|
| +#if PY_VERSION_HEX < 0x02050000
|
| +typedef int Py_ssize_t;
|
| +#define PY_SSIZE_T_MAX INT_MAX
|
| +#define PY_SSIZE_T_MIN INT_MIN
|
| +#endif
|
| +
|
| +// Note: the type declarations are set up to work on 32-bit platforms using the
|
| +// GNU C compiler. They will need to be adjusted for other platforms. In
|
| +// particular, the Microsoft Windows compiler uses _int64 instead of long long.
|
| +
|
| +// Define a few types to make it easier to port to other platforms.
|
| +typedef unsigned char UINT8;
|
| +typedef unsigned short UINT16;
|
| +typedef unsigned int UINT32;
|
| +typedef unsigned long long UINT64;
|
| +
|
| +// Define some macros for the data format strings. The INPUT strings are for
|
| +// decoding the input parameters to the function which are (data, crc, table).
|
| +
|
| +// Note: these format strings use codes that are new in Python 2.3 so it would
|
| +// be necessary to rewrite the code for versions earlier than 2.3.
|
| +
|
| +#define INPUT8 "s#Bs#"
|
| +#define INPUT16 "s#Hs#"
|
| +#define INPUT32 "s#Is#"
|
| +#define INPUT64 "s#Ks#"
|
| +
|
| +// Define some macros that extract the specified byte from an integral value in
|
| +// what should be a platform independent manner.
|
| +#define BYTE0(x) ((UINT8)(x))
|
| +#define BYTE1(x) ((UINT8)((x) >> 8))
|
| +#define BYTE2(x) ((UINT8)((x) >> 16))
|
| +#define BYTE3(x) ((UINT8)((x) >> 24))
|
| +#define BYTE7(x) ((UINT8)((x) >> 56))
|
| +
|
| +//-----------------------------------------------------------------------------
|
| +// Compute a 8-bit crc over the input data.
|
| +// Inputs:
|
| +// data - string containing the data
|
| +// crc - unsigned integer containing the initial crc
|
| +// table - string containing the 8-bit table corresponding to the generator
|
| +// polynomial.
|
| +// Returns:
|
| +// crc - unsigned integer containing the resulting crc
|
| +
|
| +static PyObject*
|
| +_crc8(PyObject* self, PyObject* args)
|
| +{
|
| + UINT8 crc;
|
| + UINT8* data;
|
| + Py_ssize_t dataLen;
|
| + UINT8* table;
|
| + Py_ssize_t tableLen;
|
| +
|
| + if (!PyArg_ParseTuple(args, INPUT8, &data, &dataLen, &crc,
|
| + &table, &tableLen))
|
| + {
|
| + return NULL;
|
| + }
|
| +
|
| + if (tableLen != 256)
|
| + {
|
| + PyErr_SetString(PyExc_ValueError, "invalid CRC table");
|
| + return NULL;
|
| + }
|
| +
|
| + while (dataLen--)
|
| + {
|
| + crc = table[*data ^ crc];
|
| + data++;
|
| + }
|
| +
|
| + return PyInt_FromLong((long)crc);
|
| +}
|
| +
|
| +//-----------------------------------------------------------------------------
|
| +// Compute a 8-bit crc over the input data. The data stream is bit reversed
|
| +// during the computation.
|
| +// Inputs:
|
| +// data - string containing the data
|
| +// crc - unsigned integer containing the initial crc
|
| +// table - string containing the 8-bit table corresponding to the generator
|
| +// polynomial.
|
| +// Returns:
|
| +// crc - unsigned integer containing the resulting crc
|
| +
|
| +static PyObject*
|
| +_crc8r(PyObject* self, PyObject* args)
|
| +{
|
| + UINT8 crc;
|
| + UINT8* data;
|
| + Py_ssize_t dataLen;
|
| + UINT8* table;
|
| + Py_ssize_t tableLen;
|
| +
|
| + if (!PyArg_ParseTuple(args, INPUT8, &data, &dataLen, &crc,
|
| + &table, &tableLen))
|
| + {
|
| + return NULL;
|
| + }
|
| +
|
| + if (tableLen != 256)
|
| + {
|
| + PyErr_SetString(PyExc_ValueError, "invalid CRC table");
|
| + return NULL;
|
| + }
|
| +
|
| + while (dataLen--)
|
| + {
|
| + crc = table[*data ^ crc];
|
| + data++;
|
| + }
|
| +
|
| + return PyInt_FromLong((long)crc);
|
| +}
|
| +
|
| +//-----------------------------------------------------------------------------
|
| +// Compute a 16-bit crc over the input data.
|
| +// Inputs:
|
| +// data - string containing the data
|
| +// crc - unsigned integer containing the initial crc
|
| +// table - string containing the 16-bit table corresponding to the generator
|
| +// polynomial.
|
| +// Returns:
|
| +// crc - unsigned integer containing the resulting crc
|
| +
|
| +static PyObject*
|
| +_crc16(PyObject* self, PyObject* args)
|
| +{
|
| + UINT16 crc;
|
| + UINT8* data;
|
| + Py_ssize_t dataLen;
|
| + UINT16* table;
|
| + Py_ssize_t tableLen;
|
| +
|
| + if (!PyArg_ParseTuple(args, INPUT16, &data, &dataLen, &crc,
|
| + &table, &tableLen))
|
| + {
|
| + return NULL;
|
| + }
|
| +
|
| + if (tableLen != 256*2)
|
| + {
|
| + PyErr_SetString(PyExc_ValueError, "invalid CRC table");
|
| + return NULL;
|
| + }
|
| +
|
| + while (dataLen--)
|
| + {
|
| + crc = table[*data ^ BYTE1(crc)] ^ (crc << 8);
|
| + data++;
|
| + }
|
| +
|
| + return PyInt_FromLong((long)crc);
|
| +}
|
| +
|
| +//-----------------------------------------------------------------------------
|
| +// Compute a 16-bit crc over the input data. The data stream is bit reversed
|
| +// during the computation.
|
| +// Inputs:
|
| +// data - string containing the data
|
| +// crc - unsigned integer containing the initial crc
|
| +// table - string containing the 16-bit table corresponding to the generator
|
| +// polynomial.
|
| +// Returns:
|
| +// crc - unsigned integer containing the resulting crc
|
| +
|
| +static PyObject*
|
| +_crc16r(PyObject* self, PyObject* args)
|
| +{
|
| + UINT16 crc;
|
| + UINT8* data;
|
| + Py_ssize_t dataLen;
|
| + UINT16* table;
|
| + Py_ssize_t tableLen;
|
| +
|
| + if (!PyArg_ParseTuple(args, INPUT16, &data, &dataLen, &crc,
|
| + &table, &tableLen))
|
| + {
|
| + return NULL;
|
| + }
|
| +
|
| + if (tableLen != 256*2)
|
| + {
|
| + PyErr_SetString(PyExc_ValueError, "invalid CRC table");
|
| + return NULL;
|
| + }
|
| +
|
| + while (dataLen--)
|
| + {
|
| + crc = table[*data ^ BYTE0(crc)] ^ (crc >> 8);
|
| + data++;
|
| + }
|
| +
|
| + return PyInt_FromLong((long)crc);
|
| +}
|
| +
|
| +//-----------------------------------------------------------------------------
|
| +// Compute a 24-bit crc over the input data.
|
| +// Inputs:
|
| +// data - string containing the data
|
| +// crc - unsigned integer containing the initial crc
|
| +// table - string containing the 24-bit table corresponding to the generator
|
| +// polynomial.
|
| +// Returns:
|
| +// crc - unsigned integer containing the resulting crc
|
| +
|
| +static PyObject*
|
| +_crc24(PyObject* self, PyObject* args)
|
| +{
|
| + UINT32 crc;
|
| + UINT8* data;
|
| + Py_ssize_t dataLen;
|
| + UINT32* table;
|
| + Py_ssize_t tableLen;
|
| +
|
| + if (!PyArg_ParseTuple(args, INPUT32, &data, &dataLen, &crc,
|
| + &table, &tableLen))
|
| + {
|
| + return NULL;
|
| + }
|
| +
|
| + if (tableLen != 256*4)
|
| + {
|
| + PyErr_SetString(PyExc_ValueError, "invalid CRC table");
|
| + return NULL;
|
| + }
|
| +
|
| + while (dataLen--)
|
| + {
|
| + crc = table[*data ^ BYTE2(crc)] ^ (crc << 8);
|
| + data++;
|
| + }
|
| +
|
| + return PyInt_FromLong((long)(crc & 0xFFFFFFU));
|
| +}
|
| +
|
| +//-----------------------------------------------------------------------------
|
| +// Compute a 24-bit crc over the input data. The data stream is bit reversed
|
| +// during the computation.
|
| +// Inputs:
|
| +// data - string containing the data
|
| +// crc - unsigned integer containing the initial crc
|
| +// table - string containing the 24-bit table corresponding to the generator
|
| +// polynomial.
|
| +// Returns:
|
| +// crc - unsigned integer containing the resulting crc
|
| +
|
| +static PyObject*
|
| +_crc24r(PyObject* self, PyObject* args)
|
| +{
|
| + UINT32 crc;
|
| + UINT8* data;
|
| + Py_ssize_t dataLen;
|
| + UINT32* table;
|
| + Py_ssize_t tableLen;
|
| +
|
| + if (!PyArg_ParseTuple(args, INPUT32, &data, &dataLen, &crc,
|
| + &table, &tableLen))
|
| + {
|
| + return NULL;
|
| + }
|
| +
|
| + if (tableLen != 256*4)
|
| + {
|
| + PyErr_SetString(PyExc_ValueError, "invalid CRC table");
|
| + return NULL;
|
| + }
|
| +
|
| + crc = crc & 0xFFFFFFU;
|
| + while (dataLen--)
|
| + {
|
| + crc = table[*data ^ BYTE0(crc)] ^ (crc >> 8);
|
| + data++;
|
| + }
|
| +
|
| + return PyInt_FromLong((long)crc);
|
| +}
|
| +
|
| +//-----------------------------------------------------------------------------
|
| +// Compute a 32-bit crc over the input data.
|
| +// Inputs:
|
| +// data - string containing the data
|
| +// crc - unsigned integer containing the initial crc
|
| +// table - string containing the 32-bit table corresponding to the generator
|
| +// polynomial.
|
| +// Returns:
|
| +// crc - unsigned integer containing the resulting crc
|
| +
|
| +static PyObject*
|
| +_crc32(PyObject* self, PyObject* args)
|
| +{
|
| + UINT32 crc;
|
| + UINT8* data;
|
| + Py_ssize_t dataLen;
|
| + UINT32* table;
|
| + Py_ssize_t tableLen;
|
| +
|
| + if (!PyArg_ParseTuple(args, INPUT32, &data, &dataLen, &crc,
|
| + &table, &tableLen))
|
| + {
|
| + return NULL;
|
| + }
|
| +
|
| + if (tableLen != 256*4)
|
| + {
|
| + PyErr_SetString(PyExc_ValueError, "invalid CRC table");
|
| + return NULL;
|
| + }
|
| +
|
| + while (dataLen--)
|
| + {
|
| + crc = table[*data ^ BYTE3(crc)] ^ (crc << 8);
|
| + data++;
|
| + }
|
| +
|
| + return PyLong_FromUnsignedLong(crc);
|
| +}
|
| +
|
| +//-----------------------------------------------------------------------------
|
| +// Compute a 32-bit crc over the input data. The data stream is bit reversed
|
| +// during the computation.
|
| +// Inputs:
|
| +// data - string containing the data
|
| +// crc - unsigned integer containing the initial crc
|
| +// table - string containing the 32-bit table corresponding to the generator
|
| +// polynomial.
|
| +// Returns:
|
| +// crc - unsigned integer containing the resulting crc
|
| +
|
| +static PyObject*
|
| +_crc32r(PyObject* self, PyObject* args)
|
| +{
|
| + UINT32 crc;
|
| + UINT8* data;
|
| + Py_ssize_t dataLen;
|
| + UINT32* table;
|
| + Py_ssize_t tableLen;
|
| +
|
| + if (!PyArg_ParseTuple(args, INPUT32, &data, &dataLen, &crc,
|
| + &table, &tableLen))
|
| + {
|
| + return NULL;
|
| + }
|
| +
|
| + if (tableLen != 256*4)
|
| + {
|
| + PyErr_SetString(PyExc_ValueError, "invalid CRC table");
|
| + return NULL;
|
| + }
|
| +
|
| + while (dataLen--)
|
| + {
|
| + crc = table[*data ^ BYTE0(crc)] ^ (crc >> 8);
|
| + data++;
|
| + }
|
| +
|
| + return PyLong_FromUnsignedLong(crc);
|
| +}
|
| +
|
| +//-----------------------------------------------------------------------------
|
| +// Compute a 64-bit crc over the input data.
|
| +// Inputs:
|
| +// data - string containing the data
|
| +// crc - unsigned integer containing the initial crc
|
| +// table - string containing the 64-bit table corresponding to the generator
|
| +// polynomial.
|
| +// Returns:
|
| +// crc - unsigned integer containing the resulting crc
|
| +
|
| +static PyObject*
|
| +_crc64(PyObject* self, PyObject* args)
|
| +{
|
| + UINT64 crc;
|
| + UINT8* data;
|
| + Py_ssize_t dataLen;
|
| + UINT64* table;
|
| + Py_ssize_t tableLen;
|
| +
|
| + if (!PyArg_ParseTuple(args, INPUT64, &data, &dataLen, &crc,
|
| + &table, &tableLen))
|
| + {
|
| + return NULL;
|
| + }
|
| +
|
| + if (tableLen != 256*8)
|
| + {
|
| + PyErr_SetString(PyExc_ValueError, "invalid CRC table");
|
| + return NULL;
|
| + }
|
| +
|
| + while (dataLen--)
|
| + {
|
| + crc = table[*data ^ BYTE7(crc)] ^ (crc << 8);
|
| + data++;
|
| + }
|
| +
|
| + return PyLong_FromUnsignedLongLong(crc);
|
| +}
|
| +
|
| +//-----------------------------------------------------------------------------
|
| +// Compute a 64-bit crc over the input data. The data stream is bit reversed
|
| +// during the computation.
|
| +// Inputs:
|
| +// data - string containing the data
|
| +// crc - unsigned integer containing the initial crc
|
| +// table - string containing the 64-bit table corresponding to the generator
|
| +// polynomial.
|
| +// Returns:
|
| +// crc - unsigned integer containing the resulting crc
|
| +
|
| +static PyObject*
|
| +_crc64r(PyObject* self, PyObject* args)
|
| +{
|
| + UINT64 crc;
|
| + UINT8* data;
|
| + Py_ssize_t dataLen;
|
| + UINT64* table;
|
| + Py_ssize_t tableLen;
|
| +
|
| + if (!PyArg_ParseTuple(args, INPUT64, &data, &dataLen, &crc,
|
| + &table, &tableLen))
|
| + {
|
| + return NULL;
|
| + }
|
| +
|
| + if (tableLen != 256*8)
|
| + {
|
| + PyErr_SetString(PyExc_ValueError, "invalid CRC table");
|
| + return NULL;
|
| + }
|
| +
|
| + while (dataLen--)
|
| + {
|
| + crc = table[*data ^ BYTE0(crc)] ^ (crc >> 8);
|
| + data++;
|
| + }
|
| +
|
| + return PyLong_FromUnsignedLongLong(crc);
|
| +}
|
| +
|
| +//-----------------------------------------------------------------------------
|
| +static PyMethodDef methodTable[] = {
|
| +{"_crc8", _crc8, METH_VARARGS},
|
| +{"_crc8r", _crc8r, METH_VARARGS},
|
| +{"_crc16", _crc16, METH_VARARGS},
|
| +{"_crc16r", _crc16r, METH_VARARGS},
|
| +{"_crc24", _crc24, METH_VARARGS},
|
| +{"_crc24r", _crc24r, METH_VARARGS},
|
| +{"_crc32", _crc32, METH_VARARGS},
|
| +{"_crc32r", _crc32r, METH_VARARGS},
|
| +{"_crc64", _crc64, METH_VARARGS},
|
| +{"_crc64r", _crc64r, METH_VARARGS},
|
| +{NULL, NULL}
|
| +};
|
| +
|
| +//-----------------------------------------------------------------------------
|
| +void init_crcfunext(void)
|
| +{
|
| + PyObject *m;
|
| +
|
| + if ((sizeof(UINT8) != 1) || (sizeof(UINT16) != 2) ||
|
| + (sizeof(UINT32) != 4) || (sizeof(UINT64) != 8))
|
| + {
|
| + Py_FatalError("crcfunext: One of the data types is invalid");
|
| + }
|
| + m = Py_InitModule("_crcfunext", methodTable);
|
| +}
|
| +
|
|
|