diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c index e31030d63..312597c7e 100644 --- a/hw/xfree86/common/xf86Config.c +++ b/hw/xfree86/common/xf86Config.c @@ -1760,7 +1760,7 @@ configScreen(confScreenPtr screenp, XF86ConfScreenPtr conf_screen, int scrnum, count++; dispptr = (XF86ConfDisplayPtr) dispptr->list.next; } - screenp->displays = xnfallocarray(count, sizeof(DispRec)); + screenp->displays = xnfallocarray(count, sizeof(DispPtr)); screenp->numdisplays = count; /* Fill in the default Virtual size, if any */ @@ -1768,8 +1768,9 @@ configScreen(confScreenPtr screenp, XF86ConfScreenPtr conf_screen, int scrnum, for (count = 0, dispptr = conf_screen->scrn_display_lst; dispptr; dispptr = (XF86ConfDisplayPtr) dispptr->list.next, count++) { - screenp->displays[count].virtualX = conf_screen->scrn_virtualX; - screenp->displays[count].virtualY = conf_screen->scrn_virtualY; + screenp->displays[count] = xnfcalloc(1, sizeof(DispRec)); + screenp->displays[count]->virtualX = conf_screen->scrn_virtualX; + screenp->displays[count]->virtualY = conf_screen->scrn_virtualY; } } @@ -1777,7 +1778,7 @@ configScreen(confScreenPtr screenp, XF86ConfScreenPtr conf_screen, int scrnum, count = 0; dispptr = conf_screen->scrn_display_lst; while (dispptr) { - configDisplay(&(screenp->displays[count]), dispptr); + configDisplay(screenp->displays[count], dispptr); count++; dispptr = (XF86ConfDisplayPtr) dispptr->list.next; } @@ -1785,6 +1786,7 @@ configScreen(confScreenPtr screenp, XF86ConfScreenPtr conf_screen, int scrnum, /* * figure out how many videoadaptor references there are and fill them in */ + count = 0; conf_adaptor = conf_screen->scrn_adaptor_lst; while (conf_adaptor) { count++; diff --git a/hw/xfree86/common/xf86Helper.c b/hw/xfree86/common/xf86Helper.c index 95a90ad88..42a51ddbd 100644 --- a/hw/xfree86/common/xf86Helper.c +++ b/hw/xfree86/common/xf86Helper.c @@ -525,8 +525,8 @@ xf86SetDepthBpp(ScrnInfoPtr scrp, int depth, int dummy, int fbbpp, * Find the Display subsection matching the depth/fbbpp and initialise * scrp->display with it. */ - for (i = 0, disp = scrp->confScreen->displays; - i < scrp->confScreen->numdisplays; i++, disp++) { + for (i = 0; i < scrp->confScreen->numdisplays; i++) { + disp = scrp->confScreen->displays[i]; if ((disp->depth == scrp->depth && disp->fbbpp == scrp->bitsPerPixel) || (disp->depth == scrp->depth && disp->fbbpp <= 0) || (disp->fbbpp == scrp->bitsPerPixel && disp->depth <= 0)) { @@ -540,8 +540,8 @@ xf86SetDepthBpp(ScrnInfoPtr scrp, int depth, int dummy, int fbbpp, * depth or fbbpp specified. */ if (i == scrp->confScreen->numdisplays) { - for (i = 0, disp = scrp->confScreen->displays; - i < scrp->confScreen->numdisplays; i++, disp++) { + for (i = 0; i < scrp->confScreen->numdisplays; i++) { + disp = scrp->confScreen->displays[i]; if (disp->depth <= 0 && disp->fbbpp <= 0) { scrp->display = disp; break; @@ -556,24 +556,25 @@ xf86SetDepthBpp(ScrnInfoPtr scrp, int depth, int dummy, int fbbpp, scrp->confScreen->numdisplays++; scrp->confScreen->displays = xnfreallocarray(scrp->confScreen->displays, - scrp->confScreen->numdisplays, sizeof(DispRec)); + scrp->confScreen->numdisplays, sizeof(DispPtr)); xf86DrvMsg(scrp->scrnIndex, X_INFO, "Creating default Display subsection in Screen section\n" "\t\"%s\" for depth/fbbpp %d/%d\n", scrp->confScreen->id, scrp->depth, scrp->bitsPerPixel); - memset(&scrp->confScreen->displays[i], 0, sizeof(DispRec)); - scrp->confScreen->displays[i].blackColour.red = -1; - scrp->confScreen->displays[i].blackColour.green = -1; - scrp->confScreen->displays[i].blackColour.blue = -1; - scrp->confScreen->displays[i].whiteColour.red = -1; - scrp->confScreen->displays[i].whiteColour.green = -1; - scrp->confScreen->displays[i].whiteColour.blue = -1; - scrp->confScreen->displays[i].defaultVisual = -1; - scrp->confScreen->displays[i].modes = xnfalloc(sizeof(char *)); - scrp->confScreen->displays[i].modes[0] = NULL; - scrp->confScreen->displays[i].depth = depth; - scrp->confScreen->displays[i].fbbpp = fbbpp; - scrp->display = &scrp->confScreen->displays[i]; + scrp->confScreen->displays[i] = xnfcalloc(1, sizeof(DispRec)); + memset(scrp->confScreen->displays[i], 0, sizeof(DispRec)); + scrp->confScreen->displays[i]->blackColour.red = -1; + scrp->confScreen->displays[i]->blackColour.green = -1; + scrp->confScreen->displays[i]->blackColour.blue = -1; + scrp->confScreen->displays[i]->whiteColour.red = -1; + scrp->confScreen->displays[i]->whiteColour.green = -1; + scrp->confScreen->displays[i]->whiteColour.blue = -1; + scrp->confScreen->displays[i]->defaultVisual = -1; + scrp->confScreen->displays[i]->modes = xnfalloc(sizeof(char *)); + scrp->confScreen->displays[i]->modes[0] = NULL; + scrp->confScreen->displays[i]->depth = depth; + scrp->confScreen->displays[i]->fbbpp = fbbpp; + scrp->display = scrp->confScreen->displays[i]; } /* diff --git a/hw/xfree86/common/xf86str.h b/hw/xfree86/common/xf86str.h index edd91c745..0dcae9df0 100644 --- a/hw/xfree86/common/xf86str.h +++ b/hw/xfree86/common/xf86str.h @@ -349,7 +349,7 @@ typedef struct _confscreenrec { MonPtr monitor; GDevPtr device; int numdisplays; - DispPtr displays; + DispPtr *displays; int numxvadaptors; confXvAdaptorPtr xvadaptors; void *options;