mirror of
https://github.com/curl/curl.git
synced 2024-11-21 01:16:58 +08:00
95 lines
2.7 KiB
C
95 lines
2.7 KiB
C
|
/*****************************************************************************
|
||
|
* _ _ ____ _
|
||
|
* Project ___| | | | _ \| |
|
||
|
* / __| | | | |_) | |
|
||
|
* | (__| |_| | _ <| |___
|
||
|
* \___|\___/|_| \_\_____|
|
||
|
*
|
||
|
* The contents of this file are subject to the Mozilla Public License
|
||
|
* Version 1.0 (the "License"); you may not use this file except in
|
||
|
* compliance with the License. You may obtain a copy of the License at
|
||
|
* http://www.mozilla.org/MPL/
|
||
|
*
|
||
|
* Software distributed under the License is distributed on an "AS IS"
|
||
|
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
|
||
|
* License for the specific language governing rights and limitations
|
||
|
* under the License.
|
||
|
*
|
||
|
* The Original Code is Curl.
|
||
|
*
|
||
|
* The Initial Developer of the Original Code is Daniel Stenberg.
|
||
|
*
|
||
|
* Portions created by the Initial Developer are Copyright (C) 1998.
|
||
|
* All Rights Reserved.
|
||
|
*
|
||
|
* ------------------------------------------------------------
|
||
|
* Main author:
|
||
|
* - Daniel Stenberg <Daniel.Stenberg@haxx.nu>
|
||
|
*
|
||
|
* http://curl.haxx.nu
|
||
|
*
|
||
|
* $Source$
|
||
|
* $Revision$
|
||
|
* $Date$
|
||
|
* $Author$
|
||
|
* $State$
|
||
|
* $Locker$
|
||
|
*
|
||
|
* ------------------------------------------------------------
|
||
|
****************************************************************************/
|
||
|
|
||
|
#include <stdio.h>
|
||
|
|
||
|
/* ---- Base64 Encoding --- */
|
||
|
static char table64[]=
|
||
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
||
|
|
||
|
void base64Encode(char *intext, char *output)
|
||
|
{
|
||
|
unsigned char ibuf[3];
|
||
|
unsigned char obuf[4];
|
||
|
int i;
|
||
|
int inputparts;
|
||
|
|
||
|
while(*intext) {
|
||
|
for (i = inputparts = 0; i < 3; i++) {
|
||
|
if(*intext) {
|
||
|
inputparts++;
|
||
|
ibuf[i] = *intext;
|
||
|
intext++;
|
||
|
}
|
||
|
else
|
||
|
ibuf[i] = 0;
|
||
|
}
|
||
|
|
||
|
obuf [0] = (ibuf [0] & 0xFC) >> 2;
|
||
|
obuf [1] = ((ibuf [0] & 0x03) << 4) | ((ibuf [1] & 0xF0) >> 4);
|
||
|
obuf [2] = ((ibuf [1] & 0x0F) << 2) | ((ibuf [2] & 0xC0) >> 6);
|
||
|
obuf [3] = ibuf [2] & 0x3F;
|
||
|
|
||
|
switch(inputparts) {
|
||
|
case 1: /* only one byte read */
|
||
|
sprintf(output, "%c%c==",
|
||
|
table64[obuf[0]],
|
||
|
table64[obuf[1]]);
|
||
|
break;
|
||
|
case 2: /* two bytes read */
|
||
|
sprintf(output, "%c%c%c=",
|
||
|
table64[obuf[0]],
|
||
|
table64[obuf[1]],
|
||
|
table64[obuf[2]]);
|
||
|
break;
|
||
|
default:
|
||
|
sprintf(output, "%c%c%c%c",
|
||
|
table64[obuf[0]],
|
||
|
table64[obuf[1]],
|
||
|
table64[obuf[2]],
|
||
|
table64[obuf[3]] );
|
||
|
break;
|
||
|
}
|
||
|
output += 4;
|
||
|
}
|
||
|
*output=0;
|
||
|
}
|
||
|
/* ---- End of Base64 Encoding ---- */
|