From 018b4fe2be6fa50975a8c9c7c25dfb37513f4323 Mon Sep 17 00:00:00 2001 From: David McCullough Date: Thu, 9 Aug 2001 15:25:15 +0000 Subject: Add cmsg_nxthdr function for the cases where the headers do not so it inline. --- libc/sysdeps/linux/common/cmsg_nxthdr.c | 39 +++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 libc/sysdeps/linux/common/cmsg_nxthdr.c (limited to 'libc/sysdeps/linux/common/cmsg_nxthdr.c') diff --git a/libc/sysdeps/linux/common/cmsg_nxthdr.c b/libc/sysdeps/linux/common/cmsg_nxthdr.c new file mode 100644 index 000000000..fda37f37a --- /dev/null +++ b/libc/sysdeps/linux/common/cmsg_nxthdr.c @@ -0,0 +1,39 @@ +/* Return point to next ancillary data entry in message header. + Copyright (C) 1997, 1998 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include + + +struct cmsghdr * +__cmsg_nxthdr (struct msghdr *mhdr, struct cmsghdr *cmsg) +{ + if ((size_t) cmsg->cmsg_len < sizeof (struct cmsghdr)) + /* The kernel header does this so there may be a reason. */ + return NULL; + + cmsg = (struct cmsghdr *) ((unsigned char *) cmsg + + CMSG_ALIGN (cmsg->cmsg_len)); + if ((unsigned char *) (cmsg + 1) >= ((unsigned char *) mhdr->msg_control + + mhdr->msg_controllen) + || ((unsigned char *) cmsg + CMSG_ALIGN (cmsg->cmsg_len) + >= ((unsigned char *) mhdr->msg_control + mhdr->msg_controllen))) + /* No more entries. */ + return NULL; + return cmsg; +} -- cgit v1.2.3