util: vircgroup: introduce virCgroup(Get|Set)ValueRaw

If we need to get a path of specific file and we need to check its
existence before we use it then we can reuse that path to get/set
values instead of calling the existing get/set value functions which
would be building the path again.

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Pavel Hrdina 2019-06-18 15:01:39 +02:00
parent 2f0de10e29
commit 3f741f9ace
2 changed files with 52 additions and 28 deletions

View File

@ -455,28 +455,22 @@ virCgroupGetBlockDevString(const char *path)
int
virCgroupSetValueStr(virCgroupPtr group,
int controller,
const char *key,
virCgroupSetValueRaw(const char *path,
const char *value)
{
VIR_AUTOFREE(char *) keypath = NULL;
char *tmp = NULL;
char *tmp;
if (virCgroupPathOfController(group, controller, key, &keypath) < 0)
return -1;
VIR_DEBUG("Set value '%s' to '%s'", keypath, value);
if (virFileWriteStr(keypath, value, 0) < 0) {
VIR_DEBUG("Set value '%s' to '%s'", path, value);
if (virFileWriteStr(path, value, 0) < 0) {
if (errno == EINVAL &&
(tmp = strrchr(keypath, '/'))) {
(tmp = strrchr(path, '/'))) {
virReportSystemError(errno,
_("Invalid value '%s' for '%s'"),
value, tmp + 1);
return -1;
}
virReportSystemError(errno,
_("Unable to write to '%s'"), keypath);
_("Unable to write to '%s'"), path);
return -1;
}
@ -484,6 +478,45 @@ virCgroupSetValueStr(virCgroupPtr group,
}
int
virCgroupGetValueRaw(const char *path,
char **value)
{
int rc;
*value = NULL;
VIR_DEBUG("Get value %s", path);
if ((rc = virFileReadAll(path, 1024*1024, value)) < 0) {
virReportSystemError(errno,
_("Unable to read from '%s'"), path);
return -1;
}
/* Terminated with '\n' has sometimes harmful effects to the caller */
if (rc > 0 && (*value)[rc - 1] == '\n')
(*value)[rc - 1] = '\0';
return 0;
}
int
virCgroupSetValueStr(virCgroupPtr group,
int controller,
const char *key,
const char *value)
{
VIR_AUTOFREE(char *) keypath = NULL;
if (virCgroupPathOfController(group, controller, key, &keypath) < 0)
return -1;
return virCgroupSetValueRaw(keypath, value);
}
int
virCgroupGetValueStr(virCgroupPtr group,
int controller,
@ -491,26 +524,11 @@ virCgroupGetValueStr(virCgroupPtr group,
char **value)
{
VIR_AUTOFREE(char *) keypath = NULL;
int rc;
*value = NULL;
if (virCgroupPathOfController(group, controller, key, &keypath) < 0)
return -1;
VIR_DEBUG("Get value %s", keypath);
if ((rc = virFileReadAll(keypath, 1024*1024, value)) < 0) {
virReportSystemError(errno,
_("Unable to read from '%s'"), keypath);
return -1;
}
/* Terminated with '\n' has sometimes harmful effects to the caller */
if (rc > 0 && (*value)[rc - 1] == '\n')
(*value)[rc - 1] = '\0';
return 0;
return virCgroupGetValueRaw(keypath, value);
}

View File

@ -58,6 +58,12 @@ struct _virCgroup {
virCgroupV2Controller unified;
};
int virCgroupSetValueRaw(const char *path,
const char *value);
int virCgroupGetValueRaw(const char *path,
char **value);
int virCgroupSetValueStr(virCgroupPtr group,
int controller,
const char *key,