nghttpx: Supply template version strcopy
This commit is contained in:
parent
7f7b6d641d
commit
0a6877d091
|
@ -59,8 +59,6 @@
|
||||||
#include "template.h"
|
#include "template.h"
|
||||||
#include "base64.h"
|
#include "base64.h"
|
||||||
|
|
||||||
using namespace nghttp2;
|
|
||||||
|
|
||||||
namespace shrpx {
|
namespace shrpx {
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
@ -227,21 +225,6 @@ std::string read_passwd_from_file(const char *filename) {
|
||||||
return line;
|
return line;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<char[]> strcopy(const char *val) {
|
|
||||||
return strcopy(val, strlen(val));
|
|
||||||
}
|
|
||||||
|
|
||||||
std::unique_ptr<char[]> strcopy(const char *val, size_t len) {
|
|
||||||
auto res = make_unique<char[]>(len + 1);
|
|
||||||
memcpy(res.get(), val, len);
|
|
||||||
res[len] = '\0';
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::unique_ptr<char[]> strcopy(const std::string &val) {
|
|
||||||
return strcopy(val.c_str(), val.size());
|
|
||||||
}
|
|
||||||
|
|
||||||
std::vector<char *> parse_config_str_list(const char *s, char delim) {
|
std::vector<char *> parse_config_str_list(const char *s, char delim) {
|
||||||
size_t len = 1;
|
size_t len = 1;
|
||||||
for (const char *first = s, *p = nullptr; (p = strchr(first, delim));
|
for (const char *first = s, *p = nullptr; (p = strchr(first, delim));
|
||||||
|
@ -394,7 +377,6 @@ std::vector<LogFragment> parse_log_format(const char *optarg) {
|
||||||
|
|
||||||
auto type = SHRPX_LOGF_NONE;
|
auto type = SHRPX_LOGF_NONE;
|
||||||
const char *value = nullptr;
|
const char *value = nullptr;
|
||||||
size_t valuelen = 0;
|
|
||||||
|
|
||||||
if (util::strieq_l("remote_addr", var_name, var_namelen)) {
|
if (util::strieq_l("remote_addr", var_name, var_namelen)) {
|
||||||
type = SHRPX_LOGF_REMOTE_ADDR;
|
type = SHRPX_LOGF_REMOTE_ADDR;
|
||||||
|
@ -411,7 +393,6 @@ std::vector<LogFragment> parse_log_format(const char *optarg) {
|
||||||
} else if (util::istartsWith(var_name, var_namelen, "http_")) {
|
} else if (util::istartsWith(var_name, var_namelen, "http_")) {
|
||||||
type = SHRPX_LOGF_HTTP;
|
type = SHRPX_LOGF_HTTP;
|
||||||
value = var_name + sizeof("http_") - 1;
|
value = var_name + sizeof("http_") - 1;
|
||||||
valuelen = var_namelen - (sizeof("http_") - 1);
|
|
||||||
} else if (util::strieq_l("remote_port", var_name, var_namelen)) {
|
} else if (util::strieq_l("remote_port", var_name, var_namelen)) {
|
||||||
type = SHRPX_LOGF_REMOTE_PORT;
|
type = SHRPX_LOGF_REMOTE_PORT;
|
||||||
} else if (util::strieq_l("server_port", var_name, var_namelen)) {
|
} else if (util::strieq_l("server_port", var_name, var_namelen)) {
|
||||||
|
@ -437,9 +418,8 @@ std::vector<LogFragment> parse_log_format(const char *optarg) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (literal_start < var_start) {
|
if (literal_start < var_start) {
|
||||||
res.push_back(
|
res.push_back(make_log_fragment(SHRPX_LOGF_LITERAL,
|
||||||
make_log_fragment(SHRPX_LOGF_LITERAL,
|
strcopy(literal_start, var_start)));
|
||||||
strcopy(literal_start, var_start - literal_start)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
literal_start = p;
|
literal_start = p;
|
||||||
|
@ -449,7 +429,8 @@ std::vector<LogFragment> parse_log_format(const char *optarg) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
res.push_back(make_log_fragment(type, strcopy(value, valuelen)));
|
res.push_back(
|
||||||
|
make_log_fragment(type, strcopy(value, var_name + var_namelen)));
|
||||||
auto &v = res.back().value;
|
auto &v = res.back().value;
|
||||||
for (size_t i = 0; v[i]; ++i) {
|
for (size_t i = 0; v[i]; ++i) {
|
||||||
if (v[i] == '_') {
|
if (v[i] == '_') {
|
||||||
|
@ -459,8 +440,8 @@ std::vector<LogFragment> parse_log_format(const char *optarg) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (literal_start != eop) {
|
if (literal_start != eop) {
|
||||||
res.push_back(make_log_fragment(
|
res.push_back(
|
||||||
SHRPX_LOGF_LITERAL, strcopy(literal_start, eop - literal_start)));
|
make_log_fragment(SHRPX_LOGF_LITERAL, strcopy(literal_start, eop)));
|
||||||
}
|
}
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
|
@ -537,7 +518,7 @@ int parse_config(const char *opt, const char *optarg,
|
||||||
DownstreamAddr addr;
|
DownstreamAddr addr;
|
||||||
if (util::istartsWith(optarg, SHRPX_UNIX_PATH_PREFIX)) {
|
if (util::istartsWith(optarg, SHRPX_UNIX_PATH_PREFIX)) {
|
||||||
auto path = optarg + str_size(SHRPX_UNIX_PATH_PREFIX);
|
auto path = optarg + str_size(SHRPX_UNIX_PATH_PREFIX);
|
||||||
addr.host = strcopy(path, pat_delim - path);
|
addr.host = strcopy(path, pat_delim);
|
||||||
addr.host_unix = true;
|
addr.host_unix = true;
|
||||||
} else {
|
} else {
|
||||||
if (split_host_port(host, sizeof(host), &port, optarg,
|
if (split_host_port(host, sizeof(host), &port, optarg,
|
||||||
|
|
|
@ -50,6 +50,10 @@
|
||||||
|
|
||||||
#include <nghttp2/nghttp2.h>
|
#include <nghttp2/nghttp2.h>
|
||||||
|
|
||||||
|
#include "template.h"
|
||||||
|
|
||||||
|
using namespace nghttp2;
|
||||||
|
|
||||||
namespace shrpx {
|
namespace shrpx {
|
||||||
|
|
||||||
struct LogFragment;
|
struct LogFragment;
|
||||||
|
@ -416,15 +420,23 @@ std::pair<std::string, std::string> parse_header(const char *optarg);
|
||||||
|
|
||||||
std::vector<LogFragment> parse_log_format(const char *optarg);
|
std::vector<LogFragment> parse_log_format(const char *optarg);
|
||||||
|
|
||||||
// Returns a copy of NULL-terminated string |val|.
|
// Returns a copy of NULL-terminated string [first, last).
|
||||||
std::unique_ptr<char[]> strcopy(const char *val);
|
template <typename InputIt>
|
||||||
|
std::unique_ptr<char[]> strcopy(InputIt first, InputIt last) {
|
||||||
|
auto res = make_unique<char[]>(last - first + 1);
|
||||||
|
*std::copy(first, last, res.get()) = '\0';
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
// Returns a copy of string |val| of length |n|. The returned string
|
// Returns a copy of NULL-terminated string |val|.
|
||||||
// will be NULL-terminated.
|
inline std::unique_ptr<char[]> strcopy(const char *val) {
|
||||||
std::unique_ptr<char[]> strcopy(const char *val, size_t n);
|
return strcopy(val, val + strlen(val));
|
||||||
|
}
|
||||||
|
|
||||||
// Returns a copy of val.c_str().
|
// Returns a copy of val.c_str().
|
||||||
std::unique_ptr<char[]> strcopy(const std::string &val);
|
inline std::unique_ptr<char[]> strcopy(const std::string &val) {
|
||||||
|
return strcopy(std::begin(val), std::end(val));
|
||||||
|
}
|
||||||
|
|
||||||
// Returns string for syslog |facility|.
|
// Returns string for syslog |facility|.
|
||||||
const char *str_syslog_facility(int facility);
|
const char *str_syslog_facility(int facility);
|
||||||
|
|
Loading…
Reference in New Issue