mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-10-31 03:58:17 +00:00 
			
		
		
		
	At present dm/device.h includes the linux-compatible features. This requires including linux/compat.h which in turn includes a lot of headers. One of these is malloc.h which we thus end up including in every file in U-Boot. Apart from the inefficiency of this, it is problematic for sandbox which needs to use the system malloc() in some files. Move the compatibility features into a separate header file. Signed-off-by: Simon Glass <sjg@chromium.org>
		
			
				
	
	
		
			67 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| // SPDX-License-Identifier: (GPL-2.0 or BSD-3-Clause-Clear)
 | |
| /**
 | |
|  * Copyright (c) 2016-present, Yann Collet, Facebook, Inc.
 | |
|  * All rights reserved.
 | |
|  */
 | |
| 
 | |
| /*-*************************************
 | |
| *  Dependencies
 | |
| ***************************************/
 | |
| #include "error_private.h"
 | |
| #include "zstd_internal.h" /* declaration of ZSTD_isError, ZSTD_getErrorName, ZSTD_getErrorCode, ZSTD_getErrorString, ZSTD_versionNumber */
 | |
| #include <malloc.h>
 | |
| #include <linux/kernel.h>
 | |
| 
 | |
| /*=**************************************************************
 | |
| *  Custom allocator
 | |
| ****************************************************************/
 | |
| 
 | |
| #define stack_push(stack, size)                                 \
 | |
| 	({                                                      \
 | |
| 		void *const ptr = ZSTD_PTR_ALIGN((stack)->ptr); \
 | |
| 		(stack)->ptr = (char *)ptr + (size);            \
 | |
| 		(stack)->ptr <= (stack)->end ? ptr : NULL;      \
 | |
| 	})
 | |
| 
 | |
| ZSTD_customMem ZSTD_initStack(void *workspace, size_t workspaceSize)
 | |
| {
 | |
| 	ZSTD_customMem stackMem = {ZSTD_stackAlloc, ZSTD_stackFree, workspace};
 | |
| 	ZSTD_stack *stack = (ZSTD_stack *)workspace;
 | |
| 	/* Verify preconditions */
 | |
| 	if (!workspace || workspaceSize < sizeof(ZSTD_stack) || workspace != ZSTD_PTR_ALIGN(workspace)) {
 | |
| 		ZSTD_customMem error = {NULL, NULL, NULL};
 | |
| 		return error;
 | |
| 	}
 | |
| 	/* Initialize the stack */
 | |
| 	stack->ptr = workspace;
 | |
| 	stack->end = (char *)workspace + workspaceSize;
 | |
| 	stack_push(stack, sizeof(ZSTD_stack));
 | |
| 	return stackMem;
 | |
| }
 | |
| 
 | |
| void *ZSTD_stackAllocAll(void *opaque, size_t *size)
 | |
| {
 | |
| 	ZSTD_stack *stack = (ZSTD_stack *)opaque;
 | |
| 	*size = (BYTE const *)stack->end - (BYTE *)ZSTD_PTR_ALIGN(stack->ptr);
 | |
| 	return stack_push(stack, *size);
 | |
| }
 | |
| 
 | |
| void *ZSTD_stackAlloc(void *opaque, size_t size)
 | |
| {
 | |
| 	ZSTD_stack *stack = (ZSTD_stack *)opaque;
 | |
| 	return stack_push(stack, size);
 | |
| }
 | |
| void ZSTD_stackFree(void *opaque, void *address)
 | |
| {
 | |
| 	(void)opaque;
 | |
| 	(void)address;
 | |
| }
 | |
| 
 | |
| void *ZSTD_malloc(size_t size, ZSTD_customMem customMem) { return customMem.customAlloc(customMem.opaque, size); }
 | |
| 
 | |
| void ZSTD_free(void *ptr, ZSTD_customMem customMem)
 | |
| {
 | |
| 	if (ptr != NULL)
 | |
| 		customMem.customFree(customMem.opaque, ptr);
 | |
| }
 |