summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xlibglusterfsclient/src/libglusterfsclient.c64
-rwxr-xr-xlibglusterfsclient/src/libglusterfsclient.h14
2 files changed, 78 insertions, 0 deletions
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 = {
};
diff --git a/libglusterfsclient/src/libglusterfsclient.h b/libglusterfsclient/src/libglusterfsclient.h
index 74575fa61..1684381c9 100755
--- a/libglusterfsclient/src/libglusterfsclient.h
+++ b/libglusterfsclient/src/libglusterfsclient.h
@@ -1325,6 +1325,20 @@ glusterfs_chdir (const char *path);
int
glusterfs_fchdir (glusterfs_file_t fd);
+/* copies the current working directory into @buf if it is big enough
+ *
+ * @buf: buffer to copy into it. If @buf is NULL, a buffer will be allocated.
+ * The size of the buffer will be @size if it is not zero, otherwise the
+ * size will be big enough to hold the current working directory.
+ * @size: size of the buffer.
+ *
+ * Returns the pointer to buffer holding current working directory on success
+ * and NULL on failure.
+ */
+
+char *
+glusterfs_getcwd (char *buf, size_t size);
+
/* FIXME: review the need for these apis */
/* added for log related initialization in booster fork implementation */
void