aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Bolte <matthias.bolte@googlemail.com>2011-04-25 00:25:10 +0200
committerMatthias Bolte <matthias.bolte@googlemail.com>2011-04-30 19:59:52 +0200
commit9ba4eb3c081027846637acf20b17ec801dc66b72 (patch)
tree12eaeebaeeb298f17c8f009d1c08c43a590eda27 /tests/nodeinfotest.c
parenttests: Update valgrind suppressions file (diff)
downloadlibvirt-9ba4eb3c081027846637acf20b17ec801dc66b72.tar.gz
libvirt-9ba4eb3c081027846637acf20b17ec801dc66b72.tar.bz2
libvirt-9ba4eb3c081027846637acf20b17ec801dc66b72.zip
tests: Lower stack usage below 4096 bytes
Make virtTestLoadFile allocate the buffer to read the file into. Fix logic error in virtTestLoadFile, stop reading on the first empty line. Use virFileReadLimFD in virtTestCaptureProgramOutput to avoid manual buffer handling.
Diffstat (limited to 'tests/nodeinfotest.c')
-rw-r--r--tests/nodeinfotest.c65
1 files changed, 42 insertions, 23 deletions
diff --git a/tests/nodeinfotest.c b/tests/nodeinfotest.c
index 9a87dc09c..b4e81b384 100644
--- a/tests/nodeinfotest.c
+++ b/tests/nodeinfotest.c
@@ -21,24 +21,24 @@ mymain(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED)
#else
-# define MAX_FILE 4096
-
extern int linuxNodeInfoCPUPopulate(FILE *cpuinfo, virNodeInfoPtr nodeinfo,
bool need_hyperthreads);
-static int linuxTestCompareFiles(const char *cpuinfofile, const char *outputfile) {
- char actualData[MAX_FILE];
- char expectData[MAX_FILE];
- char *expect = &expectData[0];
+static int
+linuxTestCompareFiles(const char *cpuinfofile, const char *outputfile)
+{
+ int ret = -1;
+ char *actualData = NULL;
+ char *expectData = NULL;
virNodeInfo nodeinfo;
FILE *cpuinfo;
- if (virtTestLoadFile(outputfile, &expect, MAX_FILE) < 0)
- return -1;
+ if (virtTestLoadFile(outputfile, &expectData) < 0)
+ goto fail;
cpuinfo = fopen(cpuinfofile, "r");
if (!cpuinfo)
- return -1;
+ goto fail;
memset(&nodeinfo, 0, sizeof(nodeinfo));
if (linuxNodeInfoCPUPopulate(cpuinfo, &nodeinfo, false) < 0) {
@@ -49,7 +49,7 @@ static int linuxTestCompareFiles(const char *cpuinfofile, const char *outputfile
virFreeError(error);
}
VIR_FORCE_FCLOSE(cpuinfo);
- return -1;
+ goto fail;
}
VIR_FORCE_FCLOSE(cpuinfo);
@@ -58,30 +58,49 @@ static int linuxTestCompareFiles(const char *cpuinfofile, const char *outputfile
* so blank it to a predictable value */
nodeinfo.nodes = 1;
- snprintf(actualData, MAX_FILE,
- "CPUs: %u, MHz: %u, Nodes: %u, Cores: %u\n",
- nodeinfo.cpus, nodeinfo.mhz, nodeinfo.nodes, nodeinfo.cores);
+ if (virAsprintf(&actualData, "CPUs: %u, MHz: %u, Nodes: %u, Cores: %u\n",
+ nodeinfo.cpus, nodeinfo.mhz, nodeinfo.nodes,
+ nodeinfo.cores) < 0)
+ goto fail;
if (STRNEQ(actualData, expectData)) {
if (getenv("DEBUG_TESTS")) {
printf("Expect %d '%s'\n", (int)strlen(expectData), expectData);
printf("Actual %d '%s'\n", (int)strlen(actualData), actualData);
}
- return -1;
+ goto fail;
}
- return 0;
+ ret = 0;
+
+fail:
+ free(expectData);
+ free(actualData);
+ return ret;
}
-static int linuxTestNodeInfo(const void *data) {
- char cpuinfo[PATH_MAX];
- char output[PATH_MAX];
- snprintf(cpuinfo, PATH_MAX, "%s/nodeinfodata/linux-%s.cpuinfo",
- abs_srcdir, (const char*)data);
- snprintf(output, PATH_MAX, "%s/nodeinfodata/linux-%s.txt",
- abs_srcdir, (const char*)data);
- return linuxTestCompareFiles(cpuinfo, output);
+static int
+linuxTestNodeInfo(const void *data)
+{
+ int result = -1;
+ char *cpuinfo = NULL;
+ char *output = NULL;
+
+ if (virAsprintf(&cpuinfo, "%s/nodeinfodata/linux-%s.cpuinfo",
+ abs_srcdir, (const char*)data) < 0 ||
+ virAsprintf(&output, "%s/nodeinfodata/linux-%s.txt",
+ abs_srcdir, (const char*)data) < 0) {
+ goto cleanup;
+ }
+
+ result = linuxTestCompareFiles(cpuinfo, output);
+
+cleanup:
+ free(cpuinfo);
+ free(output);
+
+ return result;
}