Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(29)

Side by Side Diff: webrtc/base/base64.cc

Issue 2454293003: Moved rtc::Base64 to base approved. (Closed)
Patch Set: Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « webrtc/base/BUILD.gn ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 1
2 //********************************************************************* 2 //*********************************************************************
3 //* Base64 - a simple base64 encoder and decoder. 3 //* Base64 - a simple base64 encoder and decoder.
4 //* 4 //*
5 //* Copyright (c) 1999, Bob Withers - bwit@pobox.com 5 //* Copyright (c) 1999, Bob Withers - bwit@pobox.com
6 //* 6 //*
7 //* This code may be freely used for any purpose, either personal 7 //* This code may be freely used for any purpose, either personal
8 //* or commercial, provided the authors copyright notice remains 8 //* or commercial, provided the authors copyright notice remains
9 //* intact. 9 //* intact.
10 //* 10 //*
11 //* Enhancements by Stanley Yamane: 11 //* Enhancements by Stanley Yamane:
12 //* o reverse lookup table for the decode function 12 //* o reverse lookup table for the decode function
13 //* o reserve string buffer space in advance 13 //* o reserve string buffer space in advance
14 //* 14 //*
15 //********************************************************************* 15 //*********************************************************************
16 16
17 #include "webrtc/base/base64.h" 17 #include "webrtc/base/base64.h"
18 18
19 #include <string.h> 19 #include <string.h>
20 20
21 #include "webrtc/base/common.h" 21 #include "webrtc/base/checks.h"
22 22
23 using std::vector; 23 using std::vector;
24 24
25 namespace rtc { 25 namespace rtc {
26 26
27 static const char kPad = '='; 27 static const char kPad = '=';
28 static const unsigned char pd = 0xFD; // Padding 28 static const unsigned char pd = 0xFD; // Padding
29 static const unsigned char sp = 0xFE; // Whitespace 29 static const unsigned char sp = 0xFE; // Whitespace
30 static const unsigned char il = 0xFF; // Illegal base64 character 30 static const unsigned char il = 0xFF; // Illegal base64 character
31 31
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 bool Base64::IsBase64Encoded(const std::string& str) { 90 bool Base64::IsBase64Encoded(const std::string& str) {
91 for (size_t i = 0; i < str.size(); ++i) { 91 for (size_t i = 0; i < str.size(); ++i) {
92 if (!IsBase64Char(str.at(i))) 92 if (!IsBase64Char(str.at(i)))
93 return false; 93 return false;
94 } 94 }
95 return true; 95 return true;
96 } 96 }
97 97
98 void Base64::EncodeFromArray(const void* data, size_t len, 98 void Base64::EncodeFromArray(const void* data, size_t len,
99 std::string* result) { 99 std::string* result) {
100 ASSERT(NULL != result); 100 RTC_DCHECK(NULL != result);
101 result->clear(); 101 result->clear();
102 result->resize(((len + 2) / 3) * 4); 102 result->resize(((len + 2) / 3) * 4);
103 const unsigned char* byte_data = static_cast<const unsigned char*>(data); 103 const unsigned char* byte_data = static_cast<const unsigned char*>(data);
104 104
105 unsigned char c; 105 unsigned char c;
106 size_t i = 0; 106 size_t i = 0;
107 size_t dest_ix = 0; 107 size_t dest_ix = 0;
108 while (i < len) { 108 while (i < len) {
109 c = (byte_data[i] >> 2) & 0x3f; 109 c = (byte_data[i] >> 2) & 0x3f;
110 (*result)[dest_ix++] = Base64Table[c]; 110 (*result)[dest_ix++] = Base64Table[c];
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 vector<char>* result, size_t* data_used) { 199 vector<char>* result, size_t* data_used) {
200 return DecodeFromArrayTemplate<vector<char> >(data, len, flags, result, 200 return DecodeFromArrayTemplate<vector<char> >(data, len, flags, result,
201 data_used); 201 data_used);
202 } 202 }
203 203
204 template<typename T> 204 template<typename T>
205 bool Base64::DecodeFromArrayTemplate(const char* data, size_t len, 205 bool Base64::DecodeFromArrayTemplate(const char* data, size_t len,
206 DecodeFlags flags, T* result, 206 DecodeFlags flags, T* result,
207 size_t* data_used) 207 size_t* data_used)
208 { 208 {
209 ASSERT(NULL != result); 209 RTC_DCHECK(NULL != result);
210 ASSERT(flags <= (DO_PARSE_MASK | DO_PAD_MASK | DO_TERM_MASK)); 210 RTC_DCHECK(flags <= (DO_PARSE_MASK | DO_PAD_MASK | DO_TERM_MASK));
211 211
212 const DecodeFlags parse_flags = flags & DO_PARSE_MASK; 212 const DecodeFlags parse_flags = flags & DO_PARSE_MASK;
213 const DecodeFlags pad_flags = flags & DO_PAD_MASK; 213 const DecodeFlags pad_flags = flags & DO_PAD_MASK;
214 const DecodeFlags term_flags = flags & DO_TERM_MASK; 214 const DecodeFlags term_flags = flags & DO_TERM_MASK;
215 ASSERT(0 != parse_flags); 215 RTC_DCHECK(0 != parse_flags);
216 ASSERT(0 != pad_flags); 216 RTC_DCHECK(0 != pad_flags);
217 ASSERT(0 != term_flags); 217 RTC_DCHECK(0 != term_flags);
218 218
219 result->clear(); 219 result->clear();
220 result->reserve(len); 220 result->reserve(len);
221 221
222 size_t dpos = 0; 222 size_t dpos = 0;
223 bool success = true, padded; 223 bool success = true, padded;
224 unsigned char c, qbuf[4]; 224 unsigned char c, qbuf[4];
225 while (dpos < len) { 225 while (dpos < len) {
226 size_t qlen = GetNextQuantum(parse_flags, (DO_PAD_NO == pad_flags), 226 size_t qlen = GetNextQuantum(parse_flags, (DO_PAD_NO == pad_flags),
227 data, len, &dpos, qbuf, &padded); 227 data, len, &dpos, qbuf, &padded);
(...skipping 23 matching lines...) Expand all
251 if ((DO_TERM_BUFFER == term_flags) && (dpos != len)) { 251 if ((DO_TERM_BUFFER == term_flags) && (dpos != len)) {
252 success = false; // unused chars 252 success = false; // unused chars
253 } 253 }
254 if (data_used) { 254 if (data_used) {
255 *data_used = dpos; 255 *data_used = dpos;
256 } 256 }
257 return success; 257 return success;
258 } 258 }
259 259
260 } // namespace rtc 260 } // namespace rtc
OLDNEW
« no previous file with comments | « webrtc/base/BUILD.gn ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698