]> FriiDump Source - friidump.git/blob - src/redump_dat.h
FriiDump 0.5.3.16: finalize release identity and documentation
[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 (authoritative);
58  *   2. FRIIDUMP_REDUMP_DAT_DIR, when set (authoritative);
59  *   3. executable_dir/redump_dat (portable and CMake build layout);
60  *   4. executable_dir/../share/friidump/redump_dat (installed Unix layout);
61  *   5. current-working-directory redump_dat.
62  *
63  * CMake copies the bundled DAT files beside the build executable and installs
64  * them under the platform-appropriate data directory. The selected candidate
65  * is always written to out_path when arguments are valid. The return value is
66  * nonzero only when that candidate exists.
67  */
68 int redump_resolve_dat_path(
69     const char *explicit_dir,
70     const char *executable_dir,
71     const char *basename,
72     char *out_path,
73     size_t out_path_size
74 );
75
76 int redump_verify_dat_file(
77     const char *dat_path,
78     uint64_t image_size,
79     const char *crc32,
80     const char *md5,
81     const char *sha1,
82     redump_verify_result *result
83 );
84
85 #endif