xref: /src/sys/compat/linuxkpi/common/include/linux/ascii85.h (revision 0eaa57625d0fbe9960eabbaaedd522acdf673648)
1*0eaa5762SJean-Sébastien Pédron /*
2*0eaa5762SJean-Sébastien Pédron  * SPDX-License-Identifier: BSD-2-Clause
3*0eaa5762SJean-Sébastien Pédron  *
4*0eaa5762SJean-Sébastien Pédron  * Copyright (c) 2026 The FreeBSD Foundation
5*0eaa5762SJean-Sébastien Pédron  */
6*0eaa5762SJean-Sébastien Pédron 
7*0eaa5762SJean-Sébastien Pédron #ifndef	_LINUXKPI_LINUX_ASCII85_H_
8*0eaa5762SJean-Sébastien Pédron #define	_LINUXKPI_LINUX_ASCII85_H_
9*0eaa5762SJean-Sébastien Pédron 
10*0eaa5762SJean-Sébastien Pédron #include <sys/param.h>
11*0eaa5762SJean-Sébastien Pédron 
12*0eaa5762SJean-Sébastien Pédron #define	ASCII85_BUFSZ 6
13*0eaa5762SJean-Sébastien Pédron 
14*0eaa5762SJean-Sébastien Pédron static inline long
ascii85_encode_len(long in_len)15*0eaa5762SJean-Sébastien Pédron ascii85_encode_len(long in_len)
16*0eaa5762SJean-Sébastien Pédron {
17*0eaa5762SJean-Sébastien Pédron 	long out_len;
18*0eaa5762SJean-Sébastien Pédron 
19*0eaa5762SJean-Sébastien Pédron 	out_len = howmany(in_len, 4);
20*0eaa5762SJean-Sébastien Pédron 
21*0eaa5762SJean-Sébastien Pédron 	return (out_len);
22*0eaa5762SJean-Sébastien Pédron }
23*0eaa5762SJean-Sébastien Pédron 
24*0eaa5762SJean-Sébastien Pédron static inline const char *
ascii85_encode(uint32_t in,char * out)25*0eaa5762SJean-Sébastien Pédron ascii85_encode(uint32_t in, char *out)
26*0eaa5762SJean-Sébastien Pédron {
27*0eaa5762SJean-Sébastien Pédron 	int i;
28*0eaa5762SJean-Sébastien Pédron 
29*0eaa5762SJean-Sébastien Pédron 	if (in == 0) {
30*0eaa5762SJean-Sébastien Pédron 		out[0] = 'z';
31*0eaa5762SJean-Sébastien Pédron 		out[1] = '\0';
32*0eaa5762SJean-Sébastien Pédron 		return (out);
33*0eaa5762SJean-Sébastien Pédron 	}
34*0eaa5762SJean-Sébastien Pédron 
35*0eaa5762SJean-Sébastien Pédron 	for (i = ASCII85_BUFSZ - 2; i >= 0; i--) {
36*0eaa5762SJean-Sébastien Pédron 		out[i] = in % 85;
37*0eaa5762SJean-Sébastien Pédron 		out[i] += 33;
38*0eaa5762SJean-Sébastien Pédron 
39*0eaa5762SJean-Sébastien Pédron 		in /= 85;
40*0eaa5762SJean-Sébastien Pédron 	}
41*0eaa5762SJean-Sébastien Pédron 	out[ASCII85_BUFSZ - 1] = '\0';
42*0eaa5762SJean-Sébastien Pédron 
43*0eaa5762SJean-Sébastien Pédron 	return (out);
44*0eaa5762SJean-Sébastien Pédron }
45*0eaa5762SJean-Sébastien Pédron 
46*0eaa5762SJean-Sébastien Pédron #endif /* _LINUXKPI_LINUX_ASCII85_H_ */
47