Lines Matching defs:dir

70 static u8 adfs_fplus_checkbyte(struct adfs_dir *dir)
72 struct adfs_bigdirheader *h = dir->bighead;
73 struct adfs_bigdirtail *t = dir->bigtail;
83 bp = (void *)dir->bhs[bi]->b_data;
84 bs = dir->bhs[bi]->b_size;
104 unsigned int size, struct adfs_dir *dir)
112 ret = adfs_dir_read_buffers(sb, indaddr, sb->s_blocksize, dir);
116 dir->bighead = h = (void *)dir->bhs[0]->b_data;
119 adfs_error(sb, "dir %06x has malformed header", indaddr);
126 "dir %06x header size %X does not match directory size %X",
131 ret = adfs_dir_read_buffers(sb, indaddr, dirsize, dir);
135 dir->bigtail = t = (struct adfs_bigdirtail *)
136 (dir->bhs[dir->nr_buffers - 1]->b_data + (sb->s_blocksize - 8));
140 adfs_error(sb, "dir %06x has malformed tail", indaddr);
144 if (adfs_fplus_checkbyte(dir) != t->bigdircheckbyte) {
145 adfs_error(sb, "dir %06x checkbyte mismatch\n", indaddr);
149 dir->parent_id = le32_to_cpu(h->bigdirparent);
153 adfs_dir_relse(dir);
159 adfs_fplus_setpos(struct adfs_dir *dir, unsigned int fpos)
163 if (fpos <= le32_to_cpu(dir->bighead->bigdirentries)) {
164 dir->pos = fpos;
172 adfs_fplus_getnext(struct adfs_dir *dir, struct object_info *obj)
174 struct adfs_bigdirheader *h = dir->bighead;
179 if (dir->pos >= le32_to_cpu(h->bigdirentries))
182 offset = adfs_fplus_offset(h, dir->pos);
184 ret = adfs_dir_copyfrom(&bde, dir, offset,
199 ret = adfs_dir_copyfrom(obj->name, dir, offset, obj->name_len);
203 adfs_object_fixup(dir, obj);
205 dir->pos += 1;
210 static int adfs_fplus_iterate(struct adfs_dir *dir, struct dir_context *ctx)
217 if (adfs_fplus_setpos(dir, ctx->pos - 2))
220 while (!adfs_fplus_getnext(dir, &obj)) {
230 static int adfs_fplus_update(struct adfs_dir *dir, struct object_info *obj)
232 struct adfs_bigdirheader *h = dir->bighead;
242 adfs_error(dir->sb, "unable to locate entry to update");
245 ret = adfs_dir_copyfrom(&bde, dir, offset, sizeof(bde));
247 adfs_error(dir->sb, "error reading directory entry");
258 return adfs_dir_copyto(dir, offset, &bde, sizeof(bde));
261 static int adfs_fplus_commit(struct adfs_dir *dir)
266 dir->bighead->startmasseq += 1;
267 dir->bigtail->bigdirendmasseq += 1;
270 dir->bigtail->bigdircheckbyte = adfs_fplus_checkbyte(dir);
273 ret = adfs_fplus_validate_header(dir->bighead);
275 ret = adfs_fplus_validate_tail(dir->bighead, dir->bigtail);