From 8890e593e61e9644dad0b9203cb7df03056b058c Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Thu, 28 Aug 2014 00:45:12 +0900 Subject: [PATCH] src: Add util::array_size --- src/h2load.cc | 3 +-- src/h2load_http2_session.cc | 2 +- src/h2load_spdy_session.cc | 5 ++++- src/http2.cc | 12 +++++------- src/shrpx_http2_session.cc | 2 +- src/shrpx_http2_upstream.cc | 3 +-- src/shrpx_log.cc | 2 +- src/shrpx_spdy_upstream.cc | 3 +-- src/shrpx_ssl.cc | 2 +- src/shrpx_ssl_test.cc | 7 +++++-- src/util.h | 6 ++++++ 11 files changed, 27 insertions(+), 20 deletions(-) diff --git a/src/h2load.cc b/src/h2load.cc index f5573703..c11fcd4f 100644 --- a/src/h2load.cc +++ b/src/h2load.cc @@ -969,8 +969,7 @@ int main(int argc, char **argv) worker.stats.bytes_head += stats.bytes_head; worker.stats.bytes_body += stats.bytes_body; - for(size_t i = 0; i < sizeof(stats.status) / sizeof(stats.status[0]); - ++i) { + for(size_t i = 0; i < util::array_size(stats.status); ++i) { worker.stats.status[i] += stats.status[i]; } } diff --git a/src/h2load_http2_session.cc b/src/h2load_http2_session.cc index 9cca835f..641edf8c 100644 --- a/src/h2load_http2_session.cc +++ b/src/h2load_http2_session.cc @@ -130,7 +130,7 @@ void Http2Session::on_connect() iv[1].value = (1 << client_->worker->config->window_bits) - 1; rv = nghttp2_submit_settings(session_, NGHTTP2_FLAG_NONE, iv, - sizeof(iv) / sizeof(iv[0])); + util::array_size(iv)); assert(rv == 0); diff --git a/src/h2load_spdy_session.cc b/src/h2load_spdy_session.cc index d3dcbef9..86b5c82a 100644 --- a/src/h2load_spdy_session.cc +++ b/src/h2load_spdy_session.cc @@ -27,6 +27,9 @@ #include #include "h2load.h" +#include "util.h" + +using namespace nghttp2; namespace h2load { @@ -138,7 +141,7 @@ void SpdySession::on_connect() iv[0].flags = SPDYLAY_ID_FLAG_SETTINGS_NONE; iv[0].value = (1 << client_->worker->config->window_bits); spdylay_submit_settings(session_, SPDYLAY_FLAG_SETTINGS_NONE, iv, - sizeof(iv) / sizeof(iv[0])); + util::array_size(iv)); auto config = client_->worker->config; diff --git a/src/http2.cc b/src/http2.cc index b9af7855..7e2ced9a 100644 --- a/src/http2.cc +++ b/src/http2.cc @@ -160,7 +160,7 @@ const char *DISALLOWED_HD[] = { } // namespace namespace { -size_t DISALLOWED_HDLEN = sizeof(DISALLOWED_HD)/sizeof(DISALLOWED_HD[0]); +auto DISALLOWED_HDLEN = util::array_size(DISALLOWED_HD); } // namespace namespace { @@ -173,8 +173,7 @@ const char *REQUEST_PSEUDO_HD[] = { } // namespace namespace { -size_t REQUEST_PSEUDO_HDLEN = - sizeof(REQUEST_PSEUDO_HD) / sizeof(REQUEST_PSEUDO_HD[0]); +auto REQUEST_PSEUDO_HDLEN = util::array_size(REQUEST_PSEUDO_HD); } // namespace namespace { @@ -184,8 +183,7 @@ const char *RESPONSE_PSEUDO_HD[] = { } // namespace namespace { -size_t RESPONSE_PSEUDO_HDLEN = - sizeof(RESPONSE_PSEUDO_HD) / sizeof(RESPONSE_PSEUDO_HD[0]); +auto RESPONSE_PSEUDO_HDLEN = util::array_size(RESPONSE_PSEUDO_HD); } // namespace namespace { @@ -205,7 +203,7 @@ const char *IGN_HD[] = { } // namespace namespace { -size_t IGN_HDLEN = sizeof(IGN_HD)/sizeof(IGN_HD[0]); +auto IGN_HDLEN = util::array_size(IGN_HD); } // namespace namespace { @@ -224,7 +222,7 @@ const char *HTTP1_IGN_HD[] = { } // namespace namespace { -size_t HTTP1_IGN_HDLEN = sizeof(HTTP1_IGN_HD)/sizeof(HTTP1_IGN_HD[0]); +auto HTTP1_IGN_HDLEN = util::array_size(HTTP1_IGN_HD); } // namespace bool name_less(const Headers::value_type& lhs, diff --git a/src/shrpx_http2_session.cc b/src/shrpx_http2_session.cc index 5462ce12..2ed4346c 100644 --- a/src/shrpx_http2_session.cc +++ b/src/shrpx_http2_session.cc @@ -1425,7 +1425,7 @@ int Http2Session::on_connect() entry[2].value = (1 << get_config()->http2_downstream_window_bits) - 1; rv = nghttp2_submit_settings(session_, NGHTTP2_FLAG_NONE, entry, - sizeof(entry)/sizeof(nghttp2_settings_entry)); + util::array_size(entry)); if(rv != 0) { return -1; } diff --git a/src/shrpx_http2_upstream.cc b/src/shrpx_http2_upstream.cc index 62541efe..bf9b5319 100644 --- a/src/shrpx_http2_upstream.cc +++ b/src/shrpx_http2_upstream.cc @@ -682,8 +682,7 @@ Http2Upstream::Http2Upstream(ClientHandler *handler) entry[1].value = (1 << get_config()->http2_upstream_window_bits) - 1; rv = nghttp2_submit_settings(session_, NGHTTP2_FLAG_NONE, - entry, - sizeof(entry)/sizeof(nghttp2_settings_entry)); + entry, util::array_size(entry)); if(rv != 0) { ULOG(ERROR, this) << "nghttp2_submit_settings() returned error: " << nghttp2_strerror(rv); diff --git a/src/shrpx_log.cc b/src/shrpx_log.cc index 37f16962..3bf7a0fe 100644 --- a/src/shrpx_log.cc +++ b/src/shrpx_log.cc @@ -67,7 +67,7 @@ void Log::set_severity_level(int severity) int Log::set_severity_level_by_name(const char *name) { - for(size_t i = 0, max = sizeof(SEVERITY_STR)/sizeof(char*); i < max; ++i) { + for(size_t i = 0, max = util::array_size(SEVERITY_STR); i < max; ++i) { if(strcmp(SEVERITY_STR[i], name) == 0) { severity_thres_ = i; return 0; diff --git a/src/shrpx_spdy_upstream.cc b/src/shrpx_spdy_upstream.cc index bfe76278..f9926cee 100644 --- a/src/shrpx_spdy_upstream.cc +++ b/src/shrpx_spdy_upstream.cc @@ -480,8 +480,7 @@ SpdyUpstream::SpdyUpstream(uint16_t version, ClientHandler *handler) entry[1].flags = SPDYLAY_ID_FLAG_SETTINGS_NONE; rv = spdylay_submit_settings - (session_, SPDYLAY_FLAG_SETTINGS_NONE, - entry, sizeof(entry)/sizeof(spdylay_settings_entry)); + (session_, SPDYLAY_FLAG_SETTINGS_NONE, entry, util::array_size(entry)); assert(rv == 0); if(version >= SPDYLAY_PROTO_SPDY3_1 && diff --git a/src/shrpx_ssl.cc b/src/shrpx_ssl.cc index 2155aaf8..8ea81d9a 100644 --- a/src/shrpx_ssl.cc +++ b/src/shrpx_ssl.cc @@ -196,7 +196,7 @@ int alpn_select_proto_cb(SSL *ssl, namespace { const char *tls_names[] = { "TLSv1.2", "TLSv1.1", "TLSv1.0", "SSLv3" }; -const size_t tls_namelen = sizeof(tls_names)/sizeof(tls_names[0]); +const size_t tls_namelen = util::array_size(tls_names); const long int tls_masks[] = { SSL_OP_NO_TLSv1_2, SSL_OP_NO_TLSv1_1, SSL_OP_NO_TLSv1, SSL_OP_NO_SSLv3 }; } // namespace diff --git a/src/shrpx_ssl_test.cc b/src/shrpx_ssl_test.cc index e191d919..0a09fbb5 100644 --- a/src/shrpx_ssl_test.cc +++ b/src/shrpx_ssl_test.cc @@ -27,6 +27,9 @@ #include #include "shrpx_ssl.h" +#include "util.h" + +using namespace nghttp2; namespace shrpx { @@ -55,7 +58,7 @@ void test_shrpx_ssl_create_lookup_tree(void) "*.foo.bar", // oo.bar is suffix of *.foo.bar "oo.bar" }; - int num = sizeof(ctxs)/sizeof(ctxs[0]); + int num = util::array_size(ctxs); for(int i = 0; i < num; ++i) { ssl::cert_lookup_tree_add_cert(tree, ctxs[i], hostnames[i], strlen(hostnames[i])); @@ -100,7 +103,7 @@ void test_shrpx_ssl_create_lookup_tree(void) SSL_CTX_new(SSLv23_method()), SSL_CTX_new(SSLv23_method())}; const char *names[] = { "rab", "zab", "zzub", "ab" }; - num = sizeof(ctxs2)/sizeof(ctxs2[0]); + num = util::array_size(ctxs2); tree = ssl::cert_lookup_tree_new(); for(int i = 0; i < num; ++i) { ssl::cert_lookup_tree_add_cert(tree, ctxs2[i], names[i], strlen(names[i])); diff --git a/src/util.h b/src/util.h index 74b4d037..494bb6b2 100644 --- a/src/util.h +++ b/src/util.h @@ -45,6 +45,12 @@ namespace nghttp2 { namespace util { +template +constexpr size_t array_size(T (&)[N]) +{ + return N; +} + template class auto_delete { private: