[libvirt] [PATCH v3 1/4] virfile: Introduce virFileRemoveLastComponent

Michal Privoznik mprivozn at redhat.com
Thu May 12 12:36:21 UTC 2016


Move some parts of virStorageFileRemoveLastPathComponent
into a separate function so they can be reused.

Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
---
 src/libvirt_private.syms  |  1 +
 src/util/virfile.c        | 17 +++++++++++++++++
 src/util/virfile.h        |  1 +
 src/util/virstoragefile.c |  6 +-----
 4 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index a980a32..fb24808 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -1517,6 +1517,7 @@ virFileReadHeaderFD;
 virFileReadLimFD;
 virFileRelLinkPointsTo;
 virFileRemove;
+virFileRemoveLastComponent;
 virFileResolveAllLinks;
 virFileResolveLink;
 virFileRewrite;
diff --git a/src/util/virfile.c b/src/util/virfile.c
index 4d7b510..9d460b9 100644
--- a/src/util/virfile.c
+++ b/src/util/virfile.c
@@ -3132,6 +3132,23 @@ virFileSanitizePath(const char *path)
     return cleanpath;
 }
 
+/**
+ * virFileRemoveLastComponent:
+ *
+ * For given path cut off the last component. If there's no dir
+ * separator (whole path is one file name), @path is turned into
+ * an empty string.
+ */
+void
+virFileRemoveLastComponent(char *path)
+{
+    char *tmp;
+
+    if ((tmp = strrchr(path, VIR_FILE_DIR_SEPARATOR)))
+        tmp[1] = '\0';
+    else
+        path[0] = '\0';
+}
 
 /**
  * virFilePrintf:
diff --git a/src/util/virfile.h b/src/util/virfile.h
index dc62eab..dae234e 100644
--- a/src/util/virfile.h
+++ b/src/util/virfile.h
@@ -268,6 +268,7 @@ bool virFileIsAbsPath(const char *path);
 int virFileAbsPath(const char *path,
                    char **abspath) ATTRIBUTE_RETURN_CHECK;
 const char *virFileSkipRoot(const char *path);
+void virFileRemoveLastComponent(char *path);
 
 int virFileOpenTty(int *ttymaster,
                    char **ttyName,
diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
index d4e61ca..d2da9e7 100644
--- a/src/util/virstoragefile.c
+++ b/src/util/virstoragefile.c
@@ -2868,16 +2868,12 @@ virStorageFileCanonicalizePath(const char *path,
 static char *
 virStorageFileRemoveLastPathComponent(const char *path)
 {
-    char *tmp;
     char *ret;
 
     if (VIR_STRDUP(ret, path ? path : "") < 0)
         return NULL;
 
-    if ((tmp = strrchr(ret, '/')))
-        tmp[1] = '\0';
-    else
-        ret[0] = '\0';
+    virFileRemoveLastComponent(ret);
 
     return ret;
 }
-- 
2.8.1




More information about the libvir-list mailing list