// SPDX-License-Identifier: GPL-2.0 /* * linux/fs/isofs/rock.c * * (C) 1992, 1993 Eric Youngdale * * Rock Ridge Extensions to iso9660 */ #include <linux/slab.h> #include <linux/pagemap.h> #include "isofs.h" #include "rock.h" /* * These functions are designed to read the system areas of a directory record * and extract relevant information. There are different functions provided * depending upon what information we need at the time. One function fills * out an inode structure, a second one extracts a filename, a third one * returns a symbolic link name, and a fourth one returns the extent number * for the file. */ #define SIG(A,B) … struct rock_state { … }; /* * This is a way of ensuring that we have something in the system * use fields that is compatible with Rock Ridge. Return zero on success. */ static int check_sp(struct rock_ridge *rr, struct inode *inode) { … } static void setup_rock_ridge(struct iso_directory_record *de, struct inode *inode, struct rock_state *rs) { … } static void init_rock_state(struct rock_state *rs, struct inode *inode) { … } /* Maximum number of Rock Ridge continuation entries */ #define RR_MAX_CE_ENTRIES … /* * Returns 0 if the caller should continue scanning, 1 if the scan must end * and -ve on error. */ static int rock_continue(struct rock_state *rs) { … } /* * We think there's a record of type `sig' at rs->chr. Parse the signature * and make sure that there's really room for a record of that type. */ static int rock_check_overflow(struct rock_state *rs, int sig) { … } /* * return length of name field; 0: not found, -1: to be ignored */ int get_rock_ridge_filename(struct iso_directory_record *de, char *retname, struct inode *inode) { … } #define RR_REGARD_XA … #define RR_RELOC_DE … static int parse_rock_ridge_inode_internal(struct iso_directory_record *de, struct inode *inode, int flags) { … } static char *get_symlink_chunk(char *rpnt, struct rock_ridge *rr, char *plimit) { … } int parse_rock_ridge_inode(struct iso_directory_record *de, struct inode *inode, int relocated) { … } /* * read_folio() for symlinks: reads symlink contents into the folio and either * makes it uptodate and returns 0 or returns error (-EIO) */ static int rock_ridge_symlink_read_folio(struct file *file, struct folio *folio) { … } const struct address_space_operations isofs_symlink_aops = …;