libclamav/blob.h
e3aaff8e
 /*
2023340a
  *  Copyright (C) 2007-2008 Sourcefire, Inc.
  *
  *  Authors: Nigel Horne
e3aaff8e
  *
  *  This program is free software; you can redistribute it and/or modify
2023340a
  *  it under the terms of the GNU General Public License version 2 as
  *  published by the Free Software Foundation.
e3aaff8e
  *
  *  This program is distributed in the hope that it will be useful,
  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  *  GNU General Public License for more details.
  *
  *  You should have received a copy of the GNU General Public License
  *  along with this program; if not, write to the Free Software
48b7b4a7
  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
  *  MA 02110-1301, USA.
e3aaff8e
  */
 
0e5a0129
 #ifndef __BLOB_H
 #define __BLOB_H
 
 /*
  * Resizable chunk of memory
  */
e3aaff8e
 typedef struct blob {
 	char	*name;	/* filename */
 	unsigned	char	*data;	/* the stuff itself */
b02bab2b
 	off_t	len;	/* number of bytes of data so far */
 	off_t	size;	/* number of bytes allocated to data so far */
8ef734d4
 	int	isClosed;
e3aaff8e
 #ifdef	CL_DEBUG
 	object_type	magic;	/* verify that this is a blob */
 #endif
 } blob;
 
 blob	*blobCreate(void);
 void	blobDestroy(blob *b);
 void	blobArrayDestroy(blob *b[], int n);
9fe789f8
 void	*blobToMem(blob *b);
78e302e1
 void	blobSetFilename(blob *b, const char *dir, const char *filename);
d73494ef
 int	blobAddData(blob *b, const unsigned char *data, size_t len);
2a4b5c6e
 unsigned char *blobGetData(const blob *b);
bc6bbeff
 size_t	blobGetDataSize(const blob *b);
8ef734d4
 void	blobClose(blob *b);
 int	blobcmp(const blob *b1, const blob *b2);
826864d6
 int	blobGrow(blob *b, size_t len);
0e5a0129
 
 /*
ea49b0fc
  * Like a blob, but associated with a file stored in the temporary directory
0e5a0129
  */
 typedef	struct fileblob {
 	FILE	*fp;
094104a7
 	int	fd;
ea49b0fc
 	blob	b;	/*
 			 * b.name is the name of the attachment as stored in the
 			 * email, not the full path name of the temporary file
 			 */
 	char	*fullname;	/* full pathname of the file */
b5231f5f
 	cli_ctx	*ctx;	/* When set we can scan the blob, otherwise NULL */
 	unsigned	long	bytes_scanned;
1be8b51f
 	unsigned	int	isNotEmpty : 1;
 	unsigned	int	isInfected : 1;
0e5a0129
 } fileblob;
 
 fileblob	*fileblobCreate(void);
a585329e
 int	fileblobScanAndDestroy(fileblob *fb);
 void	fileblobDestructiveDestroy(fileblob *fb);
0e5a0129
 void	fileblobDestroy(fileblob *fb);
 void	fileblobSetFilename(fileblob *fb, const char *dir, const char *filename);
4270f93b
 void    fileblobPartialSet(fileblob *fb, const char *fullname, const char *arg);
0e5a0129
 const	char	*fileblobGetFilename(const fileblob *fb);
a603478f
 void	fileblobSetCTX(fileblob *fb, cli_ctx *ctx);
d73494ef
 int	fileblobAddData(fileblob *fb, const unsigned char *data, size_t len);
a585329e
 int	fileblobScan(const fileblob *fb);
 int	fileblobInfected(const fileblob *fb);
11b50569
 void	sanitiseName(char *name);
0e5a0129
 
 #endif /*_BLOB_H*/