[libvirt] [PATCH 02/10] util: Introduce virFileReadLink

Martin Kletzander mkletzan at redhat.com
Thu Feb 2 14:11:56 UTC 2017


On Fri, Jan 20, 2017 at 10:42:42AM +0100, Michal Privoznik wrote:
>We will need to traverse the symlinks one step at the time.
>Therefore we need to see where a symlink is pointing to.
>
>Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
>---
> src/libvirt_private.syms |  1 +
> src/util/virfile.c       | 12 ++++++++++++
> src/util/virfile.h       |  2 ++
> 3 files changed, 15 insertions(+)
>
>diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
>index cfeb43cf0..7f7dcfe44 100644
>--- a/src/libvirt_private.syms
>+++ b/src/libvirt_private.syms
>@@ -1615,6 +1615,7 @@ virFileReadAllQuiet;
> virFileReadBufQuiet;
> virFileReadHeaderFD;
> virFileReadLimFD;
>+virFileReadLink;
> virFileRelLinkPointsTo;
> virFileRemove;
> virFileRemoveLastComponent;
>diff --git a/src/util/virfile.c b/src/util/virfile.c
>index bf8099e34..49ea1d1f0 100644
>--- a/src/util/virfile.c
>+++ b/src/util/virfile.c
>@@ -76,6 +76,7 @@
> #include "virutil.h"
>
> #include "c-ctype.h"
>+#include "areadlink.h"
>
> #define VIR_FROM_THIS VIR_FROM_NONE
>
>@@ -1614,6 +1615,17 @@ virFileIsLink(const char *linkpath)
>     return S_ISLNK(st.st_mode) != 0;
> }
>
>+/*
>+ * Read where symlink is pointing to.
>+ *
>+ * Returns 0 on success (@linkpath is a successfully read link),
>+ *        -1 with errno set upon error.
>+ */
>+int
>+virFileReadLink(const char *linkpath, char **resultpath)
>+{
>+    return (*resultpath = areadlink(linkpath)) ? 0 : -1;
>+}
>

I don't really see the benefit of this function, are you trying to
obfuscate it?  You essentially double the return information for no
reason and try to push it all into one line.

> /*
>  * Finds a requested executable file in the PATH env. e.g.:
>diff --git a/src/util/virfile.h b/src/util/virfile.h
>index 0343acd5b..981a9e07d 100644
>--- a/src/util/virfile.h
>+++ b/src/util/virfile.h
>@@ -166,6 +166,8 @@ int virFileResolveAllLinks(const char *linkpath,
> int virFileIsLink(const char *linkpath)
>     ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
>
>+int virFileReadLink(const char *linkpath, char **resultpath);
>+
> char *virFindFileInPath(const char *file);
>
> char *virFileFindResource(const char *filename,
>--
>2.11.0
>
>--
>libvir-list mailing list
>libvir-list at redhat.com
>https://www.redhat.com/mailman/listinfo/libvir-list
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20170202/5edda644/attachment-0001.sig>


More information about the libvir-list mailing list