virFilePrintf;
virFileReadAll;
virFileReadAllQuiet;
+virFileReadBufQuiet;
virFileReadHeaderFD;
virFileReadLimFD;
virFileRelLinkPointsTo;
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.
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;
};
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++;
}