Print this page
5007142 Add ntohll and htonll to sys/byteorder.h
6717509 Need to use bswap/bswapq for byte swap of 64-bit integer on x32/x64
PSARC 2008/474

*** 1,12 **** /* * CDDL HEADER START * * The contents of this file are subject to the terms of the ! * Common Development and Distribution License, Version 1.0 only ! * (the "License"). You may not use this file except in compliance ! * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. --- 1,11 ---- /* * CDDL HEADER START * * The contents of this file are subject to the terms of the ! * Common Development and Distribution License (the "License"). ! * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License.
*** 18,37 **** * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* ! * Copyright 1991-2000, 2003 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ - #pragma ident "%Z%%M% %I% %E% SMI" - #include <sys/types.h> #include <netinet/in.h> #ifdef _LITTLE_ENDIAN uint32_t htonl(uint32_t in) { uint32_t i; --- 17,61 ---- * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* ! * Copyright 2008 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ #include <sys/types.h> #include <netinet/in.h> + /* + * htonll(), ntohll(), htonl(), ntohl(), htons(), ntohs() + * + * On little endian machines these functions reverse the byte order of the + * input parameter and returns the result. This is to convert the byte order + * from host byte order (little endian) to network byte order (big endian), + * or vice versa. + * + * On big endian machines these functions just return the input parameter, + * as the host byte order is the same as the network byte order (big endian). + */ + + #ifdef _LITTLE_ENDIAN + uint64_t + htonll(uint64_t in) + { + return ((uint64_t)htonl((in >> 32) & 0xffffffff) | + ((uint64_t)htonl(in & 0xffffffff) << 32)); + } + + uint64_t + ntohll(uint64_t in) + { + return ((uint64_t)ntohl((in >> 32) & 0xffffffff) | + ((uint64_t)ntohl(in & 0xffffffff) << 32)); + } + uint32_t htonl(uint32_t in) { uint32_t i;
*** 66,76 **** --- 90,111 ---- } #else /* _LITTLE_ENDIAN */ #if defined(lint) + uint64_t + htonll(uint64_t in) + { + return (in); + } + uint64_t + ntohll(uint64_t in) + { + return (in); + } + uint32_t htonl(uint32_t in) { return (in); }