| 
									
										
										
										
											2017-08-27 12:05:17 +02:00
										 |  |  | /*
 | 
					
						
							| 
									
										
										
										
											2017-06-08 20:43:56 -05:00
										 |  |  |  * Copyright (c) 2016-present, Yann Collet, Facebook, Inc. | 
					
						
							|  |  |  |  * All rights reserved. | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2017-08-27 12:05:17 +02:00
										 |  |  |  * This source code is licensed under both the BSD-style license (found in the | 
					
						
							|  |  |  |  * LICENSE file in the root directory of this source tree) and the GPLv2 (found | 
					
						
							|  |  |  |  * in the COPYING file in the root directory of this source tree). | 
					
						
							| 
									
										
										
										
											2017-10-26 16:41:47 -04:00
										 |  |  |  * You may select, at your option, one of the above-listed licenses. | 
					
						
							| 
									
										
										
										
											2017-06-08 20:43:56 -05:00
										 |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*-*************************************
 | 
					
						
							|  |  |  | *  Dependencies | 
					
						
							|  |  |  | ***************************************/ | 
					
						
							| 
									
										
										
										
											2017-07-22 18:46:05 -03:00
										 |  |  | #include <stdlib.h>      /* malloc, calloc, free */
 | 
					
						
							|  |  |  | #include <string.h>      /* memset */
 | 
					
						
							| 
									
										
										
										
											2017-06-08 20:43:56 -05:00
										 |  |  | #include "error_private.h"
 | 
					
						
							| 
									
										
										
										
											2017-10-26 16:41:47 -04:00
										 |  |  | #include "zstd_internal.h"
 | 
					
						
							| 
									
										
										
										
											2017-06-08 20:43:56 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*-****************************************
 | 
					
						
							|  |  |  | *  Version | 
					
						
							|  |  |  | ******************************************/ | 
					
						
							| 
									
										
										
										
											2017-07-22 18:46:05 -03:00
										 |  |  | unsigned ZSTD_versionNumber(void) { return ZSTD_VERSION_NUMBER; } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const char* ZSTD_versionString(void) { return ZSTD_VERSION_STRING; } | 
					
						
							| 
									
										
										
										
											2017-06-08 20:43:56 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*-****************************************
 | 
					
						
							|  |  |  | *  ZSTD Error Management | 
					
						
							|  |  |  | ******************************************/ | 
					
						
							| 
									
										
										
										
											2019-01-03 22:30:03 -02:00
										 |  |  | #undef ZSTD_isError   /* defined within zstd_internal.h */
 | 
					
						
							| 
									
										
										
										
											2017-06-08 20:43:56 -05:00
										 |  |  | /*! ZSTD_isError() :
 | 
					
						
							| 
									
										
										
										
											2019-01-03 22:30:03 -02:00
										 |  |  |  *  tells if a return value is an error code | 
					
						
							|  |  |  |  *  symbol is required for external callers */ | 
					
						
							| 
									
										
										
										
											2017-06-08 20:43:56 -05:00
										 |  |  | unsigned ZSTD_isError(size_t code) { return ERR_isError(code); } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*! ZSTD_getErrorName() :
 | 
					
						
							| 
									
										
										
										
											2018-01-13 13:50:59 +01:00
										 |  |  |  *  provides error code string from function result (useful for debugging) */ | 
					
						
							| 
									
										
										
										
											2017-06-08 20:43:56 -05:00
										 |  |  | const char* ZSTD_getErrorName(size_t code) { return ERR_getErrorName(code); } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*! ZSTD_getError() :
 | 
					
						
							| 
									
										
										
										
											2018-01-13 13:50:59 +01:00
										 |  |  |  *  convert a `size_t` function result into a proper ZSTD_errorCode enum */ | 
					
						
							| 
									
										
										
										
											2017-06-08 20:43:56 -05:00
										 |  |  | ZSTD_ErrorCode ZSTD_getErrorCode(size_t code) { return ERR_getErrorCode(code); } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*! ZSTD_getErrorString() :
 | 
					
						
							| 
									
										
										
										
											2018-01-13 13:50:59 +01:00
										 |  |  |  *  provides error code string from enum */ | 
					
						
							| 
									
										
										
										
											2017-06-08 20:43:56 -05:00
										 |  |  | const char* ZSTD_getErrorString(ZSTD_ErrorCode code) { return ERR_getErrorString(code); } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-13 13:50:59 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-08 20:43:56 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | /*=**************************************************************
 | 
					
						
							|  |  |  | *  Custom allocator | 
					
						
							|  |  |  | ****************************************************************/ | 
					
						
							| 
									
										
										
										
											2017-07-22 18:46:05 -03:00
										 |  |  | void* ZSTD_malloc(size_t size, ZSTD_customMem customMem) | 
					
						
							| 
									
										
										
										
											2017-06-08 20:43:56 -05:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2017-07-22 18:46:05 -03:00
										 |  |  |     if (customMem.customAlloc) | 
					
						
							|  |  |  |         return customMem.customAlloc(customMem.opaque, size); | 
					
						
							|  |  |  |     return malloc(size); | 
					
						
							| 
									
										
										
										
											2017-06-08 20:43:56 -05:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-22 18:46:05 -03:00
										 |  |  | void* ZSTD_calloc(size_t size, ZSTD_customMem customMem) | 
					
						
							| 
									
										
										
										
											2017-06-08 20:43:56 -05:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2017-07-22 18:46:05 -03:00
										 |  |  |     if (customMem.customAlloc) { | 
					
						
							|  |  |  |         /* calloc implemented as malloc+memset;
 | 
					
						
							|  |  |  |          * not as efficient as calloc, but next best guess for custom malloc */ | 
					
						
							|  |  |  |         void* const ptr = customMem.customAlloc(customMem.opaque, size); | 
					
						
							|  |  |  |         memset(ptr, 0, size); | 
					
						
							|  |  |  |         return ptr; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     return calloc(1, size); | 
					
						
							| 
									
										
										
										
											2017-06-08 20:43:56 -05:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void ZSTD_free(void* ptr, ZSTD_customMem customMem) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-07-22 18:46:05 -03:00
										 |  |  |     if (ptr!=NULL) { | 
					
						
							|  |  |  |         if (customMem.customFree) | 
					
						
							|  |  |  |             customMem.customFree(customMem.opaque, ptr); | 
					
						
							|  |  |  |         else | 
					
						
							|  |  |  |             free(ptr); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2017-06-08 20:43:56 -05:00
										 |  |  | } |