Skip to content

Commit 40e8b36

Browse files
nodejs-github-bottargos
authored andcommitted
deps: update base64 to 0.5.2
PR-URL: #51455 Reviewed-By: Michaël Zasso <[email protected]> Reviewed-By: Luigi Pinca <[email protected]> Reviewed-By: Yagiz Nizipli <[email protected]>
1 parent 4b583bf commit 40e8b36

File tree

8 files changed

+221
-45
lines changed

8 files changed

+221
-45
lines changed

‎deps/base64/base64/CMakeLists.txt‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ if (POLICY CMP0127)
1717
cmake_policy(SET CMP0127 NEW)
1818
endif()
1919

20-
project(base64 LANGUAGES C VERSION 0.5.1)
20+
project(base64 LANGUAGES C VERSION 0.5.2)
2121

2222
include(GNUInstallDirs)
2323
include(CMakeDependentOption)

‎deps/base64/base64/Makefile‎

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
CFLAGS += -std=c99 -O3 -Wall -Wextra -pedantic
1+
CFLAGS += -std=c99 -O3 -Wall -Wextra -pedantic -DBASE64_STATIC_DEFINE
22

33
# Set OBJCOPY if not defined by environment:
44
OBJCOPY ?= objcopy
@@ -56,6 +56,7 @@ ifdef OPENMP
5656
CFLAGS += -fopenmp
5757
endif
5858

59+
TARGET := $(shell$(CC) -dumpmachine)
5960

6061
.PHONY: all analyze clean
6162

@@ -64,9 +65,17 @@ all: bin/base64 lib/libbase64.o
6465
bin/base64: bin/base64.o lib/libbase64.o
6566
$(CC)$(CFLAGS) -o $@$^
6667

67-
lib/libbase64.o: $(OBJS)
68-
$(LD) -r -o $@$^
69-
$(OBJCOPY) --keep-global-symbols=lib/exports.txt $@
68+
# Workaround: mangle exported function names on MinGW32.
69+
lib/exports.build.txt: lib/exports.txt
70+
ifeq (i686-w64-mingw32, $(TARGET))
71+
sed -e 's/^/_/' $< > $@
72+
else
73+
cp -f $< $@
74+
endif
75+
76+
lib/libbase64.o: lib/exports.build.txt $(OBJS)
77+
$(LD) -r -o $@$(OBJS)
78+
$(OBJCOPY) --keep-global-symbols=$<$@
7079

7180
lib/config.h:
7281
@echo "#define HAVE_AVX512 $(HAVE_AVX512)">$@
@@ -97,4 +106,4 @@ analyze: clean
97106
scan-build --use-analyzer=`which clang` --status-bugs make
98107

99108
clean:
100-
rm -f bin/base64 bin/base64.o lib/libbase64.o lib/config.h $(OBJS)
109+
rm -f bin/base64 bin/base64.o lib/libbase64.o lib/config.h lib/exports.build.txt $(OBJS)

‎deps/base64/base64/bin/base64.c‎

Lines changed: 126 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,19 @@
1-
#define_XOPEN_SOURCE// IOV_MAX
1+
// Test for MinGW.
2+
#if defined(__MINGW32__) || defined(__MINGW64__)
3+
# defineMINGW
4+
#endif
5+
6+
// Decide if the writev(2) system call needs to be emulated as a series of
7+
// write(2) calls. At least MinGW does not support writev(2).
8+
#ifdefMINGW
9+
# defineEMULATE_WRITEV
10+
#endif
11+
12+
// Include the necessary system header when using the system's writev(2).
13+
#ifndefEMULATE_WRITEV
14+
# define_XOPEN_SOURCE// Unlock IOV_MAX
15+
# include<sys/uio.h>
16+
#endif
217

318
#include<stdbool.h>
419
#include<stdlib.h>
@@ -8,7 +23,7 @@
823
#include<getopt.h>
924
#include<errno.h>
1025
#include<limits.h>
11-
#include<sys/uio.h>
26+
1227
#include"../include/libbase64.h"
1328

1429
// Size of the buffer for the "raw" (not base64-encoded) data in bytes.
@@ -50,6 +65,59 @@ struct buffer{
5065
char*enc;
5166
};
5267

68+
// Optionally emulate writev(2) as a series of write calls.
69+
#ifdefEMULATE_WRITEV
70+
71+
// Quick and dirty definition of IOV_MAX as it is probably not defined.
72+
#ifndefIOV_MAX
73+
# defineIOV_MAX 1024
74+
#endif
75+
76+
// Quick and dirty definition of this system struct, for local use only.
77+
structiovec{
78+
79+
// Opaque data pointer.
80+
void*iov_base;
81+
82+
// Length of the data in bytes.
83+
size_tiov_len;
84+
};
85+
86+
staticssize_t
87+
writev (constintfd, conststructiovec*iov, intiovcnt)
88+
{
89+
ssize_tr, nwrite=0;
90+
91+
// Reset the error marker.
92+
errno=0;
93+
94+
while (iovcnt-->0){
95+
96+
// Write the vector; propagate errors back to the caller. Note
97+
// that this loses information about how much vectors have been
98+
// successfully written, but that also seems to be the case
99+
// with the real function. The API is somewhat flawed.
100+
if ((r=write(fd, iov->iov_base, iov->iov_len)) <0){
101+
returnr;
102+
}
103+
104+
// Update the total write count.
105+
nwrite+=r;
106+
107+
// Return early after a partial write; the caller should retry.
108+
if ((size_t) r!=iov->iov_len){
109+
break;
110+
}
111+
112+
// Move to the next vector.
113+
iov++;
114+
}
115+
116+
returnnwrite;
117+
}
118+
119+
#endif// EMULATE_WRITEV
120+
53121
staticbool
54122
buffer_alloc (conststructconfig*config, structbuffer*buf)
55123
{
@@ -272,29 +340,75 @@ encode (const struct config *config, struct buffer *buf)
272340
return true;
273341
}
274342

275-
staticint
343+
staticinlinesize_t
344+
find_newline (constchar*p, constsize_tavail)
345+
{
346+
// This is very naive and can probably be improved by vectorization.
347+
for (size_tlen=0; len<avail; len++){
348+
if (p[len] =='\n'){
349+
returnlen;
350+
}
351+
}
352+
353+
returnavail;
354+
}
355+
356+
staticbool
276357
decode (conststructconfig*config, structbuffer*buf)
277358
{
278-
size_tnread, nout;
359+
size_tavail;
279360
structbase64_statestate;
280361

281362
// Initialize the decoder's state structure.
282363
base64_stream_decode_init(&state, 0);
283364

284365
// Read encoded data into the buffer. Use the smallest buffer size to
285366
// be on the safe side: the decoded output will fit the raw buffer.
286-
while ((nread=fread(buf->enc, 1, BUFFER_RAW_SIZE, config->fp)) >0){
367+
while ((avail=fread(buf->enc, 1, BUFFER_RAW_SIZE, config->fp)) >0){
368+
char*start=buf->enc;
369+
char*outbuf=buf->raw;
370+
size_tototal=0;
371+
372+
// By popular demand, this utility tries to be bug-compatible
373+
// with GNU `base64'. That includes silently ignoring newlines
374+
// in the input. Tokenize the input on newline characters.
375+
while (avail>0){
376+
377+
// Find the offset of the next newline character, which
378+
// is also the length of the next chunk.
379+
size_toutlen, len=find_newline(start, avail);
380+
381+
// Ignore empty chunks.
382+
if (len==0){
383+
start++;
384+
avail--;
385+
continue;
386+
}
287387

288-
// Decode the input into the raw buffer.
289-
if (base64_stream_decode(&state, buf->enc, nread,
290-
buf->raw, &nout) ==0){
291-
fprintf(stderr, "%s: %s: decoding error\n",
292-
config->name, config->file);
293-
return false;
388+
// Decode the chunk into the raw buffer.
389+
if (base64_stream_decode(&state, start, len,
390+
outbuf, &outlen) ==0){
391+
fprintf(stderr, "%s: %s: decoding error\n",
392+
config->name, config->file);
393+
return false;
394+
}
395+
396+
// Update the output buffer pointer and total size.
397+
outbuf+=outlen;
398+
ototal+=outlen;
399+
400+
// Bail out if the whole string has been consumed.
401+
if (len==avail){
402+
break;
403+
}
404+
405+
// Move the start pointer past the newline.
406+
start+=len+1;
407+
avail-=len+1;
294408
}
295409

296410
// Append the raw data to the output stream.
297-
if (write_stdout(config, buf->raw, nout) == false){
411+
if (write_stdout(config, buf->raw, ototal) == false){
298412
return false;
299413
}
300414
}

‎deps/base64/base64/lib/env.h‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#ifndefBASE64_ENV_H
22
#defineBASE64_ENV_H
33

4+
#include<stdint.h>
5+
46
// This header file contains macro definitions that describe certain aspects of
57
// the compile-time environment. Compatibility and portability macros go here.
68

@@ -46,12 +48,10 @@
4648
#if defined (__x86_64__)
4749
// This also works for the x32 ABI, which has a 64-bit word size.
4850
# defineBASE64_WORDSIZE 64
49-
#elif defined (_INTEGRAL_MAX_BITS)
50-
# defineBASE64_WORDSIZE _INTEGRAL_MAX_BITS
51-
#elif defined (__WORDSIZE)
52-
# defineBASE64_WORDSIZE __WORDSIZE
53-
#elif defined (__SIZE_WIDTH__)
54-
# defineBASE64_WORDSIZE __SIZE_WIDTH__
51+
#elifSIZE_MAX==UINT32_MAX
52+
# defineBASE64_WORDSIZE 32
53+
#elifSIZE_MAX==UINT64_MAX
54+
# defineBASE64_WORDSIZE 64
5555
#else
5656
# error BASE64_WORDSIZE_NOT_DEFINED
5757
#endif

‎deps/base64/base64/test/CMakeLists.txt‎

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,10 @@ add_base64_test(test_base64
3232
test_base64.c
3333
)
3434

35-
if (NOTWIN32)
36-
add_base64_test(benchmark
37-
codec_supported.c
38-
benchmark.c
39-
)
40-
endif()
35+
add_base64_test(benchmark
36+
codec_supported.c
37+
benchmark.c
38+
)
4139

4240
if(CMAKE_SYSTEM_NAMESTREQUAL"Linux")
4341
target_link_libraries(benchmark PRIVATE rt)

‎deps/base64/base64/test/Makefile‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1-
CFLAGS += -std=c99 -O3 -Wall -Wextra -pedantic
1+
CFLAGS += -std=c99 -O3 -Wall -Wextra -pedantic -DBASE64_STATIC_DEFINE
22
ifdefOPENMP
33
CFLAGS += -fopenmp
44
endif
55

66
TARGET := $(shell$(CC) -dumpmachine)
77
ifneq (, $(findstring darwin, $(TARGET)))
88
BENCH_LDFLAGS=
9+
else ifneq (, $(findstring mingw, $(TARGET)))
10+
BENCH_LDFLAGS=
911
else
1012
# default to linux, -lrt needed
1113
BENCH_LDFLAGS=-lrt

0 commit comments

Comments
(0)