END_TEST START_TEST(test_checksum) { /* create a new file, edit it a bit */ char *new_file = solv_dupjoin(test_globals.tmpdir, "/test_checksum", NULL); build_test_file(new_file); unsigned char cs1[CHKSUM_BYTES]; unsigned char cs2[CHKSUM_BYTES]; unsigned char cs1_sum[CHKSUM_BYTES]; unsigned char cs2_sum[CHKSUM_BYTES]; bzero(cs1, CHKSUM_BYTES); bzero(cs2, CHKSUM_BYTES); bzero(cs1_sum, CHKSUM_BYTES); bzero(cs2_sum, CHKSUM_BYTES); fail_if(checksum_cmp(cs1, cs2)); // tests checksum_cmp /* take the first checksums */ FILE *fp; fail_if((fp = fopen(new_file, "r")) == NULL); fail_if(checksum_fp(cs1, fp)); fail_if(checksum_stat(cs1_sum, fp)); fclose(fp); /* the taken checksum are not zeros anymore */ fail_if(checksum_cmp(cs1, cs2) == 0); fail_if(checksum_cmp(cs1_sum, cs2_sum) == 0); /* append something */ fail_if((fp = fopen(new_file, "a")) == NULL); fail_unless(fwrite("X", 1, 1, fp) == 1); fclose(fp); /* take the second checksums */ fail_if((fp = fopen(new_file, "r")) == NULL); fail_if(checksum_stat(cs2, fp)); fail_if(checksum_stat(cs2_sum, fp)); fclose(fp); fail_unless(checksum_cmp(cs1, cs2)); fail_unless(checksum_cmp(cs1_sum, cs2_sum)); g_free(new_file); }
static int current_rpmdb_checksum(Pool *pool, unsigned char csout[CHKSUM_BYTES]) { const char *rpmdb_prefix_paths[] = { "/var/lib/rpm/Packages", "/usr/share/rpm/Packages" }; unsigned int i; const char *fn; FILE *fp_rpmdb = NULL; int ret = 0; for (i = 0; i < sizeof(rpmdb_prefix_paths)/sizeof(*rpmdb_prefix_paths); i++) { fn = pool_prepend_rootdir_tmp(pool, rpmdb_prefix_paths[i]); fp_rpmdb = fopen(fn, "r"); if (fp_rpmdb) break; } if (!fp_rpmdb || checksum_stat(csout, fp_rpmdb)) ret = 1; if (fp_rpmdb) fclose(fp_rpmdb); return ret; }