diff options
| author | Kaho Ng <ngkaho1234@gmail.com> | 2016-05-16 12:27:12 +0800 |
|---|---|---|
| committer | Kaho Ng <ngkaho1234@gmail.com> | 2016-05-16 12:55:24 +0800 |
| commit | a59596c45bfaa80d532ed7f9ef2c6c87f8ef5340 (patch) | |
| tree | 110dc1037079c597bc85f93e71fefe34d5ff9cf8 /src | |
| parent | 1cf71b8e4ad525d575ae130a658b02f67f5cc495 (diff) | |
ext4_xattr: ext4_xattr_insert_item now returns error code
Diffstat (limited to 'src')
| -rw-r--r-- | src/ext4_xattr.c | 28 |
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; |
