xref: /minix3/minix/lib/libmagicrt/include/st/metadata_transfer.h (revision b2ed49a5d83e311ee0fa9e5ff613639b1bf77aaf)
1*b2ed49a5SDavid van Moolenbroek #ifndef METADATA_TRANSFER_H
2*b2ed49a5SDavid van Moolenbroek #define METADATA_TRANSFER_H
3*b2ed49a5SDavid van Moolenbroek 
4*b2ed49a5SDavid van Moolenbroek #include <st/state_transfer.h>
5*b2ed49a5SDavid van Moolenbroek 
6*b2ed49a5SDavid van Moolenbroek /* Metadata transfer and adjustment functions */
7*b2ed49a5SDavid van Moolenbroek PRIVATE int transfer_metadata_functions(st_init_info_t *info,
8*b2ed49a5SDavid van Moolenbroek     struct _magic_vars_t *cached_magic_vars,
9*b2ed49a5SDavid van Moolenbroek     struct _magic_vars_t *remote_magic_vars,
10*b2ed49a5SDavid van Moolenbroek     st_counterparts_t *counterparts);
11*b2ed49a5SDavid van Moolenbroek PRIVATE int transfer_metadata_dfunctions(st_init_info_t *info,
12*b2ed49a5SDavid van Moolenbroek     struct _magic_vars_t *cached_magic_vars,
13*b2ed49a5SDavid van Moolenbroek     struct _magic_vars_t *remote_magic_vars,
14*b2ed49a5SDavid van Moolenbroek     st_counterparts_t *counterparts);
15*b2ed49a5SDavid van Moolenbroek PRIVATE int transfer_metadata_type_members(st_init_info_t *info,
16*b2ed49a5SDavid van Moolenbroek     struct _magic_type *type, struct _magic_vars_t *cached_magic_vars,
17*b2ed49a5SDavid van Moolenbroek     struct _magic_vars_t *remote_magic_vars);
18*b2ed49a5SDavid van Moolenbroek PRIVATE int transfer_metadata_sentries(st_init_info_t *info,
19*b2ed49a5SDavid van Moolenbroek     struct _magic_vars_t *cached_magic_vars,
20*b2ed49a5SDavid van Moolenbroek     struct _magic_vars_t *remote_magic_vars, st_counterparts_t *counterparts,
21*b2ed49a5SDavid van Moolenbroek     size_t *max_buff_sz);
22*b2ed49a5SDavid van Moolenbroek PRIVATE int transfer_metadata_sentry_members(st_init_info_t *info,
23*b2ed49a5SDavid van Moolenbroek     struct _magic_sentry *sentry);
24*b2ed49a5SDavid van Moolenbroek 
25*b2ed49a5SDavid van Moolenbroek PRIVATE int pair_metadata_types(st_init_info_t *info,
26*b2ed49a5SDavid van Moolenbroek     struct _magic_vars_t *cached_magic_vars,
27*b2ed49a5SDavid van Moolenbroek     st_counterparts_t *counterparts, int allow_unpaired_types);
28*b2ed49a5SDavid van Moolenbroek PRIVATE int pair_metadata_functions(st_init_info_t *info,
29*b2ed49a5SDavid van Moolenbroek     struct _magic_vars_t *cached_magic_vars, st_counterparts_t *counterparts);
30*b2ed49a5SDavid van Moolenbroek PRIVATE int pair_metadata_sentries(st_init_info_t *info,
31*b2ed49a5SDavid van Moolenbroek     struct _magic_vars_t *cached_magic_vars, st_counterparts_t *counterparts);
32*b2ed49a5SDavid van Moolenbroek #if !ST_ASSUME_RAW_COPY_BEFORE_TRANSFER
33*b2ed49a5SDavid van Moolenbroek PRIVATE int allocate_pair_metadata_dsentries(st_init_info_t *info,
34*b2ed49a5SDavid van Moolenbroek     struct _magic_vars_t *cached_magic_vars, st_counterparts_t *counterparts);
35*b2ed49a5SDavid van Moolenbroek #else
36*b2ed49a5SDavid van Moolenbroek PRIVATE int allocate_pair_metadata_dsentries_from_raw_copy(st_init_info_t *info,
37*b2ed49a5SDavid van Moolenbroek     struct _magic_vars_t *cached_magic_vars, st_counterparts_t *counterparts);
38*b2ed49a5SDavid van Moolenbroek #endif
39*b2ed49a5SDavid van Moolenbroek 
40*b2ed49a5SDavid van Moolenbroek /* metadata transfer helper functions */
41*b2ed49a5SDavid van Moolenbroek PRIVATE int md_transfer_str(st_init_info_t *info, char **str_pt);
42*b2ed49a5SDavid van Moolenbroek #define MD_TRANSFER_STR(INFO, STR_PT)                                          \
43*b2ed49a5SDavid van Moolenbroek     do {                                                                       \
44*b2ed49a5SDavid van Moolenbroek         if (md_transfer_str(INFO, __UNCONST(STR_PT))) {                        \
45*b2ed49a5SDavid van Moolenbroek             printf("%s, line %d. md_transfer_str(): ERROR transferring.\n",    \
46*b2ed49a5SDavid van Moolenbroek                 __FILE__, __LINE__);                                           \
47*b2ed49a5SDavid van Moolenbroek             return EGENERIC;                                                   \
48*b2ed49a5SDavid van Moolenbroek         }                                                                      \
49*b2ed49a5SDavid van Moolenbroek     } while(0)
50*b2ed49a5SDavid van Moolenbroek PRIVATE int md_transfer(st_init_info_t *info, void *from, void **to, int len);
51*b2ed49a5SDavid van Moolenbroek #define MD_TRANSFER(INFO, FROM, TO, LEN)                                       \
52*b2ed49a5SDavid van Moolenbroek     do {                                                                       \
53*b2ed49a5SDavid van Moolenbroek         if (md_transfer(INFO, FROM, TO, LEN)) {                                \
54*b2ed49a5SDavid van Moolenbroek             printf("%s, line %d. md_transfer(): ERROR transferring.\n",        \
55*b2ed49a5SDavid van Moolenbroek                 __FILE__, __LINE__);                                           \
56*b2ed49a5SDavid van Moolenbroek             return EGENERIC;                                                   \
57*b2ed49a5SDavid van Moolenbroek         }                                                                      \
58*b2ed49a5SDavid van Moolenbroek     } while(0)
59*b2ed49a5SDavid van Moolenbroek 
60*b2ed49a5SDavid van Moolenbroek #endif /* METADATA_TRANSFER_H */
61