Exemple #1
0
void do_rm_xattr(int argc, char **argv)
{
	ext2_ino_t ino;
	struct ext2_xattr_handle *h;
	int i;
	errcode_t err;

	if (argc < 3) {
		printf("%s: Usage: %s <file> <attrs>...\n", argv[0], argv[0]);
		return;
	}

	if (check_fs_open(argv[0]))
		return;
	if (check_fs_read_write(argv[0]))
		return;
	if (check_fs_bitmaps(argv[0]))
		return;

	ino = string_to_inode(argv[1]);
	if (!ino)
		return;

	err = ext2fs_xattrs_open(current_fs, ino, &h);
	if (err)
		return;

	err = ext2fs_xattrs_read(h);
	if (err)
		goto out;

	for (i = 2; i < argc; i++) {
		size_t buflen;
		char *buf;

		err = ext2fs_xattr_remove(h, argv[i]);
		if (err)
			goto out;
	}

	err = ext2fs_xattrs_write(h);
	if (err)
		goto out;
out:
	ext2fs_xattrs_close(&h);
	if (err)
		com_err(argv[0], err, "while removing extended attribute");
}
Exemple #2
0
errcode_t ext2fs_inline_data_ea_remove(ext2_filsys fs, ext2_ino_t ino)
{
    struct ext2_xattr_handle *handle;
    errcode_t retval;

    retval = ext2fs_xattrs_open(fs, ino, &handle);
    if (retval)
        return retval;

    retval = ext2fs_xattrs_read(handle);
    if (retval)
        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;
}