if (dirent->inode == 0)
return 0;
- if (((dirent->name_len&0xFF) == 1) && (dirent->name[0] == '.'))
+ if ((ext2fs_dirent_name_len(dirent) == 1) && (dirent->name[0] == '.'))
return 0;
- if (((dirent->name_len&0xFF) == 2) && (dirent->name[0] == '.') &&
+ if ((ext2fs_dirent_name_len(dirent) == 2) && (dirent->name[0] == '.') &&
(dirent->name[1] == '.')) {
rds->parent = dirent->inode;
return 0;
const char *dumproot = private;
struct ext2_inode inode;
- thislen = dirent->name_len & 0xFF;
+ thislen = ext2fs_dirent_name_len(dirent);
strncpy(name, dirent->name, thislen);
name[thislen] = 0;
if (entry == DIRENT_DELETED_FILE)
return 0;
- thislen = dirent->name_len & 0xFF;
+ thislen = ext2fs_dirent_name_len(dirent);
strncpy(name, dirent->name, thislen);
name[thislen] = '\0';
ino = dirent->inode;
(unsigned long) blk);
return;
}
+ thislen = ext2fs_dirent_name_len(dirent);
if (((offset + rec_len) > fs->blocksize) ||
(rec_len < 8) ||
((rec_len % 4) != 0) ||
- ((((unsigned) dirent->name_len & 0xFF)+8) > rec_len)) {
+ (thislen + 8 > rec_len)) {
fprintf(pager, "Corrupted directory block (%llu)!\n",
blk);
break;
}
- thislen = dirent->name_len & 0xFF;
strncpy(name, dirent->name, thislen);
name[thislen] = '\0';
errcode = ext2fs_dirhash(hash_alg, name,
return BLOCK_ABORT;
}
if (dirent->inode &&
- p->len == (dirent->name_len & 0xFF) &&
+ p->len == ext2fs_dirent_name_len(dirent) &&
strncmp(p->search_name, dirent->name,
p->len) == 0) {
printf("Entry found at logical block %lld, "
struct list_dir_struct *ls = (struct list_dir_struct *) private;
struct ext2_dir_entry_tail *t = (struct ext2_dir_entry_tail *) dirent;
- thislen = dirent->name_len & 0xFF;
+ thislen = ext2fs_dirent_name_len(dirent);
strncpy(name, dirent->name, thislen);
name[thislen] = '\0';
ino = dirent->inode;
t->det_checksum);
return 0;
}
- fprintf(ls->f, "(%d) %5d %5d ", dirent->name_len >> 8,
+ fprintf(ls->f, "(%d) %5d %5d ",
+ ext2fs_dirent_file_type(dirent),
inode_uid(inode), inode_gid(inode));
if (LINUX_S_ISDIR(inode.i_mode))
fprintf(ls->f, "%5d", inode.i_size);
struct inode_walk_struct *iw = (struct inode_walk_struct *) private;
struct ext2_inode inode;
errcode_t retval;
- int filetype = dirent->name_len >> 8;
+ int filetype = ext2fs_dirent_file_type(dirent);
int i;
iw->position++;
if (iw->parent)
printf("%u\t%s/%.*s", iw->iarray[i],
iw->parent,
- (dirent->name_len & 0xFF), dirent->name);
+ ext2fs_dirent_name_len(dirent),
+ dirent->name);
else
printf("%u\t<%u>/%.*s", iw->iarray[i],
iw->dir,
- (dirent->name_len & 0xFF), dirent->name);
+ ext2fs_dirent_name_len(dirent),
+ dirent->name);
if (iw->check_dirent && filetype) {
if (!debugfs_read_inode(dirent->inode, &inode,
"ncheck") &&
fprintf(f, "%u", dirent->inode);
break;
case 'n':
- len = dirent->name_len & 0xFF;
+ len = ext2fs_dirent_name_len(dirent);
if ((ext2fs_get_rec_len(fs, dirent, &rec_len) == 0) &&
(len > rec_len))
len = rec_len;
fprintf(f, "%u", rec_len);
break;
case 'l':
- fprintf(f, "%u", dirent->name_len & 0xFF);
+ fprintf(f, "%u", ext2fs_dirent_name_len(dirent));
break;
case 't':
- fprintf(f, "%u", dirent->name_len >> 8);
+ fprintf(f, "%u", ext2fs_dirent_file_type(dirent));
break;
default:
no_dirent:
retval = ext2fs_get_rec_len(ctx->fs, dirent, &rec_len);
if (retval)
return;
- if (((dirent->name_len & 0xFF) != 1) ||
+ if ((ext2fs_dirent_name_len(dirent) != 1) ||
(dirent->name[0] != '.') ||
(dirent->inode != pctx->ino) ||
(rec_len < 12) ||
retval = ext2fs_get_rec_len(ctx->fs, dirent, &rec_len);
if (retval)
return;
- if (((dirent->name_len & 0xFF) != 2) ||
+ if ((ext2fs_dirent_name_len(dirent) != 2) ||
(dirent->name[0] != '.') ||
(dirent->name[1] != '.') ||
(rec_len < 12) ||
int a_len, b_len;
de_a = (const struct ext2_dir_entry *) a;
- a_len = de_a->name_len & 0xFF;
+ a_len = ext2fs_dirent_name_len(de_a);
de_b = (const struct ext2_dir_entry *) b;
- b_len = de_b->name_len & 0xFF;
+ b_len = ext2fs_dirent_name_len(de_b);
if (a_len != b_len)
return (a_len - b_len);
if (!dirent->inode)
problem = PR_2_MISSING_DOT;
- else if (((dirent->name_len & 0xFF) != 1) ||
+ else if ((ext2fs_dirent_name_len(dirent) != 1) ||
(dirent->name[0] != '.'))
problem = PR_2_1ST_NOT_DOT;
else if (dirent->name[1] != '\0')
if (rec_len < 12)
rec_len = dirent->rec_len = 12;
dirent->inode = ino;
- dirent->name_len = 1;
+ ext2fs_dirent_set_name_len(dirent, 1);
+ ext2fs_dirent_set_file_type(dirent, EXT2_FT_UNKNOWN);
dirent->name[0] = '.';
dirent->name[1] = '\0';
status = 1;
(void) ext2fs_set_rec_len(ctx->fs, new_len,
nextdir);
nextdir->inode = 0;
- nextdir->name_len = 0;
+ ext2fs_dirent_set_name_len(nextdir, 0);
+ ext2fs_dirent_set_file_type(nextdir,
+ EXT2_FT_UNKNOWN);
status = 1;
}
}
if (!dirent->inode)
problem = PR_2_MISSING_DOT_DOT;
- else if (((dirent->name_len & 0xFF) != 2) ||
+ else if ((ext2fs_dirent_name_len(dirent) != 2) ||
(dirent->name[0] != '.') ||
(dirent->name[1] != '.'))
problem = PR_2_2ND_NOT_DOT_DOT;
* inode. This will get fixed in pass 3.
*/
dirent->inode = EXT2_ROOT_INO;
- dirent->name_len = 2;
+ ext2fs_dirent_set_name_len(dirent, 2);
+ ext2fs_dirent_set_file_type(dirent, EXT2_FT_UNKNOWN);
dirent->name[0] = '.';
dirent->name[1] = '.';
dirent->name[2] = '\0';
int fixup = -1;
int ret = 0;
- for ( i = 0; i < (dirent->name_len & 0xFF); i++) {
+ for ( i = 0; i < ext2fs_dirent_name_len(dirent); i++) {
if (dirent->name[i] == '/' || dirent->name[i] == '\0') {
if (fixup < 0) {
fixup = fix_problem(ctx, PR_2_BAD_NAME, pctx);
ext2_ino_t dir_ino EXT2FS_ATTR((unused)),
struct problem_context *pctx)
{
- int filetype = dirent->name_len >> 8;
+ int filetype = ext2fs_dirent_file_type(dirent);
int should_be = EXT2_FT_UNKNOWN;
struct ext2_inode inode;
if (filetype == 0 ||
!fix_problem(ctx, PR_2_CLEAR_FILETYPE, pctx))
return 0;
- dirent->name_len = dirent->name_len & 0xFF;
+ ext2fs_dirent_set_file_type(dirent, EXT2_FT_UNKNOWN);
return 1;
}
pctx) == 0)
return 0;
- dirent->name_len = (dirent->name_len & 0xFF) | should_be << 8;
+ ext2fs_dirent_set_file_type(dirent, should_be);
return 1;
}
char *cp = (char *) dirent;
int left;
unsigned int rec_len, prev_rec_len;
- unsigned int name_len = dirent->name_len & 0xFF;
+ unsigned int name_len = ext2fs_dirent_name_len(dirent);
(void) ext2fs_get_rec_len(fs, dirent, &rec_len);
left = fs->blocksize - *offset - rec_len;
} else {
rec_len = fs->blocksize - *offset;
(void) ext2fs_set_rec_len(fs, rec_len, dirent);
- dirent->name_len = 0;
+ ext2fs_dirent_set_name_len(dirent, 0);
+ ext2fs_dirent_set_file_type(dirent, EXT2_FT_UNKNOWN);
dirent->inode = 0;
}
}
dx_dir->depth = root->indirect_levels + 1;
} else if ((dirent->inode == 0) &&
(rec_len == fs->blocksize) &&
- (dirent->name_len == 0) &&
+ (ext2fs_dirent_name_len(dirent) == 0) &&
(ext2fs_le16_to_cpu(limit->limit) ==
((fs->blocksize - (8 + dx_csum_size)) /
sizeof(struct ext2_dx_entry))))
do {
int group;
ext2_ino_t first_unused_inode;
+ unsigned int name_len;
problem = 0;
dirent = (struct ext2_dir_entry *) (buf + offset);
if (((offset + rec_len) > fs->blocksize) ||
(rec_len < 12) ||
((rec_len % 4) != 0) ||
- (((dirent->name_len & (unsigned) 0xFF)+8) > rec_len)) {
+ ((ext2fs_dirent_name_len(dirent) + 8) > rec_len)) {
if (fix_problem(ctx, PR_2_DIR_CORRUPTED, &cd->pctx)) {
salvage_directory(fs, dirent, prev, &offset);
dir_modified++;
/*
* Make sure the inode listed is a legal one.
*/
+ name_len = ext2fs_dirent_name_len(dirent);
if (((dirent->inode != EXT2_ROOT_INO) &&
(dirent->inode < EXT2_FIRST_INODE(fs->super))) ||
(dirent->inode > fs->super->s_inodes_count)) {
* clear it.
*/
problem = PR_2_BB_INODE;
- } else if ((dot_state > 1) &&
- ((dirent->name_len & 0xFF) == 1) &&
+ } else if ((dot_state > 1) && (name_len == 1) &&
(dirent->name[0] == '.')) {
/*
* If there's a '.' entry in anything other
* duplicate entry that should be removed.
*/
problem = PR_2_DUP_DOT;
- } else if ((dot_state > 1) &&
- ((dirent->name_len & 0xFF) == 2) &&
+ } else if ((dot_state > 1) && (name_len == 2) &&
(dirent->name[0] == '.') &&
(dirent->name[1] == '.')) {
/*
* directory hasn't been created yet.
*/
problem = PR_2_LINK_ROOT;
- } else if ((dot_state > 1) &&
- (dirent->name_len & 0xFF) == 0) {
+ } else if ((dot_state > 1) && (name_len == 0)) {
/*
* Don't allow zero-length directory names.
*/
#ifdef ENABLE_HTREE
if (dx_db) {
ext2fs_dirhash(dx_dir->hashversion, dirent->name,
- (dirent->name_len & 0xFF),
+ ext2fs_dirent_name_len(dirent),
fs->super->s_hash_seed, &hash, 0);
if (hash < dx_db->min_hash)
dx_db->min_hash = hash;
errcode_t retval;
struct problem_context pctx;
- if ((dirent->name_len & 0xFF) != 2)
+ if (ext2fs_dirent_name_len(dirent) != 2)
return 0;
if (strncmp(dirent->name, "..", 2))
return 0;
dirent->inode = fp->parent;
if (fp->ctx->fs->super->s_feature_incompat &
EXT2_FEATURE_INCOMPAT_FILETYPE)
- dirent->name_len = (dirent->name_len & 0xFF) |
- (EXT2_FT_DIR << 8);
+ ext2fs_dirent_set_file_type(dirent, EXT2_FT_DIR);
else
- dirent->name_len = dirent->name_len & 0xFF;
+ ext2fs_dirent_set_file_type(dirent, EXT2_FT_UNKNOWN);
fp->done++;
return DIRENT_ABORT | DIRENT_CHANGED;
struct hash_entry *new_array, *ent;
struct ext2_dir_entry *dirent;
char *dir;
- unsigned int offset, dir_offset, rec_len;
+ unsigned int offset, dir_offset, rec_len, name_len;
int hash_alg;
if (blockcnt < 0)
while (dir_offset < fs->blocksize) {
dirent = (struct ext2_dir_entry *) (dir + dir_offset);
(void) ext2fs_get_rec_len(fs, dirent, &rec_len);
+ name_len = ext2fs_dirent_name_len(dirent);
if (((dir_offset + rec_len) > fs->blocksize) ||
(rec_len < 8) ||
((rec_len % 4) != 0) ||
- (((dirent->name_len & 0xFF)+8U) > rec_len)) {
+ (name_len + 8 > rec_len)) {
fd->err = EXT2_ET_DIR_CORRUPTED;
return BLOCK_ABORT;
}
dir_offset += rec_len;
if (dirent->inode == 0)
continue;
- if (!fd->compress && ((dirent->name_len&0xFF) == 1) &&
+ if (!fd->compress && (name_len == 1) &&
(dirent->name[0] == '.'))
continue;
- if (!fd->compress && ((dirent->name_len&0xFF) == 2) &&
+ if (!fd->compress && (name_len == 2) &&
(dirent->name[0] == '.') && (dirent->name[1] == '.')) {
fd->parent = dirent->inode;
continue;
}
ent = fd->harray + fd->num_array++;
ent->dir = dirent;
- fd->dir_size += EXT2_DIR_REC_LEN(dirent->name_len & 0xFF);
+ fd->dir_size += EXT2_DIR_REC_LEN(name_len);
ent->ino = dirent->inode;
if (fd->compress)
ent->hash = ent->minor_hash = 0;
else {
fd->err = ext2fs_dirhash(hash_alg, dirent->name,
- dirent->name_len & 0xFF,
+ name_len,
fs->super->s_hash_seed,
&ent->hash, &ent->minor_hash);
if (fd->err)
{
const struct hash_entry *he_a = (const struct hash_entry *) a;
const struct hash_entry *he_b = (const struct hash_entry *) b;
+ unsigned int he_a_len, he_b_len;
int ret;
int min_len;
- min_len = he_a->dir->name_len;
- if (min_len > he_b->dir->name_len)
- min_len = he_b->dir->name_len;
+ he_a_len = ext2fs_dirent_name_len(he_a->dir);
+ he_b_len = ext2fs_dirent_name_len(he_b->dir);
+ min_len = he_a_len;
+ if (min_len > he_b_len)
+ min_len = he_b_len;
ret = strncmp(he_a->dir->name, he_b->dir->name, min_len);
if (ret == 0) {
- if (he_a->dir->name_len > he_b->dir->name_len)
+ if (he_a_len > he_b_len)
ret = 1;
- else if (he_a->dir->name_len < he_b->dir->name_len)
+ else if (he_a_len < he_b_len)
ret = -1;
else
ret = he_b->dir->inode - he_a->dir->inode;
* expand the length of the filename beyond the padding available in
* the directory entry.
*/
-static void mutate_name(char *str, __u16 *len)
+static void mutate_name(char *str, unsigned int *len)
{
int i;
- __u16 l = *len & 0xFF, h = *len & 0xff00;
+ unsigned int l = *len;
/*
* First check to see if it looks the name has been mutated
l = (l+3) & ~3;
str[l-2] = '~';
str[l-1] = '0';
- *len = l | h;
+ *len = l;
return;
}
for (i = l-1; i >= 0; i--) {
int i, j;
int fixed = 0;
char new_name[256];
- __u16 new_len;
+ unsigned int new_len;
int hash_alg;
clear_problem_context(&pctx);
ent = fd->harray + i;
prev = ent - 1;
if (!ent->dir->inode ||
- ((ent->dir->name_len & 0xFF) !=
- (prev->dir->name_len & 0xFF)) ||
- (strncmp(ent->dir->name, prev->dir->name,
- ent->dir->name_len & 0xFF)))
+ (ext2fs_dirent_name_len(ent->dir) !=
+ ext2fs_dirent_name_len(prev->dir)) ||
+ strncmp(ent->dir->name, prev->dir->name,
+ ext2fs_dirent_name_len(ent->dir)))
continue;
pctx.dirent = ent->dir;
if ((ent->dir->inode == prev->dir->inode) &&
fixed++;
continue;
}
- memcpy(new_name, ent->dir->name, ent->dir->name_len & 0xFF);
- new_len = ent->dir->name_len;
+ new_len = ext2fs_dirent_name_len(ent->dir);
+ memcpy(new_name, ent->dir->name, new_len);
mutate_name(new_name, &new_len);
for (j=0; j < fd->num_array; j++) {
if ((i==j) ||
- ((new_len & 0xFF) !=
- (fd->harray[j].dir->name_len & 0xFF)) ||
- (strncmp(new_name, fd->harray[j].dir->name,
- new_len & 0xFF)))
+ (new_len !=
+ ext2fs_dirent_name_len(fd->harray[j].dir)) ||
+ strncmp(new_name, fd->harray[j].dir->name, new_len))
continue;
mutate_name(new_name, &new_len);
j = -1;
}
- new_name[new_len & 0xFF] = 0;
+ new_name[new_len] = 0;
pctx.str = new_name;
if (fix_problem(ctx, PR_2_NON_UNIQUE_FILE, &pctx)) {
- memcpy(ent->dir->name, new_name, new_len & 0xFF);
- ent->dir->name_len = new_len;
- ext2fs_dirhash(hash_alg, ent->dir->name,
- ent->dir->name_len & 0xFF,
+ memcpy(ent->dir->name, new_name, new_len);
+ ext2fs_dirent_set_name_len(ent->dir, new_len);
+ ext2fs_dirhash(hash_alg, ent->dir->name, new_len,
fs->super->s_hash_seed,
&ent->hash, &ent->minor_hash);
fixed++;
ent = fd->harray + i;
if (ent->dir->inode == 0)
continue;
- rec_len = EXT2_DIR_REC_LEN(ent->dir->name_len & 0xFF);
+ rec_len = EXT2_DIR_REC_LEN(ext2fs_dirent_name_len(ent->dir));
if (rec_len > left) {
if (left) {
left += prev_rec_len;
outdir->hashes[outdir->num-1] = ent->hash;
}
dirent->inode = ent->dir->inode;
- dirent->name_len = ent->dir->name_len;
+ ext2fs_dirent_set_name_len(dirent,
+ ext2fs_dirent_name_len(ent->dir));
+ ext2fs_dirent_set_file_type(dirent,
+ ext2fs_dirent_file_type(ent->dir));
retval = ext2fs_set_rec_len(fs, rec_len, dirent);
if (retval)
return retval;
prev_rec_len = rec_len;
- memcpy(dirent->name, ent->dir->name, dirent->name_len & 0xFF);
+ memcpy(dirent->name, ent->dir->name,
+ ext2fs_dirent_name_len(dirent));
offset += rec_len;
left -= rec_len;
if (left < slack) {
int csum_size = 0;
if (fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_FILETYPE)
- filetype = EXT2_FT_DIR << 8;
+ filetype = EXT2_FT_DIR;
memset(buf, 0, fs->blocksize);
dir = (struct ext2_dir_entry *) buf;
dir->inode = ino;
dir->name[0] = '.';
- dir->name_len = 1 | filetype;
+ ext2fs_dirent_set_name_len(dir, 1);
+ ext2fs_dirent_set_file_type(dir, filetype);
dir->rec_len = 12;
dir = (struct ext2_dir_entry *) (buf + 12);
dir->inode = parent;
dir->name[0] = '.';
dir->name[1] = '.';
- dir->name_len = 2 | filetype;
+ ext2fs_dirent_set_name_len(dir, 2);
+ ext2fs_dirent_set_file_type(dir, filetype);
dir->rec_len = fs->blocksize - 12;
root = (struct ext2_dx_root_info *) (buf+24);
offset += rec_len;
if ((rec_len < 8) ||
((rec_len % 4) != 0) ||
- ((((unsigned) dirent->name_len & 0xFF)+8) > rec_len))
+ ((ext2fs_dirent_name_len(dirent)+8) > rec_len))
return 0;
}
return (offset == final_offset);
if (((offset + rec_len) > fs->blocksize) ||
(rec_len < 8) ||
((rec_len % 4) != 0) ||
- ((((unsigned) dirent->name_len & 0xFF)+8) > rec_len)) {
+ ((ext2fs_dirent_name_len(dirent)+8) > rec_len)) {
ctx->errcode = EXT2_ET_DIR_CORRUPTED;
return BLOCK_ABORT;
}
next_real_entry += rec_len;
if (ctx->flags & DIRENT_FLAG_INCLUDE_REMOVED) {
- size = ((dirent->name_len & 0xFF) + 11) & ~3;
+ size = (ext2fs_dirent_name_len(dirent) + 11) & ~3;
if (rec_len != size) {
unsigned int final_offset;
* stored in intel byte order, and the name_len field could never be
* bigger than 255 chars, it's safe to reclaim the extra byte for the
* file_type field.
+ *
+ * This structure is deprecated due to endianity issues. Please use struct
+ * ext2_dir_entry and accessor functions
+ * ext2fs_dirent_name_len
+ * ext2fs_dirent_set_name_len
+ * ext2fs_dirent_file_type
+ * ext2fs_dirent_set_file_type
+ * to get and set name_len and file_type fields.
*/
struct ext2_dir_entry_2 {
__u32 inode; /* Inode number */
return ((a - 1) / b) + 1;
}
+_INLINE_ int ext2fs_dirent_name_len(const struct ext2_dir_entry *entry)
+{
+ return entry->name_len & 0xff;
+}
+
+_INLINE_ void ext2fs_dirent_set_name_len(struct ext2_dir_entry *entry, int len)
+{
+ entry->name_len = (entry->name_len & 0xff00) | (len & 0xff);
+}
+
+_INLINE_ int ext2fs_dirent_file_type(const struct ext2_dir_entry *entry)
+{
+ return entry->name_len >> 8;
+}
+
+_INLINE_ void ext2fs_dirent_set_file_type(struct ext2_dir_entry *entry, int type)
+{
+ entry->name_len = (entry->name_len & 0xff) | (type << 8);
+}
+
#undef _INLINE_
#endif
{
struct get_pathname_struct *gp;
errcode_t retval;
+ int name_len = ext2fs_dirent_name_len(dirent);
gp = (struct get_pathname_struct *) priv_data;
- if (((dirent->name_len & 0xFF) == 2) &&
- !strncmp(dirent->name, "..", 2))
+ if ((name_len == 2) && !strncmp(dirent->name, "..", 2))
gp->parent = dirent->inode;
if (dirent->inode == gp->search_ino) {
- retval = ext2fs_get_mem((dirent->name_len & 0xFF) + 1,
- &gp->name);
+ retval = ext2fs_get_mem(name_len + 1, &gp->name);
if (retval) {
gp->errcode = retval;
return DIRENT_ABORT;
}
- strncpy(gp->name, dirent->name, (dirent->name_len & 0xFF));
- gp->name[dirent->name_len & 0xFF] = '\0';
+ strncpy(gp->name, dirent->name, name_len);
+ gp->name[name_len] = '\0';
return DIRENT_ABORT;
}
return 0;
* truncate it and return.
*/
if (dirent->inode) {
- min_rec_len = EXT2_DIR_REC_LEN(dirent->name_len & 0xFF);
+ min_rec_len = EXT2_DIR_REC_LEN(ext2fs_dirent_name_len(dirent));
if (curr_rec_len < (min_rec_len + rec_len))
return ret;
rec_len = curr_rec_len - min_rec_len;
next = (struct ext2_dir_entry *) (buf + offset +
dirent->rec_len);
next->inode = 0;
- next->name_len = 0;
+ ext2fs_dirent_set_name_len(next, 0);
+ ext2fs_dirent_set_file_type(next, 0);
ls->err = ext2fs_set_rec_len(ls->fs, rec_len, next);
if (ls->err)
return DIRENT_ABORT;
if (curr_rec_len < rec_len)
return ret;
dirent->inode = ls->inode;
- dirent->name_len = ls->namelen;
+ ext2fs_dirent_set_name_len(dirent, ls->namelen);
strncpy(dirent->name, ls->name, ls->namelen);
if (ls->sb->s_feature_incompat & EXT2_FEATURE_INCOMPAT_FILETYPE)
- dirent->name_len |= (ls->flags & 0x7) << 8;
+ ext2fs_dirent_set_file_type(dirent, ls->flags & 0x7);
ls->done++;
return DIRENT_ABORT|DIRENT_CHANGED;
{
struct lookup_struct *ls = (struct lookup_struct *) priv_data;
- if (ls->len != (dirent->name_len & 0xFF))
+ if (ls->len != ext2fs_dirent_name_len(dirent))
return 0;
- if (strncmp(ls->name, dirent->name, (dirent->name_len & 0xFF)))
+ if (strncmp(ls->name, dirent->name, ext2fs_dirent_name_len(dirent)))
return 0;
*ls->inode = dirent->inode;
ls->found++;
if (dir_ino) {
if (fs->super->s_feature_incompat &
EXT2_FEATURE_INCOMPAT_FILETYPE)
- filetype = EXT2_FT_DIR << 8;
+ filetype = EXT2_FT_DIR;
/*
* Set up entry for '.'
*/
dir->inode = dir_ino;
- dir->name_len = 1 | filetype;
+ ext2fs_dirent_set_name_len(dir, 1);
+ ext2fs_dirent_set_file_type(dir, filetype);
dir->name[0] = '.';
rec_len = (fs->blocksize - csum_size) - EXT2_DIR_REC_LEN(1);
dir->rec_len = EXT2_DIR_REC_LEN(1);
if (retval)
return retval;
dir->inode = parent_ino;
- dir->name_len = 2 | filetype;
+ ext2fs_dirent_set_name_len(dir, 2);
+ ext2fs_dirent_set_file_type(dir, filetype);
dir->name[0] = '.';
dir->name[1] = '.';
ls->prev = dirent;
if (ls->name) {
- if ((dirent->name_len & 0xFF) != ls->namelen)
+ if (ext2fs_dirent_name_len(dirent) != ls->namelen)
return 0;
- if (strncmp(ls->name, dirent->name, dirent->name_len & 0xFF))
+ if (strncmp(ls->name, dirent->name, ext2fs_dirent_name_len(dirent)))
return 0;
}
if (ls->inode) {
ctx->errcode = ext2fs_get_rec_len(fs, last_de, &rec_len);
if (ctx->errcode)
return BLOCK_ABORT;
- name_size = last_de->name_len & 0xFF;
+ name_size = ext2fs_dirent_name_len(last_de);
if (!EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
EXT4_FEATURE_RO_COMPAT_METADATA_CSUM)) {
#ifdef RESIZE2FS_DEBUG
if (is->rfs->flags & RESIZE_DEBUG_INODEMAP)
printf("Inode translate (dir=%u, name=%.*s, %u->%u)\n",
- dir, dirent->name_len&0xFF, dirent->name,
+ dir, ext2fs_dirent_name_len(dirent), dirent->name,
dirent->inode, new_inode);
#endif