diff --git a/hw/xfree86/common/xf86Module.h b/hw/xfree86/common/xf86Module.h index 6c25c4bd1..e06ea21c0 100644 --- a/hw/xfree86/common/xf86Module.h +++ b/hw/xfree86/common/xf86Module.h @@ -154,6 +154,7 @@ extern _X_EXPORT void *LoadSubModule(void *, const char *, const char **, extern _X_EXPORT void *LoaderSymbol(const char *); extern _X_EXPORT void *LoaderSymbolFromModule(void *, const char *); extern _X_EXPORT void LoaderErrorMsg(const char *, const char *, int, int); +extern _X_EXPORT int LoaderGetABIVersion(const char *abiclass); typedef void *(*ModuleSetupProc) (void *, void *, int *, int *); typedef void (*ModuleTearDownProc) (void *); diff --git a/hw/xfree86/loader/loader.c b/hw/xfree86/loader/loader.c index 61fe04060..5ba41813c 100644 --- a/hw/xfree86/loader/loader.c +++ b/hw/xfree86/loader/loader.c @@ -153,3 +153,27 @@ LoaderSetOptions(unsigned long opts) { LoaderOptions |= opts; } + +int +LoaderGetABIVersion(const char *abiclass) +{ + struct { + const char *name; + int version; + } classes[] = { + {ABI_CLASS_ANSIC, LoaderVersionInfo.ansicVersion}, + {ABI_CLASS_VIDEODRV, LoaderVersionInfo.videodrvVersion}, + {ABI_CLASS_XINPUT, LoaderVersionInfo.xinputVersion}, + {ABI_CLASS_EXTENSION, LoaderVersionInfo.extensionVersion}, + {NULL, 0} + }; + int i; + + for (i = 0; classes[i].name; i++) { + if (!strcmp(classes[i].name, abiclass)) { + return classes[i].version; + } + } + + return 0; +}