15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "courgette/crc.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef COURGETTE_USE_CRC_LIB
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#  include "zlib.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" {
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#  include "third_party/lzma_sdk/7zCrc.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace courgette {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)uint32 CalculateCrc(const uint8* buffer, size_t size) {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 crc;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef COURGETTE_USE_CRC_LIB
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Calculate Crc by calling CRC method in zlib
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  crc = crc32(0, buffer, size);
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Calculate Crc by calling CRC method in LZMA SDK
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CrcGenerateTable();
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  crc = CrcCalc(buffer, size);
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return ~crc;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
35