util: Fix a bug in virResctrlMonitorGetStats

The path argument of virFileIsDir should be a full name
of file, pathname and filename. Fixed it by passing the
full path name to virFileIsDir.

Signed-off-by: Wang Huaqiang <huaqiang.wang@intel.com>
Reviewed-by: John Ferlan <jferlan@redhat.com>
This commit is contained in:
Wang Huaqiang 2018-11-20 10:10:39 +08:00 committed by John Ferlan
parent 88a109a17d
commit 4e8b37d497

View File

@ -2665,6 +2665,7 @@ virResctrlMonitorGetStats(virResctrlMonitorPtr monitor,
int ret = -1;
DIR *dirp = NULL;
char *datapath = NULL;
char *filepath = NULL;
struct dirent *ent = NULL;
virResctrlMonitorStatsPtr stat = NULL;
@ -2684,13 +2685,18 @@ virResctrlMonitorGetStats(virResctrlMonitorPtr monitor,
while (virDirRead(dirp, &ent, datapath) > 0) {
char *node_id = NULL;
VIR_FREE(filepath);
/* Looking for directory that contains resource utilization
* information file. The directory name is arranged in format
* "mon_<node_name>_<node_id>". For example, "mon_L3_00" and
* "mon_L3_01" are two target directories for a two nodes system
* with resource utilization data file for each node respectively.
*/
if (!virFileIsDir(ent->d_name))
if (virAsprintf(&filepath, "%s/%s", datapath, ent->d_name) < 0)
goto cleanup;
if (!virFileIsDir(filepath))
continue;
/* Looking for directory has a prefix 'mon_L' */
@ -2734,6 +2740,7 @@ virResctrlMonitorGetStats(virResctrlMonitorPtr monitor,
ret = 0;
cleanup:
VIR_FREE(datapath);
VIR_FREE(filepath);
VIR_FREE(stat);
VIR_DIR_CLOSE(dirp);
return ret;