summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKaho Ng <ngkaho1234@gmail.com>2016-05-16 12:27:12 +0800
committerKaho Ng <ngkaho1234@gmail.com>2016-05-16 12:55:24 +0800
commita59596c45bfaa80d532ed7f9ef2c6c87f8ef5340 (patch)
tree110dc1037079c597bc85f93e71fefe34d5ff9cf8 /src
parent1cf71b8e4ad525d575ae130a658b02f67f5cc495 (diff)
ext4_xattr: ext4_xattr_insert_item now returns error code
Diffstat (limited to 'src')
-rw-r--r--src/ext4_xattr.c28
1 files changed, 22 insertions, 6 deletions
diff --git a/src/ext4_xattr.c b/src/ext4_xattr.c
index ca6a947..013879e 100644
--- a/src/ext4_xattr.c
+++ b/src/ext4_xattr.c
@@ -446,12 +446,17 @@ ext4_xattr_lookup_item(struct ext4_xattr_ref *xattr_ref, uint8_t name_index,
static struct ext4_xattr_item *
ext4_xattr_insert_item(struct ext4_xattr_ref *xattr_ref, uint8_t name_index,
const char *name, size_t name_len, const void *data,
- size_t data_size)
+ size_t data_size,
+ int *err)
{
struct ext4_xattr_item *item;
item = ext4_xattr_item_alloc(name_index, name, name_len);
- if (!item)
+ if (!item) {
+ if (err)
+ *err = ENOMEM;
+
return NULL;
+ }
if ((xattr_ref->ea_size + EXT4_XATTR_SIZE(data_size) +
EXT4_XATTR_LEN(item->name_len)
@@ -465,6 +470,9 @@ ext4_xattr_insert_item(struct ext4_xattr_ref *xattr_ref, uint8_t name_index,
sizeof(struct ext4_xattr_header))) {
ext4_xattr_item_free(item);
+ if (err)
+ *err = ENOSPC;
+
return NULL;
}
item->in_inode = true;
@@ -473,13 +481,20 @@ ext4_xattr_insert_item(struct ext4_xattr_ref *xattr_ref, uint8_t name_index,
(int32_t)EXT4_XATTR_LEN(item->name_len) < 0) {
if (xattr_ref->block_size_rem -
(int32_t)EXT4_XATTR_SIZE(data_size) -
- (int32_t)EXT4_XATTR_LEN(item->name_len) < 0)
+ (int32_t)EXT4_XATTR_LEN(item->name_len) < 0) {
+ if (err)
+ *err = ENOSPC;
+
return NULL;
+ }
item->in_inode = false;
}
if (ext4_xattr_item_alloc_data(item, data, data_size) != EOK) {
ext4_xattr_item_free(item);
+ if (err)
+ *err = ENOMEM;
+
return NULL;
}
RB_INSERT(ext4_xattr_tree, &xattr_ref->root, item);
@@ -495,6 +510,9 @@ ext4_xattr_insert_item(struct ext4_xattr_ref *xattr_ref, uint8_t name_index,
EXT4_XATTR_LEN(item->name_len);
}
xattr_ref->dirty = true;
+ if (err)
+ *err = EOK;
+
return item;
}
@@ -918,9 +936,7 @@ int ext4_fs_set_xattr(struct ext4_xattr_ref *ref, uint8_t name_index,
goto Finish;
}
item = ext4_xattr_insert_item(ref, name_index, name, name_len,
- data, data_size);
- if (!item)
- ret = ENOMEM;
+ data, data_size, &ret);
}
Finish:
return ret;