From: Daniel P. Berrange Date: Thu, 24 Jun 2010 14:06:43 +0000 (+0100) Subject: Add API for iterating over all character devices X-Git-Tag: v0.8.2~35 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=bf1f3f7a36423500c5b482b96aa8f0a04ac23ecf;p=thirdparty%2Flibvirt.git Add API for iterating over all character devices The parallel, serial, console and channel devices are all just character devices. A lot of code needs todo the same thing to all these devices. This provides an convenient API for iterating over all of them. * src/conf/domain_conf.c, src/conf/domain_conf.c, src/libvirt_private.syms: Add virDomainChrDefForeach --- diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 182d8abec6..378c06ef0a 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -7221,4 +7221,56 @@ int virDomainSnapshotHasChildren(virDomainSnapshotObjPtr snap, } +int virDomainChrDefForeach(virDomainDefPtr def, + bool abortOnError, + virDomainChrDefIterator iter, + void *opaque) +{ + int i; + int rc = 0; + + for (i = 0 ; i < def->nserials ; i++) { + if ((iter)(def, + def->serials[i], + opaque) < 0) + rc = -1; + + if (abortOnError && rc != 0) + goto done; + } + + for (i = 0 ; i < def->nparallels ; i++) { + if ((iter)(def, + def->parallels[i], + opaque) < 0) + rc = -1; + + if (abortOnError && rc != 0) + goto done; + } + + for (i = 0 ; i < def->nchannels ; i++) { + if ((iter)(def, + def->channels[i], + opaque) < 0) + rc = -1; + + if (abortOnError && rc != 0) + goto done; + } + if (def->console) { + if ((iter)(def, + def->console, + opaque) < 0) + rc = -1; + + if (abortOnError && rc != 0) + goto done; + } + +done: + return rc; +} + + #endif /* ! PROXY */ diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 55893d6914..01da17e5e2 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -1069,6 +1069,15 @@ int virDomainObjListGetInactiveNames(virDomainObjListPtr doms, char **const names, int maxnames); +typedef int (*virDomainChrDefIterator)(virDomainDefPtr def, + virDomainChrDefPtr dev, + void *opaque); + +int virDomainChrDefForeach(virDomainDefPtr def, + bool abortOnError, + virDomainChrDefIterator iter, + void *opaque); + VIR_ENUM_DECL(virDomainVirt) VIR_ENUM_DECL(virDomainBoot) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 4e61e5567b..778ceb1aa8 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -224,6 +224,7 @@ virDomainSnapshotDefParseString; virDomainSnapshotDefFormat; virDomainSnapshotAssignDef; virDomainObjAssignDef; +virDomainChrDefForeach; # domain_event.h