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