diff options
Diffstat (limited to 'core/fs/iso9660/susp_rr.h')
-rw-r--r-- | core/fs/iso9660/susp_rr.h | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/core/fs/iso9660/susp_rr.h b/core/fs/iso9660/susp_rr.h new file mode 100644 index 00000000..16732df3 --- /dev/null +++ b/core/fs/iso9660/susp_rr.h @@ -0,0 +1,84 @@ +#ifndef ISO9660_SUSP_H +#define ISO9660_SUSP_H 1 + +/* Public functions of susp_rr.c, a reader for SUSP and Rock Ridge information. +*/ + +/* Inspect the ISO 9660 filesystem whether it bears the signatures of + SUSP and Rock Ridge. + Set the parameters fs->fs_info->do_rr and fs->fs_info->susp_skip. + To be called at the end of iso_fs_init(). + + SUSP demands an SP entry as first entry in the System Use area of + the first directory record in the root directory. + Rock Ridge prescribes at the same directory record an ER entry with + id field content "RRIP_1991A", or "IEEE_P1282", or "IEEE_1282". + + @param fs The filesystem to inspect + @param flag Bitfield for control purposes: + bit0= Demand a Rock Ridge ER entry + @return 0 No valid SUSP signature found. + 1 Yes, signature of SUSP found. No ER was demanded. + 2 ER of RRIP 1.10 found. + 3 ER of RRIP 1.12 found. +*/ +int susp_rr_check_signatures(struct fs_info *fs, int flag); + + +/* Obtain the payload bytes of all SUSP entries with the given signature. + + @param fs The filesystem from which to read CE blocks. + fs->fs_info->do_rr must be non-zero or else this function + will always return 0 (i.e. no payload found). + @param dir_rec Memory containing the whole ISO 9660 directory record. + @param sig Two characters of SUSP signature. E.g. "NM", "ER", ... + @param data Returns allocated memory with the payload. + A trailing 0-byte is added for convenience with strings. + If data is returned != NULL, then it has to be disposed + by free() when it is no longer needed. + @param len_data Returns the number of valid bytes in *data. + Not included in this count is the convenience 0-byte. + @param flag Bitfield for control purposes: + bit0= NM/SL mode: + Skip 5 header bytes rather than 4. + End after first matching entry without CONTINUE bit. + Return 0x100 | byte[4] (FLAGS) of first entry. + @return >0 Success. + *data and *len_data are valid. + Only in this case, *data is returned != NULL. + 0 Desired signature not found. + -1 Error. + Something is wrong with the ISO 9660 or SUSP data in + the image. +*/ +int susp_rr_get_entries(struct fs_info *fs, char *dir_rec, char *sig, + char **data, int *len_data, int flag); + + +/* Obtain the Rock Ridge name of a directory record. + If the found content of NM entries is longer than 255 characters, + then this function will not return it, but rather indicate an error. + + @param fs The filesystem from which to read CE blocks. + fs->fs_info->do_rr must be non-zero or else this function + will always return 0 (i.e. no Rock Ridge name found). + @param dir_rec Memory containing the whole ISO 9660 directory record. + @param name Returns allocated memory with the name and a trailing + 0-byte. name might contain any byte values. + If name is returned != NULL, then it has to be disposed + by free() when it is no longer needed. + @param len_name Returns the number of valid bytes in *name. + Not included in this count is the 0-byte after the name. + @return >0 Success. + *name and *len_name are valid. + Only in this case, *data is returned != NULL. + 0 No NM entry found. No Rock Ridge name defined. + -1 Error. + Something is wrong with the ISO 9660 or SUSP data in + the image. +*/ +int susp_rr_get_nm(struct fs_info *fs, char *dir_rec, + char **name, int *len_name); + + +#endif /* ! ISO9660_SUSP_H */ |