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)  {  | 
