From 4267393198000d34f2418a71fed1cd9f4614a9d9 Mon Sep 17 00:00:00 2001
From: Andrea Bolognani <abologna@redhat.com>
Date: Thu, 3 May 2018 10:04:38 +0200
Subject: [PATCH] all: Use virFileCanonicalizePath() instead of
 canonicalize_file_name()
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

The latter is impossible to mock on platforms that use the
gnulib implementation, such as FreeBSD, while the former
doesn't suffer from this limitation.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
---
 src/storage/storage_file_fs.c |  2 +-
 src/util/virfile.c            |  2 +-
 src/util/virpci.c             |  2 +-
 tests/virstoragetest.c        | 10 +++++-----
 tests/virtestmock.c           | 13 ++++++-------
 5 files changed, 14 insertions(+), 15 deletions(-)

diff --git a/src/storage/storage_file_fs.c b/src/storage/storage_file_fs.c
index 9885e1d0ad..750bdb9090 100644
--- a/src/storage/storage_file_fs.c
+++ b/src/storage/storage_file_fs.c
@@ -160,7 +160,7 @@ virStorageFileBackendFileGetUniqueIdentifier(virStorageSourcePtr src)
     virStorageFileBackendFsPrivPtr priv = src->drv->priv;
 
     if (!priv->canonpath) {
-        if (!(priv->canonpath = canonicalize_file_name(src->path))) {
+        if (!(priv->canonpath = virFileCanonicalizePath(src->path))) {
             virReportSystemError(errno, _("can't canonicalize path '%s'"),
                                  src->path);
             return NULL;
diff --git a/src/util/virfile.c b/src/util/virfile.c
index 2a16b01ae5..41dda410cb 100644
--- a/src/util/virfile.c
+++ b/src/util/virfile.c
@@ -1597,7 +1597,7 @@ virFileResolveLinkHelper(const char *linkpath,
             return VIR_STRDUP_QUIET(*resultpath, linkpath) < 0 ? -1 : 0;
     }
 
-    *resultpath = canonicalize_file_name(linkpath);
+    *resultpath = virFileCanonicalizePath(linkpath);
 
     return *resultpath == NULL ? -1 : 0;
 }
diff --git a/src/util/virpci.c b/src/util/virpci.c
index 23932558e9..8d02366664 100644
--- a/src/util/virpci.c
+++ b/src/util/virpci.c
@@ -2622,7 +2622,7 @@ virPCIGetDeviceAddressFromSysfsLink(const char *device_link)
         return NULL;
     }
 
-    device_path = canonicalize_file_name(device_link);
+    device_path = virFileCanonicalizePath(device_link);
     if (device_path == NULL) {
         virReportSystemError(errno,
                              _("Failed to resolve device link '%s'"),
diff --git a/tests/virstoragetest.c b/tests/virstoragetest.c
index b032d8b93f..0e11602e84 100644
--- a/tests/virstoragetest.c
+++ b/tests/virstoragetest.c
@@ -171,7 +171,7 @@ testPrepImages(void)
         fprintf(stderr, "unable to create directory %s\n", datadir "/dir");
         goto cleanup;
     }
-    if (!(canondir = canonicalize_file_name(absdir))) {
+    if (!(canondir = virFileCanonicalizePath(absdir))) {
         virReportOOMError();
         goto cleanup;
     }
@@ -186,7 +186,7 @@ testPrepImages(void)
         fprintf(stderr, "unable to create raw file\n");
         goto cleanup;
     }
-    if (!(canonraw = canonicalize_file_name(absraw))) {
+    if (!(canonraw = virFileCanonicalizePath(absraw))) {
         virReportOOMError();
         goto cleanup;
     }
@@ -206,7 +206,7 @@ testPrepImages(void)
                                "-F", "raw", "-b", "raw", "qcow2", NULL);
     if (virCommandRun(cmd, NULL) < 0)
         goto skip;
-    if (!(canonqcow2 = canonicalize_file_name(absqcow2))) {
+    if (!(canonqcow2 = virFileCanonicalizePath(absqcow2))) {
         virReportOOMError();
         goto cleanup;
     }
@@ -220,7 +220,7 @@ testPrepImages(void)
     virCommandAddArg(cmd, "wrap");
     if (virCommandRun(cmd, NULL) < 0)
         goto skip;
-    if (!(canonwrap = canonicalize_file_name(abswrap))) {
+    if (!(canonwrap = virFileCanonicalizePath(abswrap))) {
         virReportOOMError();
         goto cleanup;
     }
@@ -233,7 +233,7 @@ testPrepImages(void)
     virCommandAddArg(cmd, "qed");
     if (virCommandRun(cmd, NULL) < 0)
         goto skip;
-    if (!(canonqed = canonicalize_file_name(absqed))) {
+    if (!(canonqed = virFileCanonicalizePath(absqed))) {
         virReportOOMError();
         goto cleanup;
     }
diff --git a/tests/virtestmock.c b/tests/virtestmock.c
index 688945d805..255dd43560 100644
--- a/tests/virtestmock.c
+++ b/tests/virtestmock.c
@@ -133,12 +133,11 @@ checkPath(const char *path)
         virAsprintfQuiet(&relPath, "./%s", path) < 0)
         goto error;
 
-    /* Le sigh. Both canonicalize_file_name() and realpath()
-     * expect @path to exist otherwise they return an error. So
-     * if we are called over an non-existent file, this could
-     * return an error. In that case do our best and hope we will
-     * catch possible error. */
-    if ((fullPath = canonicalize_file_name(relPath ? relPath : path))) {
+    /* Le sigh. virFileCanonicalizePath() expects @path to exist, otherwise
+     * it will return an error. So if we are called over an non-existent
+     * file, this could return an error. In that case do our best and hope
+     * we will catch possible errors. */
+    if ((fullPath = virFileCanonicalizePath(relPath ? relPath : path))) {
         path = fullPath;
     } else {
         /* Yeah, our worst nightmares just became true. Path does
@@ -148,7 +147,7 @@ checkPath(const char *path)
 
         virFileRemoveLastComponent(crippledPath);
 
-        if ((fullPath = canonicalize_file_name(crippledPath)))
+        if ((fullPath = virFileCanonicalizePath(crippledPath)))
             path = fullPath;
     }