1ff64831b0965c16c95c9f81a148f30a6ef3a6c64Calin Juravle/* 2ff64831b0965c16c95c9f81a148f30a6ef3a6c64Calin Juravle * Copyright (C) 2014 The Android Open Source Project 3ff64831b0965c16c95c9f81a148f30a6ef3a6c64Calin Juravle * All rights reserved. 4ff64831b0965c16c95c9f81a148f30a6ef3a6c64Calin Juravle * 5ff64831b0965c16c95c9f81a148f30a6ef3a6c64Calin Juravle * Redistribution and use in source and binary forms, with or without 6ff64831b0965c16c95c9f81a148f30a6ef3a6c64Calin Juravle * modification, are permitted provided that the following conditions 7ff64831b0965c16c95c9f81a148f30a6ef3a6c64Calin Juravle * are met: 8ff64831b0965c16c95c9f81a148f30a6ef3a6c64Calin Juravle * * Redistributions of source code must retain the above copyright 9ff64831b0965c16c95c9f81a148f30a6ef3a6c64Calin Juravle * notice, this list of conditions and the following disclaimer. 10ff64831b0965c16c95c9f81a148f30a6ef3a6c64Calin Juravle * * Redistributions in binary form must reproduce the above copyright 11ff64831b0965c16c95c9f81a148f30a6ef3a6c64Calin Juravle * notice, this list of conditions and the following disclaimer in 12ff64831b0965c16c95c9f81a148f30a6ef3a6c64Calin Juravle * the documentation and/or other materials provided with the 13ff64831b0965c16c95c9f81a148f30a6ef3a6c64Calin Juravle * distribution. 14ff64831b0965c16c95c9f81a148f30a6ef3a6c64Calin Juravle * 15ff64831b0965c16c95c9f81a148f30a6ef3a6c64Calin Juravle * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16ff64831b0965c16c95c9f81a148f30a6ef3a6c64Calin Juravle * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17ff64831b0965c16c95c9f81a148f30a6ef3a6c64Calin Juravle * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 18ff64831b0965c16c95c9f81a148f30a6ef3a6c64Calin Juravle * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 19ff64831b0965c16c95c9f81a148f30a6ef3a6c64Calin Juravle * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 20ff64831b0965c16c95c9f81a148f30a6ef3a6c64Calin Juravle * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 21ff64831b0965c16c95c9f81a148f30a6ef3a6c64Calin Juravle * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 22ff64831b0965c16c95c9f81a148f30a6ef3a6c64Calin Juravle * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 23ff64831b0965c16c95c9f81a148f30a6ef3a6c64Calin Juravle * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 24ff64831b0965c16c95c9f81a148f30a6ef3a6c64Calin Juravle * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 25ff64831b0965c16c95c9f81a148f30a6ef3a6c64Calin Juravle * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26ff64831b0965c16c95c9f81a148f30a6ef3a6c64Calin Juravle * SUCH DAMAGE. 27ff64831b0965c16c95c9f81a148f30a6ef3a6c64Calin Juravle */ 28ff64831b0965c16c95c9f81a148f30a6ef3a6c64Calin Juravle 29ff64831b0965c16c95c9f81a148f30a6ef3a6c64Calin Juravle#include <sys/socket.h> 30ff64831b0965c16c95c9f81a148f30a6ef3a6c64Calin Juravle 31096b4eb752aa7a5392875cb2f2faf0d67c676ac1Calin Juravlecmsghdr* __cmsg_nxthdr(msghdr* msg, cmsghdr* cmsg) { 32ff64831b0965c16c95c9f81a148f30a6ef3a6c64Calin Juravle cmsghdr* ptr; 33ff64831b0965c16c95c9f81a148f30a6ef3a6c64Calin Juravle ptr = reinterpret_cast<cmsghdr*>(reinterpret_cast<char*>(cmsg) + CMSG_ALIGN(cmsg->cmsg_len)); 34ff64831b0965c16c95c9f81a148f30a6ef3a6c64Calin Juravle size_t len = reinterpret_cast<char*>(ptr+1) - reinterpret_cast<char*>(msg->msg_control); 35ff64831b0965c16c95c9f81a148f30a6ef3a6c64Calin Juravle if (len > msg->msg_controllen) { 36ff64831b0965c16c95c9f81a148f30a6ef3a6c64Calin Juravle return NULL; 37ff64831b0965c16c95c9f81a148f30a6ef3a6c64Calin Juravle } 38ff64831b0965c16c95c9f81a148f30a6ef3a6c64Calin Juravle return ptr; 39ff64831b0965c16c95c9f81a148f30a6ef3a6c64Calin Juravle} 40