Dag-Erling Smørgrav 4ca1ab9434 Imported libfetch into the tree. It compiles, but there's still some
work to do. I especially need help with the man page.
1998-07-09 16:52:44 +00:00

91 lines
2.7 KiB
C

/*-
* Copyright 1997 Massachusetts Institute of Technology
*
* Permission to use, copy, modify, and distribute this software and
* its documentation for any purpose and without fee is hereby
* granted, provided that both the above copyright notice and this
* permission notice appear in all copies, that both the above
* copyright notice and this permission notice appear in all
* supporting documentation, and that the name of M.I.T. not be used
* in advertising or publicity pertaining to distribution of the
* software without specific, written prior permission. M.I.T. makes
* no representations about the suitability of this software for any
* purpose. It is provided "as is" without express or implied
* warranty.
*
* THIS SOFTWARE IS PROVIDED BY M.I.T. ``AS IS''. M.I.T. DISCLAIMS
* ALL EXPRESS OR IMPLIED WARRANTIES WITH REGARD TO THIS SOFTWARE,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT
* SHALL M.I.T. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: util.c,v 1.6 1998/02/20 05:08:53 jb Exp $
*/
#include <stdio.h>
/*
* Not much left of the original MIT code, but it's still derived from it
* so I'll keep their copyright. This is taken from util.c in MIT fetch.
*
* -- DES 1998/05/22
*/
/*
* Implement the `base64' encoding as described in RFC 1521.
*/
static const char base64[] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
int
fprint64(FILE *f, const unsigned char *buf)
{
int len = 0, l = 0;
unsigned int tmp;
while (buf[len])
len++;
while (len >= 3) {
tmp = buf[0] << 16 | buf[1] << 8 | buf[2];
fprintf(f, "%c%c%c%c",
base64[(tmp >> 18) & 077],
base64[(tmp >> 12) & 077],
base64[(tmp >> 6) & 077],
base64[tmp & 077]);
len -= 3;
buf += 3;
l += 4;
}
/* RFC 1521 enumerates these three possibilities... */
switch(len) {
case 2:
tmp = buf[0] << 16 | buf[1] << 8;
fprintf(f, "%c%c%c=",
base64[(tmp >> 18) & 077],
base64[(tmp >> 12) & 077],
base64[(tmp >> 6) & 077]);
l += 4;
break;
case 1:
tmp = buf[0] << 16;
fprintf(f, "%c%c==",
base64[(tmp >> 18) & 077],
base64[(tmp >> 12) & 077]);
l += 4;
break;
case 0:
break;
}
return l;
}