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