]> FriiDump Source - friidump.git/blob - src/redump_dat.h
475f5c28acaad550d35eab0006f3e8767f44cb55
[friidump.git] / src / redump_dat.h
1 #ifndef REDUMP_DAT_H_INCLUDED
2 #define REDUMP_DAT_H_INCLUDED
3
4 #include <stddef.h>
5 #include <stdint.h>
6
7 typedef enum {
8     REDUMP_VERIFY_NOT_RUN = 0,
9     REDUMP_VERIFY_MATCH,
10     REDUMP_VERIFY_NO_MATCH,
11     REDUMP_VERIFY_DAT_NOT_FOUND,
12     REDUMP_VERIFY_DAT_READ_ERROR,
13     REDUMP_VERIFY_INVALID_INPUT
14 } redump_verify_status;
15
16 typedef enum {
17     REDUMP_FIELD_NOT_AVAILABLE = 0,
18     REDUMP_FIELD_PASS,
19     REDUMP_FIELD_FAIL
20 } redump_field_status;
21
22 typedef struct {
23     redump_verify_status status;
24     unsigned long entries_scanned;
25     unsigned long exact_matches;
26     unsigned long size_matches;
27     unsigned long crc32_matches;
28     unsigned long md5_matches;
29     unsigned long sha1_matches;
30     int candidate_available;
31     int candidate_hash_matches;
32     redump_field_status size_status;
33     redump_field_status crc32_status;
34     redump_field_status md5_status;
35     redump_field_status sha1_status;
36     char dat_path[512];
37     char game_name[512];
38     char rom_name[512];
39     char expected_size[32];
40     char expected_crc32[16];
41     char expected_md5[40];
42     char expected_sha1[48];
43     char detail[256];
44 } redump_verify_result;
45
46 void redump_verify_result_init(redump_verify_result *result);
47 const char *redump_verify_status_string(redump_verify_status status);
48 const char *redump_field_status_string(redump_field_status status);
49 const char *redump_verify_overall_string(const redump_verify_result *result);
50 const char *redump_verify_confidence_string(const redump_verify_result *result);
51 const char *redump_verify_match_kind_string(const redump_verify_result *result);
52
53 /*
54  * Resolve a DAT path predictably.
55  *
56  * Resolution order:
57  *   1. explicit_dir, when non-empty;
58  *   2. executable_dir/redump_dat;
59  *   3. current-working-directory redump_dat.
60  *
61  * The selected candidate is always written to out_path when arguments are
62  * valid. The return value is nonzero only when that candidate exists.
63  */
64 int redump_resolve_dat_path(
65     const char *explicit_dir,
66     const char *executable_dir,
67     const char *basename,
68     char *out_path,
69     size_t out_path_size
70 );
71
72 int redump_verify_dat_file(
73     const char *dat_path,
74     uint64_t image_size,
75     const char *crc32,
76     const char *md5,
77     const char *sha1,
78     redump_verify_result *result
79 );
80
81 #endif