[libvirt] [PATCH v3 2/8] util: Remove virsysfs and instead enhance virFileReadValue* functions
Erik Skultety
eskultet at redhat.com
Fri Apr 28 12:30:01 UTC 2017
On Tue, Apr 25, 2017 at 01:10:26PM +0200, Martin Kletzander wrote:
> It is no longer needed thanks to the great virfilemock.c. And this
s/mock/wrapper
>
> - return 0;
> +
> +/* Arbitrarily sized number, feel free to change, but the function should be
> + * used for small, interface-like files, so it should not be huge (subjective) */
> +#define VIR_FILE_READ_VALUE_STRING_MAX 4096
you didn't move the define :).
> +
> +/**
> + * virFileReadValueScaledInt:
> + * @value: pointer to unsigned long long int to be filled in with the value
> + * @format, ...: file to read from
> + *
> + * Read unsigned scaled int from @format and put it into @value.
> + *
> + * Return -2 for non-existing file, -1 on other errors and 0 if everything went
> + * fine.
> + */
> +int
> +virFileReadValueScaledInt(unsigned long long *value, const char *format, ...)
> +{
> + int ret = -1;
> + char *str = NULL;
> + char *endp = NULL;
> + char *path = NULL;
> + va_list ap;
> +
> + va_start(ap, format);
> + if (virVasprintf(&path, format, ap) < 0) {
> + va_end(ap);
> + goto cleanup;
> + }
> + va_end(ap);
> +
> + if (!virFileExists(path)) {
> + ret = -2;
> + goto cleanup;
> + }
> +
> + if (virFileReadAll(path, INT_BUFSIZE_BOUND(*value), &str) < 0)
> + goto cleanup;
> +
> + virStringTrimOptionalNewline(str);
> +
> + if (virStrToLong_ullp(str, &endp, 10, value) < 0) {
> + virReportError(VIR_ERR_INTERNAL_ERROR,
> + _("Invalid unsigned scaled integer value '%s' in file '%s'"),
> + str, path);
> + goto cleanup;
> + }
> +
> + ret = virScaleInteger(value, endp, 1024, ULLONG_MAX);
> + cleanup:
> + VIR_FREE(path);
> + VIR_FREE(str);
> + return ret;
> }
>
[...]
> int
> virHostCPUGetCore(unsigned int cpu, unsigned int *core)
> {
> - int ret = virSysfsGetCpuValueUint(cpu, "topology/core_id", core);
> + int ret = virFileReadValueUint(core,
> + "%s/cpu/cpu%u/topology/core_id",
> + SYSFS_SYSTEM_PATH, cpu);
>
> /* If the file is not there, it's 0 */
> if (ret == -2)
> @@ -268,7 +272,9 @@ virHostCPUGetSiblingsList(unsigned int cpu)
> virBitmapPtr ret = NULL;
> int rv = -1;
>
> - rv = virSysfsGetCpuValueBitmap(cpu, "topology/thread_siblings_list", &ret);
> + rv = virFileReadValueBitmap(&ret,
> + "%s/cpu/cpu%u/topology/thread_siblings_list",
> + SYSFS_SYSTEM_PATH, cpu);
So, I like that you put the constant as argument to the formatting string
instead of concatenation since v1...
> if (rv == -2) {
> /* If the file doesn't exist, the threadis its only sibling */
> ret = virBitmapNew(cpu + 1);
> @@ -615,7 +621,7 @@ virHostCPUGetInfoPopulateLinux(FILE *cpuinfo,
> /* OK, we've parsed clock speed out of /proc/cpuinfo. Get the
> * core, node, socket, thread and topology information from /sys
> */
> - if (virAsprintf(&sysfs_nodedir, "%s/node", virSysfsGetSystemPath()) < 0)
> + if (virAsprintf(&sysfs_nodedir, SYSFS_SYSTEM_PATH "/node") < 0)
In which case we should stay consistent and ^this should be adjusted
accordingly - applies to the rest of the asprintfs below.
ACK with the nits fixed.
Erik
More information about the libvir-list
mailing list