1181834Sroberto/* 2181834Sroberto * /src/NTP/ntp4-dev/libntp/binio.c,v 4.5 2005/04/16 17:32:10 kardel RELEASE_20050508_A 3181834Sroberto * 4181834Sroberto * binio.c,v 4.5 2005/04/16 17:32:10 kardel RELEASE_20050508_A 5181834Sroberto * 6181834Sroberto * $Created: Sun Jul 20 12:55:33 1997 $ 7181834Sroberto * 8181834Sroberto * Copyright (c) 1997-2005 by Frank Kardel <kardel <AT> ntp.org> 9181834Sroberto * 10181834Sroberto * Redistribution and use in source and binary forms, with or without 11181834Sroberto * modification, are permitted provided that the following conditions 12181834Sroberto * are met: 13181834Sroberto * 1. Redistributions of source code must retain the above copyright 14181834Sroberto * notice, this list of conditions and the following disclaimer. 15181834Sroberto * 2. Redistributions in binary form must reproduce the above copyright 16181834Sroberto * notice, this list of conditions and the following disclaimer in the 17181834Sroberto * documentation and/or other materials provided with the distribution. 18181834Sroberto * 3. Neither the name of the author nor the names of its contributors 19181834Sroberto * may be used to endorse or promote products derived from this software 20181834Sroberto * without specific prior written permission. 21181834Sroberto * 22181834Sroberto * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 23181834Sroberto * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 24181834Sroberto * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 25181834Sroberto * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 26181834Sroberto * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 27181834Sroberto * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 28181834Sroberto * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 29181834Sroberto * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 30181834Sroberto * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 31181834Sroberto * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 32181834Sroberto * SUCH DAMAGE. 33181834Sroberto * 34181834Sroberto */ 35181834Sroberto 36280849Scy#include <config.h> 37181834Sroberto#include "binio.h" 38181834Sroberto 39181834Srobertolong 40181834Srobertoget_lsb_short( 41181834Sroberto unsigned char **bufpp 42181834Sroberto ) 43181834Sroberto{ 44181834Sroberto long retval; 45181834Sroberto 46181834Sroberto retval = *((*bufpp)++); 47181834Sroberto retval |= *((*bufpp)++) << 8; 48181834Sroberto 49181834Sroberto return (retval & 0x8000) ? (~0xFFFF | retval) : retval; 50181834Sroberto} 51181834Sroberto 52181834Srobertovoid 53181834Srobertoput_lsb_short( 54181834Sroberto unsigned char **bufpp, 55181834Sroberto long val 56181834Sroberto ) 57181834Sroberto{ 58181834Sroberto *((*bufpp)++) = (unsigned char) (val & 0xFF); 59181834Sroberto *((*bufpp)++) = (unsigned char) ((val >> 8) & 0xFF); 60181834Sroberto} 61181834Sroberto 62181834Srobertolong 63181834Srobertoget_lsb_long( 64181834Sroberto unsigned char **bufpp 65181834Sroberto ) 66181834Sroberto{ 67181834Sroberto long retval; 68181834Sroberto 69181834Sroberto retval = *((*bufpp)++); 70181834Sroberto retval |= *((*bufpp)++) << 8; 71181834Sroberto retval |= *((*bufpp)++) << 16; 72280849Scy retval |= (u_long)*((*bufpp)++) << 24; 73181834Sroberto 74181834Sroberto return retval; 75181834Sroberto} 76181834Sroberto 77181834Srobertovoid 78181834Srobertoput_lsb_long( 79181834Sroberto unsigned char **bufpp, 80181834Sroberto long val 81181834Sroberto ) 82181834Sroberto{ 83181834Sroberto *((*bufpp)++) = (unsigned char)(val & 0xFF); 84181834Sroberto *((*bufpp)++) = (unsigned char)((val >> 8) & 0xFF); 85181834Sroberto *((*bufpp)++) = (unsigned char)((val >> 16) & 0xFF); 86181834Sroberto *((*bufpp)++) = (unsigned char)((val >> 24) & 0xFF); 87181834Sroberto} 88181834Sroberto 89181834Srobertolong 90181834Srobertoget_msb_short( 91181834Sroberto unsigned char **bufpp 92181834Sroberto ) 93181834Sroberto{ 94181834Sroberto long retval; 95181834Sroberto 96181834Sroberto retval = *((*bufpp)++) << 8; 97181834Sroberto retval |= *((*bufpp)++); 98181834Sroberto 99181834Sroberto return (retval & 0x8000) ? (~0xFFFF | retval) : retval; 100181834Sroberto} 101181834Sroberto 102181834Srobertovoid 103181834Srobertoput_msb_short( 104181834Sroberto unsigned char **bufpp, 105181834Sroberto long val 106181834Sroberto ) 107181834Sroberto{ 108181834Sroberto *((*bufpp)++) = (unsigned char)((val >> 8) & 0xFF); 109181834Sroberto *((*bufpp)++) = (unsigned char)( val & 0xFF); 110181834Sroberto} 111181834Sroberto 112181834Srobertolong 113181834Srobertoget_msb_long( 114181834Sroberto unsigned char **bufpp 115181834Sroberto ) 116181834Sroberto{ 117181834Sroberto long retval; 118181834Sroberto 119280849Scy retval = (u_long)*((*bufpp)++) << 24; 120181834Sroberto retval |= *((*bufpp)++) << 16; 121181834Sroberto retval |= *((*bufpp)++) << 8; 122181834Sroberto retval |= *((*bufpp)++); 123181834Sroberto 124181834Sroberto return retval; 125181834Sroberto} 126181834Sroberto 127181834Srobertovoid 128181834Srobertoput_msb_long( 129181834Sroberto unsigned char **bufpp, 130181834Sroberto long val 131181834Sroberto ) 132181834Sroberto{ 133181834Sroberto *((*bufpp)++) = (unsigned char)((val >> 24) & 0xFF); 134181834Sroberto *((*bufpp)++) = (unsigned char)((val >> 16) & 0xFF); 135181834Sroberto *((*bufpp)++) = (unsigned char)((val >> 8 ) & 0xFF); 136181834Sroberto *((*bufpp)++) = (unsigned char)( val & 0xFF); 137181834Sroberto} 138181834Sroberto 139181834Sroberto/* 140181834Sroberto * binio.c,v 141181834Sroberto * Revision 4.2 1999/02/21 12:17:34 kardel 142181834Sroberto * 4.91f reconcilation 143181834Sroberto * 144181834Sroberto * Revision 4.1 1998/06/28 16:47:50 kardel 145181834Sroberto * added {get,put}_msb_{short,long} functions 146181834Sroberto * 147181834Sroberto * Revision 4.0 1998/04/10 19:46:16 kardel 148181834Sroberto * Start 4.0 release version numbering 149181834Sroberto * 150181834Sroberto * Revision 1.1 1998/04/10 19:27:46 kardel 151181834Sroberto * initial NTP VERSION 4 integration of PARSE with GPS166 binary support 152181834Sroberto * 153181834Sroberto * Revision 1.1 1997/10/06 21:05:46 kardel 154181834Sroberto * new parse structure 155181834Sroberto * 156181834Sroberto */ 157