Added code to check MD5 sums in mkisofs; should no longer need to run
[jigit.git] / endian.c
1 #include "endian.h"
2
3 /* Write a 64-bit quantity out into memory in BIG ENDIAN order */
4 void write_be64(in, out)
5     unsigned long long in;
6     unsigned char *out;
7 {
8     out[0] = (in >> 56) & 0xFF;
9     out[1] = (in >> 48) & 0xFF;
10     out[2] = (in >> 40) & 0xFF;
11     out[3] = (in >> 32) & 0xFF;
12     out[4] = (in >> 24) & 0xFF;
13     out[5] = (in >> 16) & 0xFF;
14     out[6] = (in >> 8) & 0xFF;
15     out[7] = in & 0xFF;
16 }
17
18 /* Read in a 64-bit BIG ENDIAN quantity */
19 unsigned long long read_be64(in)
20     unsigned char *in;
21 {
22     unsigned long long result = 0;
23
24     result |= (unsigned long long)in[0] << 56;
25     result |= (unsigned long long)in[1] << 48;
26     result |= (unsigned long long)in[2] << 40;
27     result |= (unsigned long long)in[3] << 32;
28     result |= (unsigned long long)in[4] << 24;
29     result |= (unsigned long long)in[5] << 16;
30     result |= (unsigned long long)in[6] << 8;
31     result |= (unsigned long long)in[7];
32     
33     return result;
34 }
35
36 /* Write a 64-bit quantity out into memory in LITTLE ENDIAN order */
37 void write_le64(in, out)
38     unsigned long long in;
39     unsigned char *out;
40 {
41     out[0] = in & 0xFF;
42     out[1] = (in >> 8) & 0xFF;
43     out[2] = (in >> 16) & 0xFF;
44     out[3] = (in >> 24) & 0xFF;
45     out[4] = (in >> 32) & 0xFF;
46     out[5] = (in >> 40) & 0xFF;
47     out[6] = (in >> 48) & 0xFF;
48     out[7] = (in >> 56) & 0xFF;
49 }
50
51 /* Read in a 64-bit LITTLE ENDIAN quantity */
52 unsigned long long read_le64(in)
53     unsigned char *in;
54 {
55     unsigned long long result = 0;
56
57     result |= (unsigned long long)in[0];
58     result |= (unsigned long long)in[1] << 8;
59     result |= (unsigned long long)in[2] << 16;
60     result |= (unsigned long long)in[3] << 24;
61     result |= (unsigned long long)in[4] << 32;
62     result |= (unsigned long long)in[5] << 40;
63     result |= (unsigned long long)in[6] << 48;
64     result |= (unsigned long long)in[7] << 56;
65     
66     return result;
67 }
68
69 /* Write a 48-bit quantity out into memory in LITTLE ENDIAN order */
70 void write_le48(in, out)
71     unsigned long long in;
72     unsigned char *out;
73 {
74     out[0] = in & 0xFF;
75     out[1] = (in >> 8) & 0xFF;
76     out[2] = (in >> 16) & 0xFF;
77     out[3] = (in >> 24) & 0xFF;
78     out[4] = (in >> 32) & 0xFF;
79     out[5] = (in >> 40) & 0xFF;
80 }
81
82 /* Read in a 48-bit LITTLE ENDIAN quantity */
83 unsigned long long read_le48(in)
84     unsigned char *in;
85 {
86     unsigned long long result = 0;
87
88     result |= (unsigned long long)in[0];
89     result |= (unsigned long long)in[1] << 8;
90     result |= (unsigned long long)in[2] << 16;
91     result |= (unsigned long long)in[3] << 24;
92     result |= (unsigned long long)in[4] << 32;
93     result |= (unsigned long long)in[5] << 40;
94     
95     return result;
96 }
97
98 /* Write a 32-bit quantity out into memory in BIG ENDIAN order */
99 void write_be32(in, out)
100     unsigned long in;
101     unsigned char *out;
102 {
103     out[0] = (in >> 24) & 0xFF;
104     out[1] = (in >> 16) & 0xFF;
105     out[2] = (in >> 8) & 0xFF;
106     out[3] = in & 0xFF;
107 }
108
109 /* Read in a 32-bit BIG ENDIAN quantity */
110 unsigned long read_be32(in)
111     unsigned char *in;
112 {
113     unsigned long result = 0;
114
115     result |= (unsigned long)in[0] << 24;
116     result |= (unsigned long)in[1] << 16;
117     result |= (unsigned long)in[2] << 8;
118     result |= (unsigned long)in[3];
119     
120     return result;
121 }
122
123 /* Write a 32-bit quantity out into memory in LITTLE ENDIAN order */
124 void write_le32(in, out)
125     unsigned long in;
126     unsigned char *out;
127 {
128     out[0] = in & 0xFF;
129     out[1] = (in >> 8) & 0xFF;
130     out[2] = (in >> 16) & 0xFF;
131     out[3] = (in >> 24) & 0xFF;
132 }
133
134 /* Read in a 32-bit LITTLE ENDIAN quantity */
135 unsigned long read_le32(in)
136     unsigned char *in;
137 {
138     unsigned long result = 0;
139
140     result |= (unsigned long)in[0];
141     result |= (unsigned long)in[1] << 8;
142     result |= (unsigned long)in[2] << 16;
143     result |= (unsigned long)in[3] << 24;
144     
145     return result;
146 }
147
148 /* Write a 16-bit quantity out into memory in BIG ENDIAN order */
149 void write_be16(in, out)
150     unsigned short in;
151     unsigned char *out;
152 {
153     out[0] = (in >> 8) & 0xFF;
154     out[1] = in & 0xFF;
155 }
156     
157 /* Read in a 16-bit BIG ENDIAN quantity */
158 unsigned short read_be16(in)
159     unsigned char *in;
160 {
161     unsigned short result = 0;
162     
163     result |= (unsigned short)in[0] << 8;
164     result |= (unsigned short)in[1];
165     return result;
166 }
167
168 /* Write a 16-bit quantity out into memory in LITTLE ENDIAN order */
169 void write_le16(in, out)
170     unsigned short in;
171     unsigned char *out;
172 {
173     out[0] = in & 0xFF;
174     out[1] = in & 0xFF >> 8;
175 }
176     
177 /* Read in a 16-bit LITTLE ENDIAN quantity */
178 unsigned short read_le16(in)
179     unsigned char *in;
180 {
181     unsigned short result = 0;
182     
183     result |= (unsigned short)in[0];
184     result |= (unsigned short)in[1] << 8;
185     return result;
186 }
187