]>
Commit | Line | Data |
---|---|---|
a306f2dd | 1 | /* |
1d1ffb87 | 2 | * Copyright (c) 2000 Markus Friedl. All rights reserved. |
a306f2dd | 3 | */ |
a306f2dd | 4 | #include "includes.h" |
5 | #include "xmalloc.h" | |
6 | ||
a306f2dd | 7 | int |
1d1ffb87 | 8 | uuencode(unsigned char *src, unsigned int srclength, |
9 | char *target, size_t targsize) | |
a306f2dd | 10 | { |
1d1ffb87 | 11 | return __b64_ntop(src, srclength, target, targsize); |
a306f2dd | 12 | } |
13 | ||
14 | int | |
1d1ffb87 | 15 | uudecode(const char *src, unsigned char *target, size_t targsize) |
a306f2dd | 16 | { |
1d1ffb87 | 17 | int len; |
18 | char *encoded, *p; | |
a306f2dd | 19 | |
1d1ffb87 | 20 | /* copy the 'readonly' source */ |
21 | encoded = xstrdup(src); | |
22 | /* skip whitespace and data */ | |
23 | for (p = encoded; *p == ' ' || *p == '\t'; p++) | |
a306f2dd | 24 | ; |
1d1ffb87 | 25 | for (; *p != '\0' && *p != ' ' && *p != '\t'; p++) |
26 | ; | |
27 | /* and remote trailing whitespace because __b64_pton needs this */ | |
28 | *p = '\0'; | |
29 | len = __b64_pton(encoded, target, targsize); | |
30 | xfree(encoded); | |
31 | return len; | |
a306f2dd | 32 | } |
33 | ||
34 | void | |
35 | dump_base64(FILE *fp, unsigned char *data, int len) | |
36 | { | |
37 | unsigned char *buf = xmalloc(2*len); | |
38 | int i, n; | |
1d1ffb87 | 39 | n = uuencode(data, len, buf, 2*len); |
a306f2dd | 40 | for (i = 0; i < n; i++) { |
41 | fprintf(fp, "%c", buf[i]); | |
42 | if (i % 70 == 69) | |
43 | fprintf(fp, "\n"); | |
44 | } | |
45 | if (i % 70 != 69) | |
46 | fprintf(fp, "\n"); | |
47 | xfree(buf); | |
48 | } |