Lines Matching +full:non +full:- +full:pc

5  *	Symlink handling routines for the OSTA-UDF(tm) filesystem.
13 * (C) 1998-2001 Ben Fennema
35 struct pathComponent *pc; in udf_pc_to_char() local
41 tolen--; in udf_pc_to_char()
43 pc = (struct pathComponent *)(from + elen); in udf_pc_to_char()
45 switch (pc->componentType) { in udf_pc_to_char()
51 if (pc->lengthComponentIdent > 0) { in udf_pc_to_char()
52 elen += pc->lengthComponentIdent; in udf_pc_to_char()
58 return -ENAMETOOLONG; in udf_pc_to_char()
61 tolen--; in udf_pc_to_char()
65 return -ENAMETOOLONG; in udf_pc_to_char()
68 tolen -= 3; in udf_pc_to_char()
72 return -ENAMETOOLONG; in udf_pc_to_char()
75 tolen -= 2; in udf_pc_to_char()
76 /* that would be . - just ignore */ in udf_pc_to_char()
79 elen += pc->lengthComponentIdent; in udf_pc_to_char()
81 return -EIO; in udf_pc_to_char()
82 comp_len = udf_get_filename(sb, pc->componentIdent, in udf_pc_to_char()
83 pc->lengthComponentIdent, in udf_pc_to_char()
89 tolen -= comp_len; in udf_pc_to_char()
91 return -ENAMETOOLONG; in udf_pc_to_char()
93 tolen--; in udf_pc_to_char()
98 p[-1] = '\0'; in udf_pc_to_char()
106 struct inode *inode = page->mapping->host; in udf_symlink_filler()
115 if (inode->i_size > inode->i_sb->s_blocksize) { in udf_symlink_filler()
116 err = -ENAMETOOLONG; in udf_symlink_filler()
123 down_read(&iinfo->i_data_sem); in udf_symlink_filler()
124 if (iinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB) { in udf_symlink_filler()
125 symlink = iinfo->i_data + iinfo->i_lenEAttr; in udf_symlink_filler()
127 bh = sb_bread(inode->i_sb, pos); in udf_symlink_filler()
130 err = -EIO; in udf_symlink_filler()
134 symlink = bh->b_data; in udf_symlink_filler()
137 err = udf_pc_to_char(inode->i_sb, symlink, inode->i_size, p, PAGE_SIZE); in udf_symlink_filler()
142 up_read(&iinfo->i_data_sem); in udf_symlink_filler()
148 up_read(&iinfo->i_data_sem); in udf_symlink_filler()
159 struct dentry *dentry = path->dentry; in udf_symlink_getattr()
164 page = read_mapping_page(inode->i_mapping, 0, NULL); in udf_symlink_getattr()
168 * UDF uses non-trivial encoding of symlinks so i_size does not match in udf_symlink_getattr()
176 stat->size = strlen(page_address(page)); in udf_symlink_getattr()