From 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d Mon Sep 17 00:00:00 2001 From: Jef Date: Tue, 24 Sep 2024 14:54:57 +0200 Subject: Initial community commit --- Src/Wasabi/api/service/svcenum.cpp | 45 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 Src/Wasabi/api/service/svcenum.cpp (limited to 'Src/Wasabi/api/service/svcenum.cpp') diff --git a/Src/Wasabi/api/service/svcenum.cpp b/Src/Wasabi/api/service/svcenum.cpp new file mode 100644 index 00000000..f9219654 --- /dev/null +++ b/Src/Wasabi/api/service/svcenum.cpp @@ -0,0 +1,45 @@ +#include + +//" +#include "svcenum.h" +//?> + + +#include +#include +#include + +SvcEnum::SvcEnum() : type(WaSvc::NONE), factory(NULL) { + reset(); +} + +void *SvcEnum::_getNext(int global_lock) { + if (WASABI_API_SVC == NULL) return NULL; + for (;;) { + factory = WASABI_API_SVC->service_enumService(type, pos++); + if (factory == NULL) return NULL; + void *s = factory->getInterface(FALSE);// get but don't lock + if (s) + { + if (_testService(s)) { + if (global_lock) + WASABI_API_SVC->service_lock(factory, s); // lock in sys tables + return s; + } + factory->releaseInterface(s); + } + } +} + +void SvcEnum::reset() { + pos = 0; + factory = NULL; +} + +int SvcEnum::release(void *ptr) { + return WASABI_API_SVC->service_release(ptr); +} + +waServiceFactory *SvcEnum::getLastFactory() { + return factory; +} -- cgit