mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-04-16 08:42:28 +00:00
btstack_base64_decoder: use spaces
This commit is contained in:
parent
b49e5c7f18
commit
f5335e47a7
@ -68,7 +68,7 @@ static const uint8_t table[256] = {
|
|||||||
* @param context
|
* @param context
|
||||||
*/
|
*/
|
||||||
void btstack_base64_decoder_init(btstack_base64_decoder_t * context){
|
void btstack_base64_decoder_init(btstack_base64_decoder_t * context){
|
||||||
memset(context, 0, sizeof(btstack_base64_decoder_t));
|
memset(context, 0, sizeof(btstack_base64_decoder_t));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -78,70 +78,70 @@ void btstack_base64_decoder_init(btstack_base64_decoder_t * context){
|
|||||||
*/
|
*/
|
||||||
int btstack_base64_decoder_process_byte(btstack_base64_decoder_t * context, uint8_t c){
|
int btstack_base64_decoder_process_byte(btstack_base64_decoder_t * context, uint8_t c){
|
||||||
|
|
||||||
// handle '='
|
// handle '='
|
||||||
if (c == '='){
|
if (c == '='){
|
||||||
if (context->pos == 2 || context->pos == 3){
|
if (context->pos == 2 || context->pos == 3){
|
||||||
context->pos++;
|
context->pos++;
|
||||||
return BTSTACK_BASE64_DECODER_MORE;
|
return BTSTACK_BASE64_DECODER_MORE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// lookup
|
// lookup
|
||||||
uint8_t value = table[c];
|
uint8_t value = table[c];
|
||||||
|
|
||||||
// invalid character
|
// invalid character
|
||||||
if (value == 99) {
|
if (value == 99) {
|
||||||
context->pos = 99;
|
context->pos = 99;
|
||||||
}
|
}
|
||||||
|
|
||||||
int result = 0;
|
int result = 0;
|
||||||
switch (context->pos){
|
switch (context->pos){
|
||||||
case 0:
|
case 0:
|
||||||
context->value = value; // 6 bit
|
context->value = value; // 6 bit
|
||||||
context->pos++;
|
context->pos++;
|
||||||
result = BTSTACK_BASE64_DECODER_MORE;
|
result = BTSTACK_BASE64_DECODER_MORE;
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
result = (context->value << 2) | (value >> 4);
|
result = (context->value << 2) | (value >> 4);
|
||||||
context->value = value; // 4 bit
|
context->value = value; // 4 bit
|
||||||
context->pos++;
|
context->pos++;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
result = (context->value << 4) | (value >> 2);
|
result = (context->value << 4) | (value >> 2);
|
||||||
context->value = value; // 2 bit
|
context->value = value; // 2 bit
|
||||||
context->pos++;
|
context->pos++;
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
result = (context->value << 6) | value;
|
result = (context->value << 6) | value;
|
||||||
context->pos = 0; // done
|
context->pos = 0; // done
|
||||||
break;
|
break;
|
||||||
case 99:
|
case 99:
|
||||||
result = BTSTACK_BASE64_DECODER_INVALID;
|
result = BTSTACK_BASE64_DECODER_INVALID;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
int btstack_base64_decoder_process_block(const uint8_t * input_data, uint32_t input_size, uint8_t * output_buffer, uint32_t output_max_size){
|
int btstack_base64_decoder_process_block(const uint8_t * input_data, uint32_t input_size, uint8_t * output_buffer, uint32_t output_max_size){
|
||||||
btstack_base64_decoder_t context;
|
btstack_base64_decoder_t context;
|
||||||
btstack_base64_decoder_init(&context);
|
btstack_base64_decoder_init(&context);
|
||||||
uint32_t size = 0;
|
uint32_t size = 0;
|
||||||
while (input_size){
|
while (input_size){
|
||||||
uint8_t data = *input_data++;
|
uint8_t data = *input_data++;
|
||||||
int result = btstack_base64_decoder_process_byte(&context, data);
|
int result = btstack_base64_decoder_process_byte(&context, data);
|
||||||
input_size--;
|
input_size--;
|
||||||
switch (result){
|
switch (result){
|
||||||
case BTSTACK_BASE64_DECODER_MORE:
|
case BTSTACK_BASE64_DECODER_MORE:
|
||||||
break;
|
break;
|
||||||
case BTSTACK_BASE64_DECODER_INVALID:
|
case BTSTACK_BASE64_DECODER_INVALID:
|
||||||
return BTSTACK_BASE64_DECODER_INVALID;
|
return BTSTACK_BASE64_DECODER_INVALID;
|
||||||
default:
|
default:
|
||||||
if (size >= output_max_size){
|
if (size >= output_max_size){
|
||||||
return BTSTACK_BASE64_DECODER_FULL;
|
return BTSTACK_BASE64_DECODER_FULL;
|
||||||
}
|
}
|
||||||
output_buffer[size++] = result;
|
output_buffer[size++] = result;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
@ -45,8 +45,8 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint8_t pos;
|
uint8_t pos;
|
||||||
uint8_t value;
|
uint8_t value;
|
||||||
} btstack_base64_decoder_t;
|
} btstack_base64_decoder_t;
|
||||||
|
|
||||||
#define BTSTACK_BASE64_DECODER_MORE -1
|
#define BTSTACK_BASE64_DECODER_MORE -1
|
||||||
|
Loading…
x
Reference in New Issue
Block a user