mirror of
				https://github.com/Cisco-Talos/clamav.git
				synced 2025-10-31 16:10:54 +00:00 
			
		
		
		
	draft new fmap scan API
This commit is contained in:
		
							parent
							
								
									b4d884d920
								
							
						
					
					
						commit
						778408051c
					
				
					 1 changed files with 36 additions and 0 deletions
				
			
		|  | @ -358,6 +358,42 @@ extern const char *cl_retver(void); | ||||||
| /* others */ | /* others */ | ||||||
| extern const char *cl_strerror(int clerror); | extern const char *cl_strerror(int clerror); | ||||||
| 
 | 
 | ||||||
|  | /* custom data scanning */ | ||||||
|  | struct cl_fmap; | ||||||
|  | typedef struct cl_fmap cl_fmap_t; | ||||||
|  | 
 | ||||||
|  | /* handle - the handle passed to cl_fmap_open_handle, its meaning is up to the
 | ||||||
|  |  *    callback's implementation | ||||||
|  |  * buf, count, offset - read 'count' bytes starting at 'offset' into the buffer 'buf' | ||||||
|  |  * Thread safety: it is guaranteed that only one callback is executing for a specific handle at | ||||||
|  |  * any time, but there might be multiple callbacks executing for different | ||||||
|  |  * handle at the same time. | ||||||
|  |  */ | ||||||
|  | typedef ssize_t (*clcb_pread)(void* handle, void *buf, size_t count, off_t offset); | ||||||
|  | 
 | ||||||
|  | /* Open a map for scanning custom data accessed by a handle and pread (lseek +
 | ||||||
|  |  * read)-like interface. For example a WIN32 HANDLE. | ||||||
|  |  * By default fmap will use aging to discard old data, unless you tell it not | ||||||
|  |  * to. | ||||||
|  |  * The handle will be passed to the callback each time. | ||||||
|  |  */ | ||||||
|  | extern cl_fmap_t *cl_fmap_open_handle(void* handle, size_t offset, size_t len, | ||||||
|  | 				      clcb_pread, int use_aging); | ||||||
|  | 
 | ||||||
|  | /* Open a map for scanning custom data, where the data is already in memory,
 | ||||||
|  |  * either in the form of a buffer, a memory mapped file, etc. | ||||||
|  |  * Note that the memory [start, start+len) must be the _entire_ file, | ||||||
|  |  * you can't give it parts of a file and expect detection to work. | ||||||
|  |  */ | ||||||
|  | extern cl_fmap_t *cl_fmap_open_memory(const void *start, size_t len); | ||||||
|  | 
 | ||||||
|  | /* Releases resources associated with the map, you should release any resources
 | ||||||
|  |  * you hold only after (handles, maps) calling this function */ | ||||||
|  | extern void cl_fmap_close(cl_fmap_t*); | ||||||
|  | 
 | ||||||
|  | /* Scan custom data */ | ||||||
|  | extern int cl_scanmap_callback(cl_fmap_t *map, const char **virname, unsigned long int *scanned, const struct cl_engine *engine, unsigned int scanoptions, void *context); | ||||||
|  | 
 | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
| } | } | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Török Edvin
						Török Edvin