Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy@xxxxxxxxxxxxx> --- src/libvirt_private.syms | 1 + src/util/virfile.c | 24 ++++++++++++++++++++++++ src/util/virfile.h | 2 ++ src/util/viruuid.c | 11 ++--------- 4 files changed, 29 insertions(+), 9 deletions(-) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 0de35ef..ecd169b 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1510,6 +1510,7 @@ virFileOpenTty; virFilePrintf; virFileReadAll; virFileReadAllQuiet; +virFileReadBufQuiet; virFileReadHeaderFD; virFileReadLimFD; virFileRelLinkPointsTo; diff --git a/src/util/virfile.c b/src/util/virfile.c index 730c08d..4d7b510 100644 --- a/src/util/virfile.c +++ b/src/util/virfile.c @@ -1401,6 +1401,30 @@ virFileReadAllQuiet(const char *path, int maxlen, char **buf) return len; } +/* Read @file into preallocated buffer @buf of size @len. + * Return value is -errno in case of errors and size + * of data read (no trailing zero) in case of success. + * If there is more data then @len - 1 then data will be + * truncated. */ +int +virFileReadBufQuiet(const char *file, char *buf, int len) +{ + int fd; + ssize_t sz; + + fd = open(file, O_RDONLY); + if (fd < 0) + return -errno; + + sz = saferead(fd, buf, len - 1); + VIR_FORCE_CLOSE(fd); + if (sz < 0) + return -errno; + + buf[sz] = '\0'; + return sz; +} + /* Truncate @path and write @str to it. If @mode is 0, ensure that @path exists; otherwise, use @mode if @path must be created. Return 0 for success, nonzero for failure. diff --git a/src/util/virfile.h b/src/util/virfile.h index 312f226..dc62eab 100644 --- a/src/util/virfile.h +++ b/src/util/virfile.h @@ -131,6 +131,8 @@ int virFileReadAll(const char *path, int maxlen, char **buf) ATTRIBUTE_RETURN_CHECK ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(3); int virFileReadAllQuiet(const char *path, int maxlen, char **buf) ATTRIBUTE_RETURN_CHECK ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(3); +int virFileReadBufQuiet(const char *file, char *buf, int len) + ATTRIBUTE_RETURN_CHECK ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); int virFileWriteStr(const char *path, const char *str, mode_t mode) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK; diff --git a/src/util/viruuid.c b/src/util/viruuid.c index 16e57db..3cbaae0 100644 --- a/src/util/viruuid.c +++ b/src/util/viruuid.c @@ -231,15 +231,8 @@ getDMISystemUUID(char *uuid, int len) }; while (paths[i]) { - int fd = open(paths[i], O_RDONLY); - if (fd >= 0) { - if (saferead(fd, uuid, len - 1) == len - 1) { - uuid[len - 1] = '\0'; - VIR_FORCE_CLOSE(fd); - return 0; - } - VIR_FORCE_CLOSE(fd); - } + if (virFileReadBufQuiet(paths[i], uuid, len) == len - 1) + return 0; i++; } -- 1.8.3.1 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list