xref: /freebsd/contrib/ntp/libparse/binio.c (revision 5f4c09dd85bff675e0ca63c55ea3c517e0fddfcc)
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 <config.h>
37 #include "binio.h"
38 
39 long
40 get_lsb_short(
41 	unsigned char **bufpp
42 	)
43 {
44   long retval;
45 
46   retval  = *((*bufpp)++);
47   retval |= *((*bufpp)++) << 8;
48 
49   return (retval & 0x8000) ? (~0xFFFF | retval) : retval;
50 }
51 
52 void
53 put_lsb_short(
54 	unsigned char **bufpp,
55 	long val
56 	)
57 {
58   *((*bufpp)++) = (unsigned char) (val        & 0xFF);
59   *((*bufpp)++) = (unsigned char) ((val >> 8) & 0xFF);
60 }
61 
62 long
63 get_lsb_long(
64 	unsigned char **bufpp
65 	)
66 {
67   long retval;
68 
69   retval  = *((*bufpp)++);
70   retval |= *((*bufpp)++) << 8;
71   retval |= *((*bufpp)++) << 16;
72   retval |= (u_long)*((*bufpp)++) << 24;
73 
74   return retval;
75 }
76 
77 void
78 put_lsb_long(
79 	unsigned char **bufpp,
80 	long val
81 	)
82 {
83   *((*bufpp)++) = (unsigned char)(val         & 0xFF);
84   *((*bufpp)++) = (unsigned char)((val >> 8)  & 0xFF);
85   *((*bufpp)++) = (unsigned char)((val >> 16) & 0xFF);
86   *((*bufpp)++) = (unsigned char)((val >> 24) & 0xFF);
87 }
88 
89 long
90 get_msb_short(
91 	unsigned char **bufpp
92 	)
93 {
94   long retval;
95 
96   retval  = *((*bufpp)++) << 8;
97   retval |= *((*bufpp)++);
98 
99   return (retval & 0x8000) ? (~0xFFFF | retval) : retval;
100 }
101 
102 void
103 put_msb_short(
104 	unsigned char **bufpp,
105 	long val
106 	)
107 {
108   *((*bufpp)++) = (unsigned char)((val >> 8) & 0xFF);
109   *((*bufpp)++) = (unsigned char)( val       & 0xFF);
110 }
111 
112 long
113 get_msb_long(
114 	unsigned char **bufpp
115 	)
116 {
117   long retval;
118 
119   retval  = (u_long)*((*bufpp)++) << 24;
120   retval |= *((*bufpp)++) << 16;
121   retval |= *((*bufpp)++) << 8;
122   retval |= *((*bufpp)++);
123 
124   return retval;
125 }
126 
127 void
128 put_msb_long(
129 	unsigned char **bufpp,
130 	long val
131 	)
132 {
133   *((*bufpp)++) = (unsigned char)((val >> 24) & 0xFF);
134   *((*bufpp)++) = (unsigned char)((val >> 16) & 0xFF);
135   *((*bufpp)++) = (unsigned char)((val >> 8 ) & 0xFF);
136   *((*bufpp)++) = (unsigned char)( val        & 0xFF);
137 }
138 
139 /*
140  * binio.c,v
141  * Revision 4.2  1999/02/21 12:17:34  kardel
142  * 4.91f reconcilation
143  *
144  * Revision 4.1  1998/06/28 16:47:50  kardel
145  * added {get,put}_msb_{short,long} functions
146  *
147  * Revision 4.0  1998/04/10 19:46:16  kardel
148  * Start 4.0 release version numbering
149  *
150  * Revision 1.1  1998/04/10 19:27:46  kardel
151  * initial NTP VERSION 4 integration of PARSE with GPS166 binary support
152  *
153  * Revision 1.1  1997/10/06 21:05:46  kardel
154  * new parse structure
155  *
156  */
157