Lines Matching +full:de +full:- +full:spread

1 // SPDX-License-Identifier: GPL-2.0-only
5 * Copyright (C) 1997-1999 Russell King
48 int _off = idx - (_buf << blocksize_bits);\
49 *(u8 *)(bh[_buf]->b_data + _off); \
54 int _off = idx - (_buf << blocksize_bits);\
55 *(__le32 *)(bh[_buf]->b_data + _off); \
60 int _off = _idx - (_buf << blocksize_bits);\
61 (void *)(_bh[_buf]->b_data + _off); \
72 struct buffer_head * const *bh = dir->bh; in adfs_dir_checkbyte()
73 const int blocksize_bits = dir->sb->s_blocksize_bits; in adfs_dir_checkbyte()
76 int last = 5 - 26; in adfs_dir_checkbyte()
82 * can spread across several buffer heads. in adfs_dir_checkbyte()
99 end.ptr8 = ptr.ptr8 + last - i; in adfs_dir_checkbyte()
126 struct adfs_dirheader *head = dir->dirhead; in adfs_f_validate()
127 struct adfs_newdirtail *tail = dir->newtail; in adfs_f_validate()
129 if (head->startmasseq != tail->endmasseq || in adfs_f_validate()
130 tail->dirlastmask || tail->reserved[0] || tail->reserved[1] || in adfs_f_validate()
131 (memcmp(&head->startname, "Nick", 4) && in adfs_f_validate()
132 memcmp(&head->startname, "Hugo", 4)) || in adfs_f_validate()
133 memcmp(&head->startname, &tail->endname, 4) || in adfs_f_validate()
134 adfs_dir_checkbyte(dir) != tail->dircheckbyte) in adfs_f_validate()
135 return -EIO; in adfs_f_validate()
144 const unsigned int blocksize_bits = sb->s_blocksize_bits; in adfs_f_read()
148 return -EIO; in adfs_f_read()
154 dir->dirhead = bufoff(dir->bh, 0); in adfs_f_read()
155 dir->newtail = bufoff(dir->bh, 2007); in adfs_f_read()
160 dir->parent_id = adfs_readval(dir->newtail->dirparent, 3); in adfs_f_read()
168 return -EIO; in adfs_f_read()
172 * convert a disk-based directory entry to a Linux ADFS directory entry
176 struct adfs_direntry *de) in adfs_dir2obj() argument
181 if (de->dirobname[name_len] < ' ') in adfs_dir2obj()
184 obj->name[name_len] = de->dirobname[name_len]; in adfs_dir2obj()
187 obj->name_len = name_len; in adfs_dir2obj()
188 obj->indaddr = adfs_readval(de->dirinddiscadd, 3); in adfs_dir2obj()
189 obj->loadaddr = adfs_readval(de->dirload, 4); in adfs_dir2obj()
190 obj->execaddr = adfs_readval(de->direxec, 4); in adfs_dir2obj()
191 obj->size = adfs_readval(de->dirlen, 4); in adfs_dir2obj()
192 obj->attr = de->newdiratts; in adfs_dir2obj()
198 * convert a Linux ADFS directory entry to a disk-based directory entry
201 adfs_obj2dir(struct adfs_direntry *de, struct object_info *obj) in adfs_obj2dir() argument
203 adfs_writeval(de->dirinddiscadd, 3, obj->indaddr); in adfs_obj2dir()
204 adfs_writeval(de->dirload, 4, obj->loadaddr); in adfs_obj2dir()
205 adfs_writeval(de->direxec, 4, obj->execaddr); in adfs_obj2dir()
206 adfs_writeval(de->dirlen, 4, obj->size); in adfs_obj2dir()
207 de->newdiratts = obj->attr; in adfs_obj2dir()
217 struct adfs_direntry de; in __adfs_dir_get() local
220 ret = adfs_dir_copyfrom(&de, dir, pos, 26); in __adfs_dir_get()
224 if (!de.dirobname[0]) in __adfs_dir_get()
225 return -ENOENT; in __adfs_dir_get()
227 adfs_dir2obj(dir, obj, &de); in __adfs_dir_get()
236 return -ENOENT; in adfs_f_setpos()
238 dir->pos = 5 + fpos * 26; in adfs_f_setpos()
247 ret = __adfs_dir_get(dir, dir->pos, obj); in adfs_f_getnext()
249 dir->pos += 26; in adfs_f_getnext()
257 int pos = 5 + (ctx->pos - 2) * 26; in adfs_f_iterate()
259 while (ctx->pos < 2 + ADFS_NUM_DIR_ENTRIES) { in adfs_f_iterate()
266 ctx->pos++; in adfs_f_iterate()
273 struct adfs_direntry de; in adfs_f_update() local
276 offset = 5 - (int)sizeof(de); in adfs_f_update()
279 offset += sizeof(de); in adfs_f_update()
280 ret = adfs_dir_copyfrom(&de, dir, offset, sizeof(de)); in adfs_f_update()
282 adfs_error(dir->sb, "error reading directory entry"); in adfs_f_update()
283 return -ENOENT; in adfs_f_update()
285 if (!de.dirobname[0]) { in adfs_f_update()
286 adfs_error(dir->sb, "unable to locate entry to update"); in adfs_f_update()
287 return -ENOENT; in adfs_f_update()
289 } while (adfs_readval(de.dirinddiscadd, 3) != obj->indaddr); in adfs_f_update()
292 adfs_obj2dir(&de, obj); in adfs_f_update()
295 return adfs_dir_copyto(dir, offset, &de, 26); in adfs_f_update()
303 dir->dirhead->startmasseq += 1; in adfs_f_commit()
304 dir->newtail->endmasseq += 1; in adfs_f_commit()
307 dir->newtail->dircheckbyte = adfs_dir_checkbyte(dir); in adfs_f_commit()
312 adfs_msg(dir->sb, KERN_ERR, "error: update broke directory"); in adfs_f_commit()