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édronascii85_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édronascii85_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