From 3940cf2fc26ed0d2417caef87ff25d17ec8d3bb4 Mon Sep 17 00:00:00 2001 From: Raghavendra G Date: Wed, 18 Nov 2009 01:14:58 +0000 Subject: libglusterfsclient: implement glusterfs_getcwd. Signed-off-by: Raghavendra G Signed-off-by: Anand V. Avati BUG: 369 (Samba does not work with booster.) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=369 --- libglusterfsclient/src/libglusterfsclient.c | 64 +++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) (limited to 'libglusterfsclient/src/libglusterfsclient.c') diff --git a/libglusterfsclient/src/libglusterfsclient.c b/libglusterfsclient/src/libglusterfsclient.c index 58803e893..dcfda772e 100755 --- a/libglusterfsclient/src/libglusterfsclient.c +++ b/libglusterfsclient/src/libglusterfsclient.c @@ -7843,6 +7843,70 @@ out: } +char * +glusterfs_getcwd (char *buf, size_t size) +{ + char *res = NULL; + size_t len = 0; + loc_t loc = {0, }; + glusterfs_handle_t handle = NULL; + char vpath[PATH_MAX]; + int32_t op_ret = 0; + + pthread_mutex_lock (&cwdlock); + { + if (!cwd_inited) { + errno = ENODEV; + goto unlock; + } + + if (buf == NULL) { + buf = CALLOC (1, len); + if (buf == NULL) { + gf_log (LIBGF_XL_NAME, GF_LOG_ERROR, + "out of memory"); + goto unlock; + } + } else { + if (size == 0) { + errno = EINVAL; + goto unlock; + } + + if (len > size) { + errno = ERANGE; + goto unlock; + } + } + + strcpy (buf, cwd); + res = buf; + } +unlock: + pthread_mutex_unlock (&cwdlock); + + if (res != NULL) { + handle = libgf_resolved_path_handle (res, vpath); + + if (handle != NULL) { + loc.path = strdup (vpath); + if (loc.path == NULL) { + gf_log (LIBGF_XL_NAME, GF_LOG_ERROR, + "strdup failed"); + } else { + op_ret = libgf_client_path_lookup (&loc, handle, + 0); + if (op_ret == -1) { + res = NULL; + } + } + } + } + + return res; +} + + static struct xlator_fops libgf_client_fops = { }; -- cgit