From 8f0b731d224ed93b70f3ab9c4cdfdc0565b87de6 Mon Sep 17 00:00:00 2001 From: Martin Kletzander Date: Wed, 29 Mar 2017 13:48:22 +0200 Subject: [PATCH] util: Add virStringTrimOptionalNewline And use it in virFileRead* Signed-off-by: Martin Kletzander --- src/util/virfile.c | 18 +++++++----------- src/util/virhostcpu.c | 4 ++-- src/util/virstring.h | 8 ++++++++ src/util/virsysfs.c | 2 ++ 4 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/util/virfile.c b/src/util/virfile.c index c0f448d343..cbfa3849d7 100644 --- a/src/util/virfile.c +++ b/src/util/virfile.c @@ -3811,7 +3811,6 @@ int virFileReadValueInt(const char *path, int *value) { char *str = NULL; - char *endp = NULL; if (!virFileExists(path)) return -2; @@ -3819,8 +3818,9 @@ virFileReadValueInt(const char *path, int *value) if (virFileReadAll(path, INT_STRLEN_BOUND(*value), &str) < 0) return -1; - if (virStrToLong_i(str, &endp, 10, value) < 0 || - (endp && !c_isspace(*endp))) { + virStringTrimOptionalNewline(str); + + if (virStrToLong_i(str, NULL, 10, value) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Invalid integer value '%s' in file '%s'"), str, path); @@ -3847,7 +3847,6 @@ int virFileReadValueUint(const char *path, unsigned int *value) { char *str = NULL; - char *endp = NULL; if (!virFileExists(path)) return -2; @@ -3855,8 +3854,9 @@ virFileReadValueUint(const char *path, unsigned int *value) if (virFileReadAll(path, INT_STRLEN_BOUND(*value), &str) < 0) return -1; - if (virStrToLong_uip(str, &endp, 10, value) < 0 || - (endp && !c_isspace(*endp))) { + virStringTrimOptionalNewline(str); + + if (virStrToLong_uip(str, NULL, 10, value)) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Invalid unsigned integer value '%s' in file '%s'"), str, path); @@ -3886,7 +3886,6 @@ virFileReadValueBitmap(const char *path, { char *buf = NULL; int ret = -1; - char *tmp = NULL; if (!virFileExists(path)) return -2; @@ -3894,10 +3893,7 @@ virFileReadValueBitmap(const char *path, if (virFileReadAll(path, maxlen, &buf) < 0) goto cleanup; - /* trim optinoal newline at the end */ - tmp = buf + strlen(buf) - 1; - if (*tmp == '\n') - *tmp = '\0'; + virStringTrimOptionalNewline(buf); *value = virBitmapParseUnlimited(buf); if (!*value) diff --git a/src/util/virhostcpu.c b/src/util/virhostcpu.c index 02b9fc8eb9..a660e3f4db 100644 --- a/src/util/virhostcpu.c +++ b/src/util/virhostcpu.c @@ -847,13 +847,13 @@ virHostCPUParseCountLinux(void) tmp = str; do { if (virStrToLong_i(tmp, &tmp, 10, &ret) < 0 || - !strchr(",-\n", *tmp)) { + !strchr(",-", *tmp)) { virReportError(VIR_ERR_NO_SUPPORT, _("failed to parse %s"), str); ret = -1; goto cleanup; } - } while (*tmp++ != '\n'); + } while (*tmp++ && *tmp); ret++; cleanup: diff --git a/src/util/virstring.h b/src/util/virstring.h index a5550e30d2..603650aa15 100644 --- a/src/util/virstring.h +++ b/src/util/virstring.h @@ -288,4 +288,12 @@ bool virStringBufferIsPrintable(const uint8_t *buf, size_t buflen); char *virStringEncodeBase64(const uint8_t *buf, size_t buflen); +static inline void +virStringTrimOptionalNewline(char *str) +{ + char *tmp = str + strlen(str) - 1; + if (*tmp == '\n') + *tmp = '\0'; +} + #endif /* __VIR_STRING_H__ */ diff --git a/src/util/virsysfs.c b/src/util/virsysfs.c index 7a98b488e0..6df45a0e36 100644 --- a/src/util/virsysfs.c +++ b/src/util/virsysfs.c @@ -89,6 +89,8 @@ virSysfsGetValueString(const char *file, if (virFileReadAll(path, VIR_SYSFS_VALUE_MAXLEN, value) < 0) goto cleanup; + virStringTrimOptionalNewline(*value); + ret = 0; cleanup: VIR_FREE(path); -- GitLab