diff options
author | Emmanuel Dreyfus <manu@netbsd.org> | 2013-12-26 09:54:01 +0100 |
---|---|---|
committer | Vijay Bellur <vbellur@redhat.com> | 2014-01-02 22:00:37 -0800 |
commit | 652af839a0e332d081ed5a1beb58e8dc6ea88bfd (patch) | |
tree | 3ad9c207052c947209fe7889c47be0ca5004997f /xlators | |
parent | ea88a6fa28f842ea777ec850fde746573ded7b33 (diff) |
Use linkat() instead of link() for portability sake
This is a backport of Iccd27ac076b7a74e40dcbaa1c4762fd3ad59da5f
POSIX does not says wether link(2) on symlink should link on
symlink itself or on target. Linux use symlink, most other
systems use target. Using linkat(2) allows the behavior to be
specified, so that the behavior is portable.
Also fix configure test for NetBSD linkata(2), which ceased to work.
BUG: 764655
Change-Id: I7cf9e62ea19c7eb356935c11b480cf637c83126b
Signed-off-by: Emmanuel Dreyfus <manu@netbsd.org>
Reviewed-on: http://review.gluster.org/6594
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Vijay Bellur <vbellur@redhat.com>
Diffstat (limited to 'xlators')
-rw-r--r-- | xlators/features/index/src/index.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/xlators/features/index/src/index.c b/xlators/features/index/src/index.c index 9253120f3f2..295f6819830 100644 --- a/xlators/features/index/src/index.c +++ b/xlators/features/index/src/index.c @@ -407,7 +407,12 @@ sync_base_indices (void *index_priv) snprintf (base_index_path, PATH_MAX, "%s/%s", base_indices_holder, entry->d_name); +#ifdef HAVE_LINKAT + /* see HAVE_LINKAT in xlators/storage/posix/src/posix.c */ + ret = linkat (AT_FDCWD, xattrop_index_path, AT_FDCWD, base_index_path, 0); +#else ret = link (xattrop_index_path, base_index_path); +#endif if (ret && errno != EEXIST) goto out; @@ -543,7 +548,12 @@ index_add (xlator_t *this, uuid_t gfid, const char *subdir) index_get_index (priv, index); make_index_path (priv->index_basepath, subdir, index, index_path, sizeof (index_path)); +#ifdef HAVE_LINKAT + /* see HAVE_LINKAT in xlators/storage/posix/src/posix.c */ + ret = linkat (AT_FDCWD, index_path, AT_FDCWD, gfid_path, 0); +#else ret = link (index_path, gfid_path); +#endif if (!ret || (errno == EEXIST)) { ret = 0; index_created = 1; @@ -576,7 +586,12 @@ index_add (xlator_t *this, uuid_t gfid, const char *subdir) if (fd >= 0) close (fd); +#ifdef HAVE_LINKAT + /* see HAVE_LINKAT in xlators/storage/posix/src/posix.c */ + ret = linkat (AT_FDCWD, index_path, AT_FDCWD, gfid_path, 0); +#else ret = link (index_path, gfid_path); +#endif if (ret && (errno != EEXIST)) { gf_log (this->name, GF_LOG_ERROR, "%s: Not able to " "add to index (%s)", uuid_utoa (gfid), @@ -590,7 +605,12 @@ index_add (xlator_t *this, uuid_t gfid, const char *subdir) make_index_path (priv->index_basepath, GF_BASE_INDICES_HOLDER_GFID, index, base_path, sizeof (base_path)); +#ifdef HAVE_LINKAT + /* see HAVE_LINKAT in xlators/storage/posix/src/posix.c */ + ret = linkat (AT_FDCWD, index_path, AT_FDCWD, base_path, 0); +#else ret = link (index_path, base_path); +#endif if (ret) goto out; } |