dix: AddExtension: simplify error return path
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
This commit is contained in:
		
							parent
							
								
									9149af91d2
								
							
						
					
					
						commit
						d536bd7f66
					
				|  | @ -76,7 +76,6 @@ AddExtension(const char *name, int NumEvents, int NumErrors, | ||||||
|              unsigned short (*MinorOpcodeProc) (ClientPtr c3)) |              unsigned short (*MinorOpcodeProc) (ClientPtr c3)) | ||||||
| { | { | ||||||
|     int i; |     int i; | ||||||
|     ExtensionEntry *ext, **newexts; |  | ||||||
| 
 | 
 | ||||||
|     if (!MainProc || !SwappedMainProc || !MinorOpcodeProc) |     if (!MainProc || !SwappedMainProc || !MinorOpcodeProc) | ||||||
|         return ((ExtensionEntry *) NULL); |         return ((ExtensionEntry *) NULL); | ||||||
|  | @ -87,27 +86,21 @@ AddExtension(const char *name, int NumEvents, int NumErrors, | ||||||
|         return ((ExtensionEntry *) NULL); |         return ((ExtensionEntry *) NULL); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     ext = calloc(1, sizeof(ExtensionEntry)); |     ExtensionEntry *ext = calloc(1, sizeof(ExtensionEntry)); | ||||||
|     if (!ext) |     if (!ext) | ||||||
|         return NULL; |         return NULL; | ||||||
|     if (!dixAllocatePrivates(&ext->devPrivates, PRIVATE_EXTENSION)) { |     if (!dixAllocatePrivates(&ext->devPrivates, PRIVATE_EXTENSION)) | ||||||
|         free(ext); |         goto badalloc; | ||||||
|         return NULL; |  | ||||||
|     } |  | ||||||
|     ext->name = strdup(name); |     ext->name = strdup(name); | ||||||
|     if (!ext->name) { |     if (!ext->name) | ||||||
|         dixFreePrivates(ext->devPrivates, PRIVATE_EXTENSION); |         goto badalloc; | ||||||
|         free(ext); | 
 | ||||||
|         return ((ExtensionEntry *) NULL); |  | ||||||
|     } |  | ||||||
|     i = NumExtensions; |     i = NumExtensions; | ||||||
|     newexts = reallocarray(extensions, i + 1, sizeof(ExtensionEntry *)); | 
 | ||||||
|     if (!newexts) { |     ExtensionEntry **newexts = reallocarray(extensions, i + 1, sizeof(ExtensionEntry *)); | ||||||
|         free((void *) ext->name); |     if (!newexts) | ||||||
|         dixFreePrivates(ext->devPrivates, PRIVATE_EXTENSION); |         goto badalloc; | ||||||
|         free(ext); | 
 | ||||||
|         return ((ExtensionEntry *) NULL); |  | ||||||
|     } |  | ||||||
|     NumExtensions++; |     NumExtensions++; | ||||||
|     extensions = newexts; |     extensions = newexts; | ||||||
|     extensions[i] = ext; |     extensions[i] = ext; | ||||||
|  | @ -140,6 +133,14 @@ AddExtension(const char *name, int NumEvents, int NumErrors, | ||||||
|     RegisterExtensionNames(ext); |     RegisterExtensionNames(ext); | ||||||
| #endif | #endif | ||||||
|     return ext; |     return ext; | ||||||
|  | 
 | ||||||
|  | badalloc: | ||||||
|  |     if (ext) { | ||||||
|  |         free((char*)ext->name); | ||||||
|  |         dixFreePrivates(ext->devPrivates, PRIVATE_EXTENSION); | ||||||
|  |         free(ext); | ||||||
|  |     } | ||||||
|  |     return NULL; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  |  | ||||||
|  | @ -541,6 +541,9 @@ _dixFreeObjectWithPrivates(void *object, PrivatePtr privates, | ||||||
| void | void | ||||||
| dixFreePrivates(PrivatePtr privates, DevPrivateType type) | dixFreePrivates(PrivatePtr privates, DevPrivateType type) | ||||||
| { | { | ||||||
|  |     if (!privates) | ||||||
|  |         return; | ||||||
|  | 
 | ||||||
|     _dixFiniPrivates(privates, type); |     _dixFiniPrivates(privates, type); | ||||||
|     --global_keys[type].allocated; |     --global_keys[type].allocated; | ||||||
|     free(privates); |     free(privates); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue