Home | History | Annotate | Line # | Download | only in libparse
      1 /*	$NetBSD: binio.c,v 1.5 2020/05/25 20:47:25 christos Exp $	*/
      2 
      3 /*
      4  * /src/NTP/ntp4-dev/libntp/binio.c,v 4.5 2005/04/16 17:32:10 kardel RELEASE_20050508_A
      5  *
      6  * binio.c,v 4.5 2005/04/16 17:32:10 kardel RELEASE_20050508_A
      7  *
      8  * $Created: Sun Jul 20 12:55:33 1997 $
      9  *
     10  * Copyright (c) 1997-2005 by Frank Kardel <kardel <AT> ntp.org>
     11  *
     12  * Redistribution and use in source and binary forms, with or without
     13  * modification, are permitted provided that the following conditions
     14  * are met:
     15  * 1. Redistributions of source code must retain the above copyright
     16  *    notice, this list of conditions and the following disclaimer.
     17  * 2. Redistributions in binary form must reproduce the above copyright
     18  *    notice, this list of conditions and the following disclaimer in the
     19  *    documentation and/or other materials provided with the distribution.
     20  * 3. Neither the name of the author nor the names of its contributors
     21  *    may be used to endorse or promote products derived from this software
     22  *    without specific prior written permission.
     23  *
     24  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
     25  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     26  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     27  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
     28  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     29  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     30  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     31  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     32  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     33  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     34  * SUCH DAMAGE.
     35  *
     36  */
     37 
     38 #include <config.h>
     39 #include "binio.h"
     40 
     41 long
     42 get_lsb_short(
     43 	unsigned char **bufpp
     44 	)
     45 {
     46   long retval;
     47 
     48   retval  = *((*bufpp)++);
     49   retval |= *((*bufpp)++) << 8;
     50 
     51   return (retval & 0x8000) ? (~0xFFFF | retval) : retval;
     52 }
     53 
     54 void
     55 put_lsb_short(
     56 	unsigned char **bufpp,
     57 	long val
     58 	)
     59 {
     60   *((*bufpp)++) = (unsigned char) (val        & 0xFF);
     61   *((*bufpp)++) = (unsigned char) ((val >> 8) & 0xFF);
     62 }
     63 
     64 long
     65 get_lsb_long(
     66 	unsigned char **bufpp
     67 	)
     68 {
     69   long retval;
     70 
     71   retval  = *((*bufpp)++);
     72   retval |= *((*bufpp)++) << 8;
     73   retval |= *((*bufpp)++) << 16;
     74   retval |= (u_long)*((*bufpp)++) << 24;
     75 
     76   return retval;
     77 }
     78 
     79 void
     80 put_lsb_long(
     81 	unsigned char **bufpp,
     82 	long val
     83 	)
     84 {
     85   *((*bufpp)++) = (unsigned char)(val         & 0xFF);
     86   *((*bufpp)++) = (unsigned char)((val >> 8)  & 0xFF);
     87   *((*bufpp)++) = (unsigned char)((val >> 16) & 0xFF);
     88   *((*bufpp)++) = (unsigned char)((val >> 24) & 0xFF);
     89 }
     90 
     91 long
     92 get_msb_short(
     93 	unsigned char **bufpp
     94 	)
     95 {
     96   long retval;
     97 
     98   retval  = *((*bufpp)++) << 8;
     99   retval |= *((*bufpp)++);
    100 
    101   return (retval & 0x8000) ? (~0xFFFF | retval) : retval;
    102 }
    103 
    104 void
    105 put_msb_short(
    106 	unsigned char **bufpp,
    107 	long val
    108 	)
    109 {
    110   *((*bufpp)++) = (unsigned char)((val >> 8) & 0xFF);
    111   *((*bufpp)++) = (unsigned char)( val       & 0xFF);
    112 }
    113 
    114 long
    115 get_msb_long(
    116 	unsigned char **bufpp
    117 	)
    118 {
    119   long retval;
    120 
    121   retval  = (u_long)*((*bufpp)++) << 24;
    122   retval |= *((*bufpp)++) << 16;
    123   retval |= *((*bufpp)++) << 8;
    124   retval |= *((*bufpp)++);
    125 
    126   return retval;
    127 }
    128 
    129 void
    130 put_msb_long(
    131 	unsigned char **bufpp,
    132 	long val
    133 	)
    134 {
    135   *((*bufpp)++) = (unsigned char)((val >> 24) & 0xFF);
    136   *((*bufpp)++) = (unsigned char)((val >> 16) & 0xFF);
    137   *((*bufpp)++) = (unsigned char)((val >> 8 ) & 0xFF);
    138   *((*bufpp)++) = (unsigned char)( val        & 0xFF);
    139 }
    140 
    141 /*
    142  * binio.c,v
    143  * Revision 4.2  1999/02/21 12:17:34  kardel
    144  * 4.91f reconcilation
    145  *
    146  * Revision 4.1  1998/06/28 16:47:50  kardel
    147  * added {get,put}_msb_{short,long} functions
    148  *
    149  * Revision 4.0  1998/04/10 19:46:16  kardel
    150  * Start 4.0 release version numbering
    151  *
    152  * Revision 1.1  1998/04/10 19:27:46  kardel
    153  * initial NTP VERSION 4 integration of PARSE with GPS166 binary support
    154  *
    155  * Revision 1.1  1997/10/06 21:05:46  kardel
    156  * new parse structure
    157  *
    158  */
    159