Cleanup in elf.c with .bss section clean; adm command mounts cdrom instead of floppy...
[ZeXOS.git] / apps / zjab / utils.c
blob901862b35ed7c9a0b33e6ff802decf9616145c9c
1 /*
2 * ZeX/OS
3 * Copyright (C) 2009 Tomas 'ZeXx86' Jedrzejek (zexx86@zexos.org)
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
20 #include <stdio.h>
21 #include <stdlib.h>
22 #include <string.h>
24 static inline unsigned char to_uchar (char ch)
26 return ch;
29 static void base64_encode (const char *in, unsigned inlen, char *out, unsigned outlen)
31 static const char b64str[64] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
33 while (inlen && outlen) {
34 *out ++ = b64str[(to_uchar (in[0]) >> 2) & 0x3f];
36 if (!-- outlen)
37 break;
39 *out ++ = b64str[((to_uchar (in[0]) << 4) + (-- inlen ? to_uchar (in[1]) >> 4 : 0)) & 0x3f];
41 if (!-- outlen)
42 break;
44 *out ++ = (inlen ? b64str[((to_uchar (in[1]) << 2) + (-- inlen ? to_uchar (in[2]) >> 6 : 0)) & 0x3f] : '=');
46 if (!-- outlen)
47 break;
49 *out ++ = inlen ? b64str[to_uchar (in[2]) & 0x3f] : '=';
51 if (!-- outlen)
52 break;
54 if (inlen)
55 inlen --;
57 if (inlen)
58 in += 3;
61 if (outlen)
62 *out = '\0';
65 char *base64 (const char *input, int length)
67 char *buff = (char *) malloc (4 * length + 1);
69 if (!buff)
70 return 0;
72 base64_encode (input, length, buff, 4 * length + 1);
74 return buff;