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"); }
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; }