diff options
Diffstat (limited to 'libglusterfs/src/gf-dirent.c')
-rw-r--r-- | libglusterfs/src/gf-dirent.c | 39 |
1 files changed, 32 insertions, 7 deletions
diff --git a/libglusterfs/src/gf-dirent.c b/libglusterfs/src/gf-dirent.c index b5f395afc36..99c0eb6441d 100644 --- a/libglusterfs/src/gf-dirent.c +++ b/libglusterfs/src/gf-dirent.c @@ -171,6 +171,20 @@ gf_dirent_for_name (const char *name) return gf_dirent; } +void +gf_dirent_entry_free (gf_dirent_t *entry) +{ + if (!entry) + return; + + if (entry->dict) + dict_unref (entry->dict); + if (entry->inode) + inode_unref (entry->inode); + + list_del (&entry->list); + GF_FREE (entry); +} void gf_dirent_free (gf_dirent_t *entries) @@ -185,16 +199,27 @@ gf_dirent_free (gf_dirent_t *entries) return; list_for_each_entry_safe (entry, tmp, &entries->list, list) { - if (entry->dict) - dict_unref (entry->dict); - if (entry->inode) - inode_unref (entry->inode); - - list_del (&entry->list); - GF_FREE (entry); + gf_dirent_entry_free (entry); } } +gf_dirent_t * +entry_copy (gf_dirent_t *source) +{ + gf_dirent_t *sink = NULL; + + sink = gf_dirent_for_name (source->d_name); + + sink->d_off = source->d_off; + sink->d_ino = source->d_ino; + sink->d_type = source->d_type; + sink->d_stat = source->d_stat; + + if (source->inode) + sink->inode = inode_ref (source->inode); + return sink; +} + void gf_link_inode_from_dirent (xlator_t *this, inode_t *parent, gf_dirent_t *entry) { |