--- libaitio/inc/aitio.h 2012/01/05 09:03:06 1.13.2.9 +++ libaitio/inc/aitio.h 2012/02/02 15:53:40 1.13.2.13 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: aitio.h,v 1.13.2.9 2012/01/05 09:03:06 misho Exp $ +* $Id: aitio.h,v 1.13.2.13 2012/02/02 15:53:40 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -148,9 +148,12 @@ typedef struct { #define AIT_TYPE(_vl) ((ait_type_t) (_vl)->val_type) #define AIT_LEN(_vl) (_vl)->val_len +#define AIT_RAW(_vl) (_vl)->val.net #define AIT_BLOB_CHUNKS(_vl, _n) (assert((_vl)), AIT_LEN((_vl)) / _n + (AIT_LEN((_vl)) % _n) ? 1 : 0) #define AIT_ISEMPTY(_vl) (assert((_vl)), AIT_TYPE((_vl)) == empty) +#define AIT_GET_LIKE(_vl, _type) (assert((_vl)), (_type) (_vl)->val.net) + #define AIT_GET_PTR(_vl) (assert((_vl)), assert(AIT_TYPE((_vl)) == ptr), (_vl)->val.ptr) #define AIT_GET_PTR2(_vl) (assert((_vl)), (_vl)->val.ptr) #define AIT_GET_BUF(_vl) (assert((_vl)), assert(AIT_TYPE((_vl)) == buffer), (_vl)->val.buffer) @@ -839,7 +842,7 @@ extern int io_Debug; syslog(LOG_ERR, "Error:%s(%d): #%d - %s\n", \ __func__, __LINE__, (x), str); \ } while (0) -#define ioLOGERR(x) do { \ +#define ioSYSERR(x) do { \ if (x > 0 || errno) \ syslog(LOG_ERR, "Error(sys):%s(%d): #%d - %s\n", \ __func__, __LINE__, x > 0 ? x : errno, \ @@ -994,6 +997,47 @@ size_t ioSendFile(int s, const char *csFile, size_t se * return: 0 error, >0 ok, received bytes */ size_t ioRecvFile(int s, const char *csFile, size_t recvLen, int over, int rcvbuf); + + +/* Buffered file access over memory block */ + +/* + * io_fmemopen() File buffered stream operations over memory block + * + * @base = Base address of memory block, if =NULL Infinit length(auto-grow) + * @basesize = Size of memory block + * return: NULL error or !=NULL Opened file resource + */ +FILE *io_fmemopen(void ** __restrict base, off_t basesize); +/* + * io_fmapopen() File buffered stream operations over MMAP block + * + * @csFile = Filename for MMAP, if =NULL private MMAP block + * @mode = File open mode + * @perm = If file not exists will be created with this access permissions + * @prot = MMAP protection + * @flags = MMAP mode flags + * @offset = Map from file offset, if csFile==NULL then this is size of MMAP private block + * return: NULL error or !=NULL Opened file resource + */ +FILE *io_fmapopen(const char *csFile, int mode, int perm, int prot, int flags, off_t offset); +/* + * io_fd2buf() Convert open file handle to buffered file I/O + * + * @fd = File handle + * @mode = Permissions for new buffered file I/O + * return: NULL error or open buffered file + */ +inline FILE *io_fd2buf(int fd, const char *mode); +/* + * io_dumbFile() Create empry or dumb file with fixed size + * + * @csFile = Filename for create + * @mode = File access permissions + * @size = File size + * return: -1 error or open file handle + */ +int io_dumbFile(const char *csFile, int mode, off_t size); #endif