Skip to content

Commit fdf0a84

Browse files
addaleaxnodejs-github-bot
authored andcommitted
src: move all base64.h inline methods into -inl.h header file
Refs: #34944 (comment) PR-URL: #35432 Reviewed-By: Richard Lau <rlau@redhat.com> Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Gireesh Punathil <gpunathi@in.ibm.com> Reviewed-By: Rich Trott <rtrott@gmail.com>
1 parent a8556da commit fdf0a84

File tree

5 files changed

+92
-77
lines changed

5 files changed

+92
-77
lines changed

src/base64-inl.h

+85
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
55

6+
#include "base64.h"
67
#include "util.h"
78

89
namespace node {
@@ -91,6 +92,90 @@ size_t base64_decode_fast(char* const dst, const size_t dstlen,
9192
return k;
9293
}
9394

95+
96+
template <typename TypeName>
97+
size_t base64_decoded_size(const TypeName* src, size_t size) {
98+
// 1-byte input cannot be decoded
99+
if (size < 2)
100+
return 0;
101+
102+
if (src[size - 1] == '=') {
103+
size--;
104+
if (src[size - 1] == '=')
105+
size--;
106+
}
107+
return base64_decoded_size_fast(size);
108+
}
109+
110+
111+
template <typename TypeName>
112+
size_t base64_decode(char* const dst, const size_t dstlen,
113+
const TypeName* const src, const size_t srclen) {
114+
const size_t decoded_size = base64_decoded_size(src, srclen);
115+
return base64_decode_fast(dst, dstlen, src, srclen, decoded_size);
116+
}
117+
118+
119+
inline size_t base64_encode(const char* src,
120+
size_t slen,
121+
char* dst,
122+
size_t dlen) {
123+
// We know how much we'll write, just make sure that there's space.
124+
CHECK(dlen >= base64_encoded_size(slen) &&
125+
"not enough space provided for base64 encode");
126+
127+
dlen = base64_encoded_size(slen);
128+
129+
unsigned a;
130+
unsigned b;
131+
unsigned c;
132+
unsigned i;
133+
unsigned k;
134+
unsigned n;
135+
136+
static const char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
137+
"abcdefghijklmnopqrstuvwxyz"
138+
"0123456789+/";
139+
140+
i = 0;
141+
k = 0;
142+
n = slen / 3 * 3;
143+
144+
while (i < n) {
145+
a = src[i + 0] & 0xff;
146+
b = src[i + 1] & 0xff;
147+
c = src[i + 2] & 0xff;
148+
149+
dst[k + 0] = table[a >> 2];
150+
dst[k + 1] = table[((a & 3) << 4) | (b >> 4)];
151+
dst[k + 2] = table[((b & 0x0f) << 2) | (c >> 6)];
152+
dst[k + 3] = table[c & 0x3f];
153+
154+
i += 3;
155+
k += 4;
156+
}
157+
158+
switch (slen - n) {
159+
case 1:
160+
a = src[i + 0] & 0xff;
161+
dst[k + 0] = table[a >> 2];
162+
dst[k + 1] = table[(a & 3) << 4];
163+
dst[k + 2] = '=';
164+
dst[k + 3] = '=';
165+
break;
166+
case 2:
167+
a = src[i + 0] & 0xff;
168+
b = src[i + 1] & 0xff;
169+
dst[k + 0] = table[a >> 2];
170+
dst[k + 1] = table[((a & 3) << 4) | (b >> 4)];
171+
dst[k + 2] = table[(b & 0x0f) << 2];
172+
dst[k + 3] = '=';
173+
break;
174+
}
175+
176+
return dlen;
177+
}
178+
94179
} // namespace node
95180

96181
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS

src/base64.h

+4-74
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
55

66
#include "util.h"
7-
#include "base64-inl.h"
87

98
#include <cstddef>
109
#include <cstdint>
@@ -24,85 +23,16 @@ static inline constexpr size_t base64_decoded_size_fast(size_t size) {
2423
inline uint32_t ReadUint32BE(const unsigned char* p);
2524

2625
template <typename TypeName>
27-
size_t base64_decoded_size(const TypeName* src, size_t size) {
28-
// 1-byte input cannot be decoded
29-
if (size < 2)
30-
return 0;
31-
32-
if (src[size - 1] == '=') {
33-
size--;
34-
if (src[size - 1] == '=')
35-
size--;
36-
}
37-
return base64_decoded_size_fast(size);
38-
}
26+
size_t base64_decoded_size(const TypeName* src, size_t size);
3927

4028
template <typename TypeName>
4129
size_t base64_decode(char* const dst, const size_t dstlen,
42-
const TypeName* const src, const size_t srclen) {
43-
const size_t decoded_size = base64_decoded_size(src, srclen);
44-
return base64_decode_fast(dst, dstlen, src, srclen, decoded_size);
45-
}
30+
const TypeName* const src, const size_t srclen);
4631

47-
static size_t base64_encode(const char* src,
32+
inline size_t base64_encode(const char* src,
4833
size_t slen,
4934
char* dst,
50-
size_t dlen) {
51-
// We know how much we'll write, just make sure that there's space.
52-
CHECK(dlen >= base64_encoded_size(slen) &&
53-
"not enough space provided for base64 encode");
54-
55-
dlen = base64_encoded_size(slen);
56-
57-
unsigned a;
58-
unsigned b;
59-
unsigned c;
60-
unsigned i;
61-
unsigned k;
62-
unsigned n;
63-
64-
static const char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
65-
"abcdefghijklmnopqrstuvwxyz"
66-
"0123456789+/";
67-
68-
i = 0;
69-
k = 0;
70-
n = slen / 3 * 3;
71-
72-
while (i < n) {
73-
a = src[i + 0] & 0xff;
74-
b = src[i + 1] & 0xff;
75-
c = src[i + 2] & 0xff;
76-
77-
dst[k + 0] = table[a >> 2];
78-
dst[k + 1] = table[((a & 3) << 4) | (b >> 4)];
79-
dst[k + 2] = table[((b & 0x0f) << 2) | (c >> 6)];
80-
dst[k + 3] = table[c & 0x3f];
81-
82-
i += 3;
83-
k += 4;
84-
}
85-
86-
switch (slen - n) {
87-
case 1:
88-
a = src[i + 0] & 0xff;
89-
dst[k + 0] = table[a >> 2];
90-
dst[k + 1] = table[(a & 3) << 4];
91-
dst[k + 2] = '=';
92-
dst[k + 3] = '=';
93-
break;
94-
case 2:
95-
a = src[i + 0] & 0xff;
96-
b = src[i + 1] & 0xff;
97-
dst[k + 0] = table[a >> 2];
98-
dst[k + 1] = table[((a & 3) << 4) | (b >> 4)];
99-
dst[k + 2] = table[(b & 0x0f) << 2];
100-
dst[k + 3] = '=';
101-
break;
102-
}
103-
104-
return dlen;
105-
}
35+
size_t dlen);
10636
} // namespace node
10737

10838

src/inspector_socket.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#include "inspector_socket.h"
22
#include "llhttp.h"
33

4-
#include "base64.h"
4+
#include "base64-inl.h"
55
#include "util-inl.h"
66

77
#include "openssl/sha.h" // Sha-1 hash

src/string_bytes.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
#include "string_bytes.h"
2323

24-
#include "base64.h"
24+
#include "base64-inl.h"
2525
#include "env-inl.h"
2626
#include "node_buffer.h"
2727
#include "node_errors.h"

test/cctest/test_base64.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#include "base64.h"
1+
#include "base64-inl.h"
22

33
#include <cstddef>
44
#include <cstring>

0 commit comments

Comments
 (0)