Signed-off-by: Michal Suchanek <hramr...@gmail.com> --- hw/xfree86/common/xf86Globals.c | 2 -- hw/xfree86/common/xf86Helper.c | 41 ++++++++++++++++++++------------------- hw/xfree86/common/xf86InPriv.h | 4 ---- hw/xfree86/common/xf86Xinput.h | 3 ++- hw/xfree86/doc/ddxDesign.xml | 8 +++++--- 5 files changed, 28 insertions(+), 30 deletions(-)
diff --git a/hw/xfree86/common/xf86Globals.c b/hw/xfree86/common/xf86Globals.c index 7df7a80..2f5e802 100644 --- a/hw/xfree86/common/xf86Globals.c +++ b/hw/xfree86/common/xf86Globals.c @@ -156,8 +156,6 @@ Bool xf86DoConfigure = FALSE; Bool xf86DoShowOptions = FALSE; DriverPtr *xf86DriverList = NULL; int xf86NumDrivers = 0; -InputDriverPtr *xf86InputDriverList = NULL; -int xf86NumInputDrivers = 0; int xf86NumScreens = 0; int xf86NumGPUScreens = 0; diff --git a/hw/xfree86/common/xf86Helper.c b/hw/xfree86/common/xf86Helper.c index 90484bb..187cf1f 100644 --- a/hw/xfree86/common/xf86Helper.c +++ b/hw/xfree86/common/xf86Helper.c @@ -62,6 +62,8 @@ #include <sys/resource.h> #endif +static struct xorg_list *xf86InputDriverList = NULL; + static int xf86ScrnInfoPrivateCount = 0; /* Add a pointer to a new DriverRec to xf86DriverList */ @@ -109,41 +111,40 @@ xf86DeleteDriver(int drvIndex) void xf86AddInputDriver(InputDriverPtr driver, pointer module, int flags) { + InputDriverPtr rec; /* Don't add null entries */ if (!driver) return; - if (xf86InputDriverList == NULL) - xf86NumInputDrivers = 0; + if (xf86InputDriverList == NULL) { + xf86InputDriverList = malloc(sizeof(struct xorg_list)); + xorg_list_init(xf86InputDriverList); + } - xf86NumInputDrivers++; - xf86InputDriverList = xnfrealloc(xf86InputDriverList, - xf86NumInputDrivers * - sizeof(InputDriverPtr)); - xf86InputDriverList[xf86NumInputDrivers - 1] = - xnfalloc(sizeof(InputDriverRec)); - *xf86InputDriverList[xf86NumInputDrivers - 1] = *driver; - xf86InputDriverList[xf86NumInputDrivers - 1]->module = module; + rec = calloc(sizeof(InputDriverRec),1); + *rec = *driver; + rec->module = module; + xorg_list_add(&rec->entry, xf86InputDriverList); } void -xf86DeleteInputDriver(int drvIndex) +xf86DeleteInputDriver(InputDriverPtr driver) { - if (xf86InputDriverList[drvIndex] && xf86InputDriverList[drvIndex]->module) - UnloadModule(xf86InputDriverList[drvIndex]->module); - free(xf86InputDriverList[drvIndex]); - xf86InputDriverList[drvIndex] = NULL; + UnloadModule(driver->module); + xorg_list_del(&driver->entry); + free(driver); } InputDriverPtr xf86LookupInputDriver(const char *name) { - int i; + InputDriverPtr iterator; + if (!xf86InputDriverList) + return NULL; - for (i = 0; i < xf86NumInputDrivers; i++) { - if (xf86InputDriverList[i] && xf86InputDriverList[i]->driverName && - xf86NameCmp(name, xf86InputDriverList[i]->driverName) == 0) - return xf86InputDriverList[i]; + xorg_list_for_each_entry(iterator, xf86InputDriverList, entry) { + if(xf86NameCmp(iterator->driverName, name) == 0) + return iterator; } return NULL; } diff --git a/hw/xfree86/common/xf86InPriv.h b/hw/xfree86/common/xf86InPriv.h index 5826ac3..6f4d8c1 100644 --- a/hw/xfree86/common/xf86InPriv.h +++ b/hw/xfree86/common/xf86InPriv.h @@ -33,10 +33,6 @@ #ifndef _xf86InPriv_h #define _xf86InPriv_h -/* xf86Globals.c */ -extern InputDriverPtr *xf86InputDriverList; -extern int xf86NumInputDrivers; - /* xf86Helper.c */ InputDriverPtr xf86LookupInputDriver(const char *name); diff --git a/hw/xfree86/common/xf86Xinput.h b/hw/xfree86/common/xf86Xinput.h index 35c38a5..8d3ce75 100644 --- a/hw/xfree86/common/xf86Xinput.h +++ b/hw/xfree86/common/xf86Xinput.h @@ -76,6 +76,7 @@ typedef struct _InputDriverRec { struct _InputInfoRec * pInfo, int flags); pointer module; const char **default_options; + struct xorg_list entry; } InputDriverRec, *InputDriverPtr; /* This is to input devices what the ScrnInfoRec is to screens. */ @@ -180,7 +181,7 @@ InputInfoPtr xf86AllocateInput(void); /* xf86Helper.c */ extern _X_EXPORT void xf86AddInputDriver(InputDriverPtr driver, pointer module, int flags); -extern _X_EXPORT void xf86DeleteInputDriver(int drvIndex); +extern _X_EXPORT void xf86DeleteInputDriver(InputDriverPtr driver); extern _X_EXPORT InputDriverPtr xf86LookupInputDriver(const char *name); extern _X_EXPORT InputInfoPtr xf86LookupInput(const char *name); extern _X_EXPORT void xf86DeleteInput(InputInfoPtr pInp, int flags); diff --git a/hw/xfree86/doc/ddxDesign.xml b/hw/xfree86/doc/ddxDesign.xml index 4c2ca47..e23ae61 100644 --- a/hw/xfree86/doc/ddxDesign.xml +++ b/hw/xfree86/doc/ddxDesign.xml @@ -719,9 +719,11 @@ Here is what <function>InitOutput()</function> does: essential details and driver entry points required during the early phase of <function>InitInput()</function>. <function>xf86AddInputDriver()</function> adds it to the global - <varname>xf86InputDriverList[]</varname> array. For a static server, - the <varname>xf86InputDriverList[]</varname> array is initialised at - build time. + <varname>xf86InputDriverList</varname>. Use + <function>xf86LookupInputDriver()</function> to look up a driver in the + list. It used to be a pointer array but since static servers are no + longer supported a more dynamic structure is used. + </para> <para> -- 1.7.10.4 _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel