retval = ext2fs_xattr_set(handle, "system.data",
data->ea_data, data->ea_size);
- if (retval)
- goto err;
-
- retval = ext2fs_xattrs_write(handle);
-
err:
(void) ext2fs_xattrs_close(&handle);
return retval;
errcode_t ext2fs_inline_data_init(ext2_filsys fs, ext2_ino_t ino)
{
struct ext2_inline_data data;
+ char empty[1] = { '\0' };
data.fs = fs;
data.ino = ino;
data.ea_size = 0;
- data.ea_data = "";
+ data.ea_data = empty;
return ext2fs_inline_data_ea_set(&data);
}
goto err;
retval = ext2fs_xattr_remove(handle, "system.data");
- if (retval)
- goto err;
-
- retval = ext2fs_xattrs_write(handle);
-
err:
(void) ext2fs_xattrs_close(&handle);
return retval;
struct ext2_dir_entry *dir, *dir2;
struct ext2_dir_entry_tail *t;
errcode_t retval;
- unsigned int offset, rec_len;
+ int offset;
+ unsigned int rec_len;
int csum_size = 0;
int filetype = 0;
- if (EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
- EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))
+ if (ext2fs_has_feature_metadata_csum(fs->super))
csum_size = sizeof(struct ext2_dir_entry_tail);
/* Create '.' and '..' */
- if (EXT2_HAS_INCOMPAT_FEATURE(fs->super,
- EXT2_FEATURE_INCOMPAT_FILETYPE))
+ if (ext2fs_has_feature_filetype(fs->super))
filetype = EXT2_FT_DIR;
/*
dir->name[1] = '.';
/*
- * Ajust the last rec_len
+ * Adjust the last rec_len
*/
offset = EXT2_DIR_REC_LEN(1) + EXT2_DIR_REC_LEN(2);
dir = (struct ext2_dir_entry *) (bbuf + offset);
goto errout;
/* Update inode */
- if (EXT2_HAS_INCOMPAT_FEATURE(fs->super, EXT3_FEATURE_INCOMPAT_EXTENTS))
+ if (ext2fs_has_feature_extents(fs->super))
inode->i_flags |= EXT4_EXTENTS_FL;
inode->i_flags &= ~EXT4_INLINE_DATA_FL;
retval = ext2fs_iblk_add_blocks(fs, inode, 1);
errcode_t retval;
/* Update inode */
- if (EXT2_HAS_INCOMPAT_FEATURE(fs->super,
- EXT3_FEATURE_INCOMPAT_EXTENTS)) {
- int i;
- struct ext3_extent_header *eh;
-
- eh = (struct ext3_extent_header *) &inode->i_block[0];
- eh->eh_depth = 0;
- eh->eh_entries = 0;
- eh->eh_magic = EXT3_EXT_MAGIC;
- i = (sizeof(inode->i_block) - sizeof(*eh)) /
- sizeof(struct ext3_extent);
- eh->eh_max = ext2fs_cpu_to_le16(i);
- inode->i_flags |= EXT4_EXTENTS_FL;
+ memset(inode->i_block, 0, sizeof(inode->i_block));
+ if (ext2fs_has_feature_extents(fs->super)) {
+ ext2_extent_handle_t handle;
+
+ inode->i_flags &= ~EXT4_EXTENTS_FL;
+ retval = ext2fs_extent_open2(fs, ino, inode, &handle);
+ if (retval)
+ return retval;
+ ext2fs_extent_free(handle);
}
inode->i_flags &= ~EXT4_INLINE_DATA_FL;
inode->i_size = 0;
memcpy(buf, (void *)inode->i_block, EXT4_MIN_INLINE_DATA_SIZE);
if (data.ea_size > 0)
- memcpy(buf + EXT4_MIN_INLINE_DATA_SIZE,
+ memcpy((char *) buf + EXT4_MIN_INLINE_DATA_SIZE,
data.ea_data, data.ea_size);
if (size)
}
if (size <= EXT4_MIN_INLINE_DATA_SIZE) {
- retval = ext2fs_inline_data_ea_remove(fs, ino);
- if (retval)
- return retval;
memcpy((void *)inode->i_block, buf, size);
return ext2fs_write_inode(fs, ino, inode);
}
return retval;
data.fs = fs;
data.ino = ino;
- data.ea_size = size - EXT4_MIN_INLINE_DATA_SIZE;
- data.ea_data = buf + EXT4_MIN_INLINE_DATA_SIZE;
+ if (size > EXT4_MIN_INLINE_DATA_SIZE)
+ data.ea_size = size - EXT4_MIN_INLINE_DATA_SIZE;
+ else
+ data.ea_size = 0;
+ data.ea_data = (char *) buf + EXT4_MIN_INLINE_DATA_SIZE;
return ext2fs_inline_data_ea_set(&data);
}
errcode_t retval;
size_t size;
char *buf = 0, *cmpbuf = 0;
- int i;
/* create a new file */
retval = ext2fs_new_inode(fs, 2, 010755, 0, &newfile);
if (retval) {
- com_err("file_test", retval, "while allocaing a new inode");
+ com_err("file_test", retval, "while allocating a new inode");
return 1;
}
inode.i_mode = LINUX_S_IFREG;
retval = ext2fs_write_new_inode(fs, newfile, &inode);
if (retval) {
- com_err("file_test", retval, "while writting a new inode");
+ com_err("file_test", retval, "while writing a new inode");
return 1;
}
ext2_filsys fs;
struct ext2_super_block param;
errcode_t retval;
- int i;
/* setup */
initialize_ext2_error_table();
retval = ext2fs_allocate_tables(fs);
if (retval) {
com_err("setup", retval,
- "while allocating tables for test filesysmte");
+ "while allocating tables for test filesystem");
exit(1);
}
/* initialize inode cache */
if (!fs->icache) {
- struct ext2_inode inode;
ext2_ino_t first_ino = EXT2_FIRST_INO(fs->super);
int i;
return 1;
}
printf("tst_inline_data(DIR): OK\n");
+ ext2fs_free(fs);
return 0;
}