Lines Matching refs:rs

53 			struct inode *inode, struct rock_state *rs)  in setup_rock_ridge()  argument
55 rs->len = sizeof(struct iso_directory_record) + de->name_len[0]; in setup_rock_ridge()
56 if (rs->len & 1) in setup_rock_ridge()
57 (rs->len)++; in setup_rock_ridge()
58 rs->chr = (unsigned char *)de + rs->len; in setup_rock_ridge()
59 rs->len = *((unsigned char *)de) - rs->len; in setup_rock_ridge()
60 if (rs->len < 0) in setup_rock_ridge()
61 rs->len = 0; in setup_rock_ridge()
64 rs->len -= ISOFS_SB(inode->i_sb)->s_rock_offset; in setup_rock_ridge()
65 rs->chr += ISOFS_SB(inode->i_sb)->s_rock_offset; in setup_rock_ridge()
66 if (rs->len < 0) in setup_rock_ridge()
67 rs->len = 0; in setup_rock_ridge()
71 static void init_rock_state(struct rock_state *rs, struct inode *inode) in init_rock_state() argument
73 memset(rs, 0, sizeof(*rs)); in init_rock_state()
74 rs->inode = inode; in init_rock_state()
84 static int rock_continue(struct rock_state *rs) in rock_continue() argument
87 int blocksize = 1 << rs->inode->i_blkbits; in rock_continue()
90 kfree(rs->buffer); in rock_continue()
91 rs->buffer = NULL; in rock_continue()
93 if ((unsigned)rs->cont_offset > blocksize - min_de_size || in rock_continue()
94 (unsigned)rs->cont_size > blocksize || in rock_continue()
95 (unsigned)(rs->cont_offset + rs->cont_size) > blocksize) { in rock_continue()
98 rs->cont_extent, rs->cont_offset, rs->cont_size); in rock_continue()
103 if (rs->cont_extent) { in rock_continue()
106 rs->buffer = kmalloc(rs->cont_size, GFP_KERNEL); in rock_continue()
107 if (!rs->buffer) { in rock_continue()
112 if (++rs->cont_loops >= RR_MAX_CE_ENTRIES) in rock_continue()
114 bh = sb_bread(rs->inode->i_sb, rs->cont_extent); in rock_continue()
116 memcpy(rs->buffer, bh->b_data + rs->cont_offset, in rock_continue()
117 rs->cont_size); in rock_continue()
119 rs->chr = rs->buffer; in rock_continue()
120 rs->len = rs->cont_size; in rock_continue()
121 rs->cont_extent = 0; in rock_continue()
122 rs->cont_size = 0; in rock_continue()
123 rs->cont_offset = 0; in rock_continue()
129 kfree(rs->buffer); in rock_continue()
130 rs->buffer = NULL; in rock_continue()
138 static int rock_check_overflow(struct rock_state *rs, int sig) in rock_check_overflow() argument
184 if (len > rs->len) { in rock_check_overflow()
188 sig, len, rs->len); in rock_check_overflow()
200 struct rock_state rs; in get_rock_ridge_filename() local
213 init_rock_state(&rs, inode); in get_rock_ridge_filename()
214 setup_rock_ridge(de, inode, &rs); in get_rock_ridge_filename()
217 while (rs.len > 2) { /* There may be one byte for padding somewhere */ in get_rock_ridge_filename()
218 rr = (struct rock_ridge *)rs.chr; in get_rock_ridge_filename()
226 sig = isonum_721(rs.chr); in get_rock_ridge_filename()
227 if (rock_check_overflow(&rs, sig)) in get_rock_ridge_filename()
229 rs.chr += rr->len; in get_rock_ridge_filename()
230 rs.len -= rr->len; in get_rock_ridge_filename()
235 if (rs.len < 0) in get_rock_ridge_filename()
248 rs.cont_extent = isonum_733(rr->u.CE.extent); in get_rock_ridge_filename()
249 rs.cont_offset = isonum_733(rr->u.CE.offset); in get_rock_ridge_filename()
250 rs.cont_size = isonum_733(rr->u.CE.size); in get_rock_ridge_filename()
285 kfree(rs.buffer); in get_rock_ridge_filename()
291 ret = rock_continue(&rs); in get_rock_ridge_filename()
297 kfree(rs.buffer); in get_rock_ridge_filename()
317 struct rock_state rs; in parse_rock_ridge_inode_internal() local
323 init_rock_state(&rs, inode); in parse_rock_ridge_inode_internal()
324 setup_rock_ridge(de, inode, &rs); in parse_rock_ridge_inode_internal()
326 rs.chr += 14; in parse_rock_ridge_inode_internal()
327 rs.len -= 14; in parse_rock_ridge_inode_internal()
328 if (rs.len < 0) in parse_rock_ridge_inode_internal()
329 rs.len = 0; in parse_rock_ridge_inode_internal()
333 while (rs.len > 2) { /* There may be one byte for padding somewhere */ in parse_rock_ridge_inode_internal()
334 rr = (struct rock_ridge *)rs.chr; in parse_rock_ridge_inode_internal()
342 sig = isonum_721(rs.chr); in parse_rock_ridge_inode_internal()
343 if (rock_check_overflow(&rs, sig)) in parse_rock_ridge_inode_internal()
345 rs.chr += rr->len; in parse_rock_ridge_inode_internal()
346 rs.len -= rr->len; in parse_rock_ridge_inode_internal()
351 if (rs.len < 0) in parse_rock_ridge_inode_internal()
367 rs.cont_extent = isonum_733(rr->u.CE.extent); in parse_rock_ridge_inode_internal()
368 rs.cont_offset = isonum_733(rr->u.CE.offset); in parse_rock_ridge_inode_internal()
369 rs.cont_size = isonum_733(rr->u.CE.size); in parse_rock_ridge_inode_internal()
589 ret = rock_continue(&rs); in parse_rock_ridge_inode_internal()
595 kfree(rs.buffer); in parse_rock_ridge_inode_internal()
706 struct rock_state rs; in rock_ridge_symlink_readpage() local
712 init_rock_state(&rs, inode); in rock_ridge_symlink_readpage()
734 setup_rock_ridge(raw_de, inode, &rs); in rock_ridge_symlink_readpage()
737 while (rs.len > 2) { /* There may be one byte for padding somewhere */ in rock_ridge_symlink_readpage()
738 rr = (struct rock_ridge *)rs.chr; in rock_ridge_symlink_readpage()
741 sig = isonum_721(rs.chr); in rock_ridge_symlink_readpage()
742 if (rock_check_overflow(&rs, sig)) in rock_ridge_symlink_readpage()
744 rs.chr += rr->len; in rock_ridge_symlink_readpage()
745 rs.len -= rr->len; in rock_ridge_symlink_readpage()
746 if (rs.len < 0) in rock_ridge_symlink_readpage()
766 rs.cont_extent = isonum_733(rr->u.CE.extent); in rock_ridge_symlink_readpage()
767 rs.cont_offset = isonum_733(rr->u.CE.offset); in rock_ridge_symlink_readpage()
768 rs.cont_size = isonum_733(rr->u.CE.size); in rock_ridge_symlink_readpage()
773 ret = rock_continue(&rs); in rock_ridge_symlink_readpage()
790 kfree(rs.buffer); in rock_ridge_symlink_readpage()