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