/*
 * Copyright (c) 2002, 2003 Sendmail, Inc. and its suppliers.
 *	All rights reserved.
 *
 * By using this file, you agree to the terms and conditions set
 * forth in the LICENSE file which can be found at the top level of
 * the sendmail distribution.
 *
 *	$Id: cmsg.h,v 1.7 2006/10/05 04:27:35 ca Exp $
 */

#ifndef SM_CMSG_H
#define SM_CMSG_H 1

/*
**  We need the newer CMSG_LEN() and CMSG_SPACE() macros, but few
**   implementations support them today.  These two macros really need
**   an ALIGN() macro, but each implementation does this differently.
*/

#ifndef CMSG_LEN
# define CMSG_LEN(size)		(sizeof(struct cmsghdr) + (size))
#endif /* ! CMSG_LEN */
#ifndef CMSG_SPACE
# define CMSG_SPACE(size)	(sizeof(struct cmsghdr) + (size))
#endif /* ! CMSG_SPACE */

#if MTA_USE_STATETHREADS
# include "statethreads/st.h"
# define fd_T	st_netfd_t
# define sm_sendmsg(s, msg, flags)	st_sendmsg(s, msg, flags, -1)
# define sm_recvmsg(s, msg, flags)	st_recvmsg(s, msg, flags, -1)
# define sm_read_fd	read_fd_st
# define sm_write_fd	write_fd_st
#else /* MTA_USE_STATETHREADS */
# define fd_T	int
# define sm_sendmsg(s, msg, flags)	sendmsg(s, msg, flags)
# define sm_recvmsg(s, msg, flags)	recvmsg(s, msg, flags)
# define sm_read_fd	read_fd
# define sm_write_fd	write_fd
#endif /* MTA_USE_STATETHREADS */

/* functions to transfer fd's over a (UNIX) socket */
ssize_t	sm_write_fd(fd_T _fd, void *_ptr, size_t _nbytes, int _sendfd);
ssize_t	sm_read_fd(fd_T _fd, void *_ptr, size_t _nbytes, int *_recvfd);

#endif /* SM_CMSG_H */


syntax highlighted by Code2HTML, v. 0.9.1