/*
* nodeinfo.c: Helper routines for OS specific node information
*
- * Copyright (C) 2006-2008, 2010-2013 Red Hat, Inc.
+ * Copyright (C) 2006-2008, 2010-2014 Red Hat, Inc.
* Copyright (C) 2006 Daniel P. Berrange
*
* This library is free software; you can redistribute it and/or
int siblings;
unsigned int cpu;
int online;
+ int direrr;
*threads = 0;
*cores = 0;
/* enumerate sockets in the node */
CPU_ZERO(&sock_map);
- errno = 0;
- while ((cpudirent = readdir(cpudir))) {
+ while ((direrr = virDirRead(cpudir, &cpudirent, node)) > 0) {
if (sscanf(cpudirent->d_name, "cpu%u", &cpu) != 1)
continue;
if (sock > sock_max)
sock_max = sock;
-
- errno = 0;
}
- if (errno) {
- virReportSystemError(errno, _("problem reading %s"), node);
+ if (direrr < 0)
goto cleanup;
- }
sock_max++;
/* iterate over all CPU's in the node */
rewinddir(cpudir);
- errno = 0;
- while ((cpudirent = readdir(cpudir))) {
+ while ((direrr = virDirRead(cpudir, &cpudirent, node)) > 0) {
if (sscanf(cpudirent->d_name, "cpu%u", &cpu) != 1)
continue;
if (siblings > *threads)
*threads = siblings;
-
- errno = 0;
}
- if (errno) {
- virReportSystemError(errno, _("problem reading %s"), node);
+ if (direrr < 0)
goto cleanup;
- }
/* finalize the returned data */
*sockets = CPU_COUNT(&sock_map);
int ret = -1;
char *sysfs_nodedir = NULL;
char *sysfs_cpudir = NULL;
+ int direrr;
/* Start with parsing CPU clock speed from /proc/cpuinfo */
while (fgets(line, sizeof(line), cpuinfo) != NULL) {
goto fallback;
}
- errno = 0;
- while ((nodedirent = readdir(nodedir))) {
+ while ((direrr = virDirRead(nodedir, &nodedirent, sysfs_nodedir)) > 0) {
if (sscanf(nodedirent->d_name, "node%u", &node) != 1)
continue;
if (threads > nodeinfo->threads)
nodeinfo->threads = threads;
-
- errno = 0;
}
- if (errno) {
- virReportSystemError(errno, _("problem reading %s"), sysfs_nodedir);
+ if (direrr < 0)
goto cleanup;
- }
if (nodeinfo->cpus && nodeinfo->nodes)
goto done;