diff options
-rw-r--r-- | main/libvirt/APKBUILD | 8 | ||||
-rw-r--r-- | main/libvirt/nodeinfo-musl.patch | 109 |
2 files changed, 100 insertions, 17 deletions
diff --git a/main/libvirt/APKBUILD b/main/libvirt/APKBUILD index 6c69cfaa40..4a85e30ce3 100644 --- a/main/libvirt/APKBUILD +++ b/main/libvirt/APKBUILD @@ -2,7 +2,7 @@ pkgname=libvirt pkgver=1.2.3 _ver="${pkgver/_rc/-rc}" -pkgrel=2 +pkgrel=3 pkgdesc="A virtualization API for several hypervisor and container systems" url="http://libvirt.org/" arch="all" @@ -173,16 +173,16 @@ md5sums="ad1602a2fcc3609c83b885a28f3eecbd libvirt-1.2.3.tar.gz d897df38c7e7fa1a297aa551108633c9 libvirt.initd 2d44db1a1e849decd709ccf07098c475 physmem.patch 9da7723b114b2d87558e92828366fbcb musl-fix-includes.patch -aea5a4bd25176fcc1333986c5932ecc2 nodeinfo-musl.patch" +b72fb72fdd8727aa0393f8b627bbe57b nodeinfo-musl.patch" sha256sums="b489d1a29c6166643d34b72795a89b03c6ac775cdaeadb6aa86fc1a982c02e31 libvirt-1.2.3.tar.gz 851ab3f9678f0fa9c3ee03f7fc7bd00c4ee86d5f0777eecf9eb1ffe3243adfd1 libvirt.confd e9fad203434ffaa6afe524e42a9fb6594edad61cb02b1ca60a68d1a7fe0c31ab libvirt.initd 316a9783c162757d2b8530a65eccdc0d25975037699844679ffc3c7aee5206a6 physmem.patch 8dfa9dbe71ee21dc53e44bd7cc0127adde1bf3371d6b393657b386bb83f8139b musl-fix-includes.patch -7203f304eaf15f915c8a0551c9a5ea5f6646c9c6d937e399eda530d7be803768 nodeinfo-musl.patch" +cbd60f09a0e666a22ed3f8cfb9670820c46796c56a4254ed1f84b5371c33f501 nodeinfo-musl.patch" sha512sums="5ff85a98a0c62229d0ab8125d20fce982f8497d20cb89758bc37f475d7a5d59caa6d962e6c2313e1c494ca1648a836fcad253ceaccc34cc0060135470be3db5b libvirt-1.2.3.tar.gz 9aba6ab73219a635c64a340ee8887356e644445c9128734cbce73f5d54778378da2f10a190365ad88a7db8bc95b1fb17f0c6ca41fc41bb786c09e1afe84d65dc libvirt.confd f48c97f93ef4509a86eda6200b3aae5b2c0c6263403bde933b770fd62240dca27bc439bd29b440ea6a47c8337f8b4511230ed915cb5ff54d9a1cf311863f6fa1 libvirt.initd 4c876a89dee4cc793ce64a0bf43db4f493d1d47409a9fab727b8b0f182e4b25017aa4371afd96ce081dab4aa3e93c6c5ad46e0e6fc2c2076a9da50632ef7f06e physmem.patch b6142256bf2700b9e5335c60fe5628e4095a24689c31d54afcab46f46a06b9c0ae676f87f77a487377eafbec11fb7afa9b994aef48a10a39e82f47c45df008ba musl-fix-includes.patch -62267f24bc6c2baa8f09d0a56abc1cb39997b54ce665878f7e187bb87e2f25cc358849a63f2b10f43ce0f56d62261507ab5c0a6ad1874722b33f4e1329c4df34 nodeinfo-musl.patch" +e479bf1317fd30136dbc3bb76d6dfb59934a36fa6db67087c8f0898558d797db40e2e963bb990446479f8d4d7ead25e95876a3d43245034376b8418a4805f3e2 nodeinfo-musl.patch" diff --git a/main/libvirt/nodeinfo-musl.patch b/main/libvirt/nodeinfo-musl.patch index f7c855e6d9..85caf31a5b 100644 --- a/main/libvirt/nodeinfo-musl.patch +++ b/main/libvirt/nodeinfo-musl.patch @@ -1,18 +1,26 @@ diff --git a/src/nodeinfo.c b/src/nodeinfo.c -index 53ba716..8d3214e 100644 +index 53ba716..f239d4a 100644 --- a/src/nodeinfo.c +++ b/src/nodeinfo.c -@@ -452,8 +452,7 @@ virNodeParseNode(const char *node, +@@ -440,6 +440,7 @@ virNodeParseNode(const char *node, + int siblings; + unsigned int cpu; + int online; ++ int direrr; + + *threads = 0; + *cores = 0; +@@ -452,8 +453,7 @@ virNodeParseNode(const char *node, /* enumerate sockets in the node */ CPU_ZERO(&sock_map); - errno = 0; - while ((cpudirent = readdir(cpudir))) { -+ for (errno = 0; (cpudirent = readdir(cpudir)); errno = 0) { ++ while ((direrr = virDirRead(cpudir, &cpudirent, node)) == 0) { if (sscanf(cpudirent->d_name, "cpu%u", &cpu) != 1) continue; -@@ -470,8 +469,6 @@ virNodeParseNode(const char *node, +@@ -470,14 +470,10 @@ virNodeParseNode(const char *node, if (sock > sock_max) sock_max = sock; @@ -20,18 +28,25 @@ index 53ba716..8d3214e 100644 - errno = 0; } - if (errno) { -@@ -490,8 +487,7 @@ virNodeParseNode(const char *node, +- if (errno) { +- virReportSystemError(errno, _("problem reading %s"), node); ++ if (direrr < 0) + goto cleanup; +- } + + sock_max++; + +@@ -490,8 +486,7 @@ virNodeParseNode(const char *node, /* iterate over all CPU's in the node */ rewinddir(cpudir); - errno = 0; - while ((cpudirent = readdir(cpudir))) { -+ for (errno = 0; (cpudirent = readdir(cpudir)); errno = 0) { ++ while ((direrr = virDirRead(cpudir, &cpudirent, node)) == 0) { if (sscanf(cpudirent->d_name, "cpu%u", &cpu) != 1) continue; -@@ -530,8 +526,6 @@ virNodeParseNode(const char *node, +@@ -530,14 +525,10 @@ virNodeParseNode(const char *node, if (siblings > *threads) *threads = siblings; @@ -39,18 +54,33 @@ index 53ba716..8d3214e 100644 - errno = 0; } - if (errno) { -@@ -672,8 +666,7 @@ int linuxNodeInfoCPUPopulate(FILE *cpuinfo, +- if (errno) { +- virReportSystemError(errno, _("problem reading %s"), node); ++ if (direrr < 0) + goto cleanup; +- } + + /* finalize the returned data */ + *sockets = CPU_COUNT(&sock_map); +@@ -576,6 +567,7 @@ int linuxNodeInfoCPUPopulate(FILE *cpuinfo, + 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) { +@@ -672,8 +664,7 @@ int linuxNodeInfoCPUPopulate(FILE *cpuinfo, goto fallback; } - errno = 0; - while ((nodedirent = readdir(nodedir))) { -+ for (errno = 0; (nodedirent = readdir(nodedir)); errno = 0) { ++ while ((direrr = virDirRead(nodedir, &nodedirent, sysfs_nodedir)) == 0) { if (sscanf(nodedirent->d_name, "node%u", &node) != 1) continue; -@@ -699,8 +692,6 @@ int linuxNodeInfoCPUPopulate(FILE *cpuinfo, +@@ -699,14 +690,10 @@ int linuxNodeInfoCPUPopulate(FILE *cpuinfo, if (threads > nodeinfo->threads) nodeinfo->threads = threads; @@ -58,4 +88,57 @@ index 53ba716..8d3214e 100644 - errno = 0; } - if (errno) { +- if (errno) { +- virReportSystemError(errno, _("problem reading %s"), sysfs_nodedir); ++ if (direrr < 0) + goto cleanup; +- } + + if (nodeinfo->cpus && nodeinfo->nodes) + goto done; +diff --git a/src/util/virfile.c b/src/util/virfile.c +index 3eb2703..b54b9fd 100644 +--- a/src/util/virfile.c ++++ b/src/util/virfile.c +@@ -2295,6 +2295,20 @@ virDirCreate(const char *path ATTRIBUTE_UNUSED, + } + #endif /* WIN32 */ + ++/* return 0 = success, 1 = end-of-dir and -1 = error */ ++int virDirRead(DIR *dirp, struct dirent **ent, const char *dirname) ++{ ++ errno = 0; ++ *ent = readdir(dirp); ++ if (!*ent && errno) { ++ if (dirname) ++ virReportSystemError(errno, _("Unable to read directory '%s'"), ++ dirname); ++ return -1; ++ } ++ return !*ent; ++} ++ + static int + virFileMakePathHelper(char *path, mode_t mode) + { +diff --git a/src/util/virfile.h b/src/util/virfile.h +index 46ef781..622a81b 100644 +--- a/src/util/virfile.h ++++ b/src/util/virfile.h +@@ -27,6 +27,7 @@ + # define __VIR_FILE_H_ + + # include <stdio.h> ++# include <dirent.h> + + # include "internal.h" + # include "virstoragefile.h" +@@ -211,6 +212,8 @@ enum { + }; + int virDirCreate(const char *path, mode_t mode, uid_t uid, gid_t gid, + unsigned int flags) ATTRIBUTE_RETURN_CHECK; ++int virDirRead(DIR *dirp, struct dirent **ent, const char *dirname); ++ + int virFileMakePath(const char *path) ATTRIBUTE_RETURN_CHECK; + int virFileMakePathWithMode(const char *path, + mode_t mode) ATTRIBUTE_RETURN_CHECK; |