summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShehjar Tikoo <shehjart@zresearch.com>2009-05-05 15:58:48 +0530
committerAnand V. Avati <avati@amp.gluster.com>2009-05-05 17:30:25 +0530
commitdec408299ea7a2cb9aa9aa3ea3a3c72ee79169de (patch)
treef414d75a03f41a438dcf473bd8afad05206389b7
parent4353ba5cdf0dab29e30997ce5b67055c8f1e1cba (diff)
libglusterfsclient: Add remove API
Signed-off-by: Anand V. Avati <avati@amp.gluster.com>
-rwxr-xr-xlibglusterfsclient/src/libglusterfsclient.c61
-rwxr-xr-xlibglusterfsclient/src/libglusterfsclient.h25
2 files changed, 86 insertions, 0 deletions
diff --git a/libglusterfsclient/src/libglusterfsclient.c b/libglusterfsclient/src/libglusterfsclient.c
index 6d8910fe1..c36d9b4db 100755
--- a/libglusterfsclient/src/libglusterfsclient.c
+++ b/libglusterfsclient/src/libglusterfsclient.c
@@ -6140,6 +6140,67 @@ out:
return realp;
}
+int
+glusterfs_glh_remove (glusterfs_handle_t handle, const char *path)
+{
+ loc_t loc = {0, };
+ int op_ret = -1;
+ libglusterfs_client_ctx_t *ctx = handle;
+ char *name = NULL;
+
+ GF_VALIDATE_OR_GOTO (LIBGF_XL_NAME, handle, out);
+ GF_VALIDATE_ABSOLUTE_PATH_OR_GOTO (LIBGF_XL_NAME, path, out);
+
+ loc.path = libgf_resolve_path_light ((char *)path);
+ if (!loc.path)
+ goto out;
+
+ op_ret = libgf_client_path_lookup (&loc, ctx, 1);
+ if (op_ret == -1)
+ goto out;
+
+ name = strdup (loc.path);
+ op_ret = libgf_client_loc_fill (&loc, ctx, 0, loc.parent->ino,
+ basename (name));
+ if (op_ret == -1)
+ goto out;
+
+ if (S_ISDIR (loc.inode->st_mode))
+ op_ret = libgf_client_rmdir (ctx, &loc);
+ else
+ op_ret = libgf_client_unlink (ctx, &loc);
+
+out:
+ if (name)
+ FREE (name);
+ return op_ret;
+
+}
+
+int
+glusterfs_remove(const char *pathname)
+{
+ struct vmp_entry *entry = NULL;
+ int op_ret = -1;
+ char *vpath = NULL;
+
+ GF_VALIDATE_OR_GOTO (LIBGF_XL_NAME, pathname, out);
+
+ entry = libgf_vmp_search_entry ((char *)pathname);
+ if (!entry) {
+ errno = ENODEV;
+ goto out;
+ }
+
+ vpath = libgf_vmp_virtual_path (entry, pathname);
+ op_ret = glusterfs_glh_remove (entry->handle, vpath);
+
+out:
+ if (vpath)
+ FREE (vpath);
+ return op_ret;
+}
+
static struct xlator_fops libgf_client_fops = {
};
diff --git a/libglusterfsclient/src/libglusterfsclient.h b/libglusterfsclient/src/libglusterfsclient.h
index 7c0c25062..37fcf04dd 100755
--- a/libglusterfsclient/src/libglusterfsclient.h
+++ b/libglusterfsclient/src/libglusterfsclient.h
@@ -1118,6 +1118,31 @@ glusterfs_glh_rename (glusterfs_handle_t handle, const char *oldpath,
*/
int
glusterfs_rename (const char *oldpath, const char *newpath);
+
+
+
+/* Remove a file or directory in the given glusterfs context.
+ *
+ * @handle : Handle identifying the glusterfs context.
+ * @path : Path of the file or directory to be removed.
+ *
+ *
+ * Returns 0 on success and -1 on error with errno set appropriately.
+ */
+int
+glusterfs_glh_remove (glusterfs_handle_t handle, const char *path);
+
+
+
+/* Remove a file or directory.
+ *
+ * @path : Path of the file or directory to be removed. The
+ * path must be pre-fixed with the VMP.
+ *
+ * Returns 0 on success and -1 on error with errno set appropriately.
+ */
+int
+glusterfs_remove (const char *path);
/* FIXME: review the need for these apis */
/* added for log related initialization in booster fork implementation */
void