aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config.h.dist2
-rw-r--r--config.h.in2
-rw-r--r--file.c21
-rw-r--r--html.h1
4 files changed, 20 insertions, 6 deletions
diff --git a/config.h.dist b/config.h.dist
index 4f31fea..90c224a 100644
--- a/config.h.dist
+++ b/config.h.dist
@@ -281,11 +281,13 @@ typedef void MySignalHandler;
#define DEV_TTY_PATH "/dev/tty"
#define CGI_EXTENSION ".cgi"
#endif
+#define BROTLI_CMDNAME "brotli"
#define PATH_SEPARATOR ':'
#define GUNZIP_NAME "gunzip"
#define BUNZIP2_NAME "bunzip2"
#define INFLATE_NAME "inflate"
+#define BROTLI_NAME "brotli"
#endif /* makefile_parameter */
#endif /* _CONFIGURED_ */
diff --git a/config.h.in b/config.h.in
index 6bb0ee0..70e1aef 100644
--- a/config.h.in
+++ b/config.h.in
@@ -241,11 +241,13 @@ typedef RETSIGTYPE MySignalHandler;
#define DEV_TTY_PATH "/dev/tty"
#define CGI_EXTENSION ".cgi"
#endif
+#define BROTLI_CMDNAME "brotli"
#define PATH_SEPARATOR ':'
#define GUNZIP_NAME "gunzip"
#define BUNZIP2_NAME "bunzip2"
#define INFLATE_NAME "inflate"
+#define BROTLI_NAME "brotli"
#ifdef __MINGW32_VERSION
#define SIGKILL SIGTERM
diff --git a/file.c b/file.c
index 04d7c8f..79f140a 100644
--- a/file.c
+++ b/file.c
@@ -161,20 +161,24 @@ static struct compression_decoder {
char *name;
char *encoding;
char *encodings[4];
+ int use_d_arg;
} compression_decoders[] = {
{ CMP_COMPRESS, ".gz", "application/x-gzip",
0, GUNZIP_CMDNAME, GUNZIP_NAME, "gzip",
- {"gzip", "x-gzip", NULL} },
+ {"gzip", "x-gzip", NULL}, 0 },
{ CMP_COMPRESS, ".Z", "application/x-compress",
0, GUNZIP_CMDNAME, GUNZIP_NAME, "compress",
- {"compress", "x-compress", NULL} },
+ {"compress", "x-compress", NULL}, 0 },
{ CMP_BZIP2, ".bz2", "application/x-bzip",
0, BUNZIP2_CMDNAME, BUNZIP2_NAME, "bzip, bzip2",
- {"x-bzip", "bzip", "bzip2", NULL} },
+ {"x-bzip", "bzip", "bzip2", NULL}, 0 },
{ CMP_DEFLATE, ".deflate", "application/x-deflate",
1, INFLATE_CMDNAME, INFLATE_NAME, "deflate",
- {"deflate", "x-deflate", NULL} },
- { CMP_NOCOMPRESS, NULL, NULL, 0, NULL, NULL, NULL, {NULL}},
+ {"deflate", "x-deflate", NULL}, 0 },
+ { CMP_BROTLI, ".br", "application/x-br",
+ 0, BROTLI_CMDNAME, BROTLI_NAME, "br",
+ {"br", "x-br", NULL}, 1 },
+ { CMP_NOCOMPRESS, NULL, NULL, 0, NULL, NULL, NULL, {NULL}, 0},
};
/* *INDENT-ON* */
@@ -8642,6 +8646,7 @@ uncompress_stream(URLFile *uf, char **src)
char *tmpf = NULL;
char *ext = NULL;
struct compression_decoder *d;
+ int use_d_arg = 0;
if (IStype(uf->stream) != IST_ENCODED) {
uf->stream = newEncodedStream(uf->stream, uf->encoding);
@@ -8655,6 +8660,7 @@ uncompress_stream(URLFile *uf, char **src)
expand_cmd = d->cmd;
expand_name = d->name;
ext = d->ext;
+ use_d_arg = d->use_d_arg;
break;
}
}
@@ -8709,7 +8715,10 @@ uncompress_stream(URLFile *uf, char **src)
/* child1 */
dup2(1, 2); /* stderr>&stdout */
setup_child(TRUE, -1, -1);
- execlp(expand_cmd, expand_name, NULL);
+ if (use_d_arg)
+ execlp(expand_cmd, expand_name, "-d", NULL);
+ else
+ execlp(expand_cmd, expand_name, NULL);
exit(1);
}
if (tmpf) {
diff --git a/html.h b/html.h
index 38d03cd..a03df19 100644
--- a/html.h
+++ b/html.h
@@ -84,6 +84,7 @@ typedef struct {
#define CMP_GZIP 2
#define CMP_BZIP2 3
#define CMP_DEFLATE 4
+#define CMP_BROTLI 5
#define ENC_7BIT 0
#define ENC_BASE64 1