mirror of
https://github.com/X11Libre/xserver.git
synced 2026-04-07 10:43:35 +00:00
xf86AutoConfig: make copyScreen memory allocation & error handling more sane
No point calling the no-fail-alloc if you check for failure and your only caller checks for failure. No point calling calloc to zero fill memory you're about to memcpy over. In the unlikely event of a loss of memory allocation, drop your previous allocations before returning to others. Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> Reviewed-by: Julien Cristau <jcristau@debian.org> Reviewed-by: Mikhail Gusarov <dottedmag@dottedmag.net>
This commit is contained in:
@@ -282,21 +282,31 @@ listPossibleVideoDrivers(char *matches[], int nmatches)
|
||||
static Bool
|
||||
copyScreen(confScreenPtr oscreen, GDevPtr odev, int i, char *driver)
|
||||
{
|
||||
confScreenPtr nscreen;
|
||||
GDevPtr cptr = NULL;
|
||||
|
||||
xf86ConfigLayout.screens[i].screen = xnfcalloc(1, sizeof(confScreenRec));
|
||||
if(!xf86ConfigLayout.screens[i].screen)
|
||||
nscreen = malloc(sizeof(confScreenRec));
|
||||
if (!nscreen)
|
||||
return FALSE;
|
||||
memcpy(xf86ConfigLayout.screens[i].screen, oscreen, sizeof(confScreenRec));
|
||||
memcpy(nscreen, oscreen, sizeof(confScreenRec));
|
||||
|
||||
cptr = calloc(1, sizeof(GDevRec));
|
||||
if (!cptr)
|
||||
cptr = malloc(sizeof(GDevRec));
|
||||
if (!cptr) {
|
||||
free(nscreen);
|
||||
return FALSE;
|
||||
}
|
||||
memcpy(cptr, odev, sizeof(GDevRec));
|
||||
|
||||
cptr->identifier = Xprintf("Autoconfigured Video Device %s", driver);
|
||||
if (!cptr->identifier) {
|
||||
free(cptr);
|
||||
free(nscreen);
|
||||
return FALSE;
|
||||
}
|
||||
cptr->driver = driver;
|
||||
|
||||
xf86ConfigLayout.screens[i].screen = nscreen;
|
||||
|
||||
/* now associate the new driver entry with the new screen entry */
|
||||
xf86ConfigLayout.screens[i].screen->device = cptr;
|
||||
cptr->myScreenSection = xf86ConfigLayout.screens[i].screen;
|
||||
|
||||
Reference in New Issue
Block a user