util: Add virStringTrimOptionalNewline

And use it in virFileRead*

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
This commit is contained in:
Martin Kletzander 2017-03-29 13:48:22 +02:00
parent b11e893224
commit 8f0b731d22
4 changed files with 19 additions and 13 deletions

View File

@ -3811,7 +3811,6 @@ int
virFileReadValueInt(const char *path, int *value) virFileReadValueInt(const char *path, int *value)
{ {
char *str = NULL; char *str = NULL;
char *endp = NULL;
if (!virFileExists(path)) if (!virFileExists(path))
return -2; return -2;
@ -3819,8 +3818,9 @@ virFileReadValueInt(const char *path, int *value)
if (virFileReadAll(path, INT_STRLEN_BOUND(*value), &str) < 0) if (virFileReadAll(path, INT_STRLEN_BOUND(*value), &str) < 0)
return -1; return -1;
if (virStrToLong_i(str, &endp, 10, value) < 0 || virStringTrimOptionalNewline(str);
(endp && !c_isspace(*endp))) {
if (virStrToLong_i(str, NULL, 10, value) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("Invalid integer value '%s' in file '%s'"), _("Invalid integer value '%s' in file '%s'"),
str, path); str, path);
@ -3847,7 +3847,6 @@ int
virFileReadValueUint(const char *path, unsigned int *value) virFileReadValueUint(const char *path, unsigned int *value)
{ {
char *str = NULL; char *str = NULL;
char *endp = NULL;
if (!virFileExists(path)) if (!virFileExists(path))
return -2; return -2;
@ -3855,8 +3854,9 @@ virFileReadValueUint(const char *path, unsigned int *value)
if (virFileReadAll(path, INT_STRLEN_BOUND(*value), &str) < 0) if (virFileReadAll(path, INT_STRLEN_BOUND(*value), &str) < 0)
return -1; return -1;
if (virStrToLong_uip(str, &endp, 10, value) < 0 || virStringTrimOptionalNewline(str);
(endp && !c_isspace(*endp))) {
if (virStrToLong_uip(str, NULL, 10, value)) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("Invalid unsigned integer value '%s' in file '%s'"), _("Invalid unsigned integer value '%s' in file '%s'"),
str, path); str, path);
@ -3886,7 +3886,6 @@ virFileReadValueBitmap(const char *path,
{ {
char *buf = NULL; char *buf = NULL;
int ret = -1; int ret = -1;
char *tmp = NULL;
if (!virFileExists(path)) if (!virFileExists(path))
return -2; return -2;
@ -3894,10 +3893,7 @@ virFileReadValueBitmap(const char *path,
if (virFileReadAll(path, maxlen, &buf) < 0) if (virFileReadAll(path, maxlen, &buf) < 0)
goto cleanup; goto cleanup;
/* trim optinoal newline at the end */ virStringTrimOptionalNewline(buf);
tmp = buf + strlen(buf) - 1;
if (*tmp == '\n')
*tmp = '\0';
*value = virBitmapParseUnlimited(buf); *value = virBitmapParseUnlimited(buf);
if (!*value) if (!*value)

View File

@ -847,13 +847,13 @@ virHostCPUParseCountLinux(void)
tmp = str; tmp = str;
do { do {
if (virStrToLong_i(tmp, &tmp, 10, &ret) < 0 || if (virStrToLong_i(tmp, &tmp, 10, &ret) < 0 ||
!strchr(",-\n", *tmp)) { !strchr(",-", *tmp)) {
virReportError(VIR_ERR_NO_SUPPORT, virReportError(VIR_ERR_NO_SUPPORT,
_("failed to parse %s"), str); _("failed to parse %s"), str);
ret = -1; ret = -1;
goto cleanup; goto cleanup;
} }
} while (*tmp++ != '\n'); } while (*tmp++ && *tmp);
ret++; ret++;
cleanup: cleanup:

View File

@ -288,4 +288,12 @@ bool virStringBufferIsPrintable(const uint8_t *buf, size_t buflen);
char *virStringEncodeBase64(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__ */ #endif /* __VIR_STRING_H__ */

View File

@ -89,6 +89,8 @@ virSysfsGetValueString(const char *file,
if (virFileReadAll(path, VIR_SYSFS_VALUE_MAXLEN, value) < 0) if (virFileReadAll(path, VIR_SYSFS_VALUE_MAXLEN, value) < 0)
goto cleanup; goto cleanup;
virStringTrimOptionalNewline(*value);
ret = 0; ret = 0;
cleanup: cleanup:
VIR_FREE(path); VIR_FREE(path);