[PATCH 07/39] Remove virStorageFileCanonicalizePath

Peter Krempa pkrempa at redhat.com
Thu Apr 1 13:52:06 UTC 2021


Signed-off-by: Peter Krempa <pkrempa at redhat.com>
---
 src/libvirt_private.syms  |   1 -
 src/util/virstoragefile.c | 210 --------------------------------------
 src/util/virstoragefile.h |   8 --
 3 files changed, 219 deletions(-)

diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 62ccda467f..9208db2056 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -3231,7 +3231,6 @@ virSocketAddrSetPort;


 # util/virstoragefile.h
-virStorageFileCanonicalizePath;
 virStorageFileGetNPIVKey;
 virStorageFileGetSCSIKey;
 virStorageFileParseBackingStoreStr;
diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
index 9df891b57c..e6bc723d1e 100644
--- a/src/util/virstoragefile.c
+++ b/src/util/virstoragefile.c
@@ -214,213 +214,3 @@ virStorageFileParseBackingStoreStr(const char *str,
     *chainIndex = idx;
     return 0;
 }
-
-
-static char *
-virStorageFileCanonicalizeFormatPath(char **components,
-                                     size_t ncomponents,
-                                     bool beginSlash,
-                                     bool beginDoubleSlash)
-{
-    g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
-    size_t i;
-    char *ret = NULL;
-
-    if (beginSlash)
-        virBufferAddLit(&buf, "/");
-
-    if (beginDoubleSlash)
-        virBufferAddLit(&buf, "/");
-
-    for (i = 0; i < ncomponents; i++) {
-        if (i != 0)
-            virBufferAddLit(&buf, "/");
-
-        virBufferAdd(&buf, components[i], -1);
-    }
-
-    /* if the output string is empty just return an empty string */
-    if (!(ret = virBufferContentAndReset(&buf)))
-        ret = g_strdup("");
-
-    return ret;
-}
-
-
-static int
-virStorageFileCanonicalizeInjectSymlink(const char *path,
-                                        size_t at,
-                                        char ***components,
-                                        size_t *ncomponents)
-{
-    char **tmp = NULL;
-    char **next;
-    size_t ntmp = 0;
-    int ret = -1;
-
-    if (!(tmp = virStringSplitCount(path, "/", 0, &ntmp)))
-        goto cleanup;
-
-    /* prepend */
-    for (next = tmp; *next; next++) {
-        if (VIR_INSERT_ELEMENT(*components, at, *ncomponents, *next) < 0)
-            goto cleanup;
-
-        at++;
-    }
-
-    ret = 0;
-
- cleanup:
-    virStringListFreeCount(tmp, ntmp);
-    return ret;
-}
-
-
-char *
-virStorageFileCanonicalizePath(const char *path,
-                               virStorageFileSimplifyPathReadlinkCallback cb,
-                               void *cbdata)
-{
-    GHashTable *cycle = NULL;
-    bool beginSlash = false;
-    bool beginDoubleSlash = false;
-    char **components = NULL;
-    size_t ncomponents = 0;
-    size_t i = 0;
-    size_t j = 0;
-    int rc;
-    char *ret = NULL;
-    g_autofree char *linkpath = NULL;
-    g_autofree char *currentpath = NULL;
-
-    if (path[0] == '/') {
-        beginSlash = true;
-
-        if (path[1] == '/' && path[2] != '/')
-            beginDoubleSlash = true;
-    }
-
-    if (!(cycle = virHashNew(NULL)))
-        goto cleanup;
-
-    if (!(components = virStringSplitCount(path, "/", 0, &ncomponents)))
-        goto cleanup;
-
-    j = 0;
-    while (j < ncomponents) {
-        /* skip slashes */
-        if (STREQ(components[j], "")) {
-            VIR_FREE(components[j]);
-            VIR_DELETE_ELEMENT(components, j, ncomponents);
-            continue;
-        }
-        j++;
-    }
-
-    while (i < ncomponents) {
-        /* skip '.'s unless it's the last one remaining */
-        if (STREQ(components[i], ".") &&
-            (beginSlash || ncomponents  > 1)) {
-            VIR_FREE(components[i]);
-            VIR_DELETE_ELEMENT(components, i, ncomponents);
-            continue;
-        }
-
-        /* resolve changes to parent directory */
-        if (STREQ(components[i], "..")) {
-            if (!beginSlash &&
-                (i == 0 || STREQ(components[i - 1], ".."))) {
-                i++;
-                continue;
-            }
-
-            VIR_FREE(components[i]);
-            VIR_DELETE_ELEMENT(components, i, ncomponents);
-
-            if (i != 0) {
-                VIR_FREE(components[i - 1]);
-                VIR_DELETE_ELEMENT(components, i - 1, ncomponents);
-                i--;
-            }
-
-            continue;
-        }
-
-        /* check if the actual path isn't resulting into a symlink */
-        if (!(currentpath = virStorageFileCanonicalizeFormatPath(components,
-                                                                 i + 1,
-                                                                 beginSlash,
-                                                                 beginDoubleSlash)))
-            goto cleanup;
-
-        if ((rc = cb(currentpath, &linkpath, cbdata)) < 0)
-            goto cleanup;
-
-        if (rc == 0) {
-            if (virHashLookup(cycle, currentpath)) {
-                virReportSystemError(ELOOP,
-                                     _("Failed to canonicalize path '%s'"), path);
-                goto cleanup;
-            }
-
-            if (virHashAddEntry(cycle, currentpath, (void *) 1) < 0)
-                goto cleanup;
-
-            if (linkpath[0] == '/') {
-                /* kill everything from the beginning including the actual component */
-                i++;
-                while (i--) {
-                    VIR_FREE(components[0]);
-                    VIR_DELETE_ELEMENT(components, 0, ncomponents);
-                }
-                beginSlash = true;
-
-                if (linkpath[1] == '/' && linkpath[2] != '/')
-                    beginDoubleSlash = true;
-                else
-                    beginDoubleSlash = false;
-
-                i = 0;
-            } else {
-                VIR_FREE(components[i]);
-                VIR_DELETE_ELEMENT(components, i, ncomponents);
-            }
-
-            if (virStorageFileCanonicalizeInjectSymlink(linkpath,
-                                                        i,
-                                                        &components,
-                                                        &ncomponents) < 0)
-                goto cleanup;
-
-            j = 0;
-            while (j < ncomponents) {
-                /* skip slashes */
-                if (STREQ(components[j], "")) {
-                    VIR_FREE(components[j]);
-                    VIR_DELETE_ELEMENT(components, j, ncomponents);
-                    continue;
-                }
-                j++;
-            }
-
-            VIR_FREE(linkpath);
-            VIR_FREE(currentpath);
-
-            continue;
-        }
-
-        VIR_FREE(currentpath);
-
-        i++;
-    }
-
-    ret = virStorageFileCanonicalizeFormatPath(components, ncomponents,
-                                               beginSlash, beginDoubleSlash);
-
- cleanup:
-    virHashFree(cycle);
-    virStringListFreeCount(components, ncomponents);
-
-    return ret;
-}
diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h
index 6b198858cc..62185e6f4f 100644
--- a/src/util/virstoragefile.h
+++ b/src/util/virstoragefile.h
@@ -33,11 +33,3 @@ int virStorageFileGetSCSIKey(const char *path,
                              bool ignoreError);
 int virStorageFileGetNPIVKey(const char *path,
                              char **key);
-
-typedef int
-(*virStorageFileSimplifyPathReadlinkCallback)(const char *path,
-                                              char **link,
-                                              void *data);
-char *virStorageFileCanonicalizePath(const char *path,
-                                     virStorageFileSimplifyPathReadlinkCallback cb,
-                                     void *cbdata);
-- 
2.29.2




More information about the libvir-list mailing list