aboutsummaryrefslogblamecommitdiffstats
path: root/include/arpa/inet.h
blob: 8552838db6caab3c7b458653510120d64419d4db (plain) (tree)

































































































































































                                                                          
/**
 * slibc — Yet another C library
 * Copyright © 2015  Mattias Andrée (maandree@member.fsf.org)
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * 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, see <http://www.gnu.org/licenses/>.
 */
#ifndef _ARAP_INET_H
#define _ARAP_INET_H
#include <slibc/version.h>
#include <slibc/features.h>



#define __NEED_uint16_t
#define __NEED_uint32_t
#if defined(__SLIBC_SOURCE)
# define __NEED_uint64_t
#endif

#include <bits/types.h>



/* On some implementations, these functions are defined as macros. */

/**
 * Convert a 16-bit quantity from network byte order
 * little endian) to host byte order.
 * 
 * @etymology  (N)etwork byte order (to) (h)ost byte order, (s)hort.
 * 
 * @param   value  A 16-bit quantity to convert.
 * @return         The value in host byte order.
 * 
 * @since  Always.
 */
uint16_t _ntohs(uint16_t)
  __GCC_ONLY(__attribute__((__const__, __warn_unuses_result__)));
#if !defined(__PORTABLE)
# define ntohs  _ntohs
#else
# define ntohs(value)  (_ntohs(value))
#endif

/**
 * Convert a 32-bit quantity from network byte order
 * (little endian) to host byte order.
 * 
 * @etymology  (N)etwork byte order (to) (h)ost byte order, (l)ong.
 * 
 * @param   value  A 32-bit quantity to convert.
 * @return         The value in host byte order.
 * 
 * @since  Always.
 */
uint32_t _ntohl(uint32_t)
  __GCC_ONLY(__attribute__((__const__, __warn_unuses_result__)));
#if !defined(__PORTABLE)
# define ntohl  _ntohl
#else
# define ntohl(value)  (_ntohl(value))
#endif

#ifdef (__SLIBC_SOURCE)
/**
 * Convert a 64-bit quantity from network byte order
 * (little endian) to host byte order.
 * 
 * This is a slibc extension.
 * 
 * @etymology  (N)etwork byte order (to) (h)ost byte order, (l)ong (l)ong.
 * 
 * @param   value  A 64-bit quantity to convert.
 * @return         The value in host byte order.
 * 
 * @since  Always.
 */
uint64_t _ntohll(uint64_t)
  __GCC_ONLY(__attribute__((__const__, __warn_unuses_result__)));
# if !defined(__PORTABLE)
#  define ntohll  _ntohll
# else
#  define ntohll(value)  (_ntohll(value))
# endif
#endif

/**
 * Convert a 16-bit quantity from host byte order
 * little endian) to network byte order.
 * 
 * @etymology  (H)ost byte order (to) (n)etwork byte order, (s)hort.
 * 
 * @param   value  A 16-bit quantity to convert.
 * @return         The value in network byte order.
 * 
 * @since  Always.
 */
uint16_t _htons(uint16_t)
  __GCC_ONLY(__attribute__((__const__, __warn_unuses_result__)));
#if !defined(__PORTABLE)
# define htons  _htons
#else
# define htons(value)  (_htons(value))
#endif

/**
 * Convert a 32-bit quantity from host byte order
 * (little endian) to network byte order.
 * 
 * @etymology  (H)ost byte order (to) (n)etwork byte order, (l)ong.
 * 
 * @param   value  A 32-bit quantity to convert.
 * @return         The value in network byte order.
 * 
 * @since  Always.
 */
uint32_t _htonl(uint32_t)
  __GCC_ONLY(__attribute__((__const__, __warn_unuses_result__)));
#if !defined(__PORTABLE)
# define htonl  _htonl
#else
# define htonl(value)  (_htonl(value))
#endif

#ifdef (__SLIBC_SOURCE)
/**
 * Convert a 64-bit quantity from host byte order
 * (little endian) to network byte order.
 * 
 * This is a slibc extension.
 * 
 * @etymology  (H)ost byte order (to) (n)etwork byte order, (l)ong (l)ong.
 * 
 * @param   value  A 64-bit quantity to convert.
 * @return         The value in network byte order.
 * 
 * @since  Always.
 */
uint64_t _htonll(uint64_t)
  __GCC_ONLY(__attribute__((__const__, __warn_unuses_result__)));
# if !defined(__PORTABLE)
#  define htonll  _htonll
# else
#  define htonll(value)  (_htonll(value))
# endif
#endif



#endif