File: var_cksum.c

package info (click to toggle)
cdo 2.6.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 49,836 kB
  • sloc: cpp: 185,271; ansic: 95,766; sh: 7,192; f90: 6,147; makefile: 1,977; ruby: 1,078; csh: 1,028; python: 995; fortran: 319; pascal: 219; perl: 9
file content (51 lines) | stat: -rw-r--r-- 1,359 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

#include "var_cksum.h"

#include <stdio.h>
#include <stdlib.h>

int
compare_checksums(struct cksum_table a[], size_t a_size, const char *src_a, struct cksum_table b[], size_t b_size,
                  const char *src_b)
{
  int checked_a[a_size], checked_b[b_size];
  size_t i, j;
  int retcode = EXIT_SUCCESS;

  for (i = 0; i < a_size; ++i) checked_a[i] = 0;
  for (j = 0; j < b_size; ++j) checked_b[j] = 0;

  for (j = 0; j < b_size; ++j)
    for (i = 0; i < a_size; ++i)
      if (a[i].code == b[j].code)
      {
        if (a[i].cksum != b[j].cksum)
        {
          fprintf(stderr,
                  "checksum error for varID %d, code %d!\n"
                  "%08lx != %08lx\n",
                  (int) i, a[i].code, (unsigned long) a[i].cksum, (unsigned long) b[j].cksum);
          retcode = EXIT_FAILURE;
        }
        checked_a[i] = 1;
        checked_b[j] = 1;
        break;
      }

  for (i = 0; i < a_size; ++i)
    if (!checked_a[i])
    {
      fprintf(stderr, "variable %d, code %d from %s not checked!\n", (int) i, a[i].code, src_a);
      retcode = EXIT_FAILURE;
    }
  for (j = 0; j < b_size; ++j)
    if (!checked_b[j])
    {
      fprintf(stderr, "variable %d, code %d from %s not checked!\n", (int) j, b[j].code, src_b);
      retcode = EXIT_FAILURE;
    }
  return retcode;
}