};
const struct var_expand_table
-auth_request_var_expand_static_tab[AUTH_REQUEST_VAR_TAB_COUNT+1] = {
+auth_request_var_expand_static_tab[] = {
{ 'u', NULL, "user" },
{ 'n', NULL, "username" },
{ 'd', NULL, "domain" },
/* be sure to update AUTH_REQUEST_VAR_TAB_COUNT */
{ '\0', NULL, NULL }
};
+static_assert_array_size(auth_request_var_expand_static_tab,
+ AUTH_REQUEST_VAR_TAB_COUNT+1);
static const char *
escape_none(const char *string,
#define IS_LWS(c) ((c) == ' ' || (c) == '\t')
static const char *qop_names[] = { "auth", "auth-int", "auth-conf" };
+static_assert_array_size(qop_names, QOP_COUNT);
static string_t *get_digest_challenge(struct digest_auth_request *request)
{
"dir", "alt-dir", "mailbox", "alt-mailbox",
"control", "index", "index-private", "index-cache", "list-index",
};
+static_assert_array_size(mailbox_list_path_type_names, MAILBOX_LIST_PATH_TYPE_COUNT);
static void doveadm_mailbox_arg_check(const char *arg)
{
#include "dsync-mailbox-export.h"
#include "dsync-brain-private.h"
-const char *dsync_box_state_names[DSYNC_BOX_STATE_DONE+1] = {
+const char *dsync_box_state_names[] = {
"mailbox",
"changes",
"attributes",
"recv_last_common",
"done"
};
+static_assert_array_size(dsync_box_state_names, DSYNC_BOX_STATE_DONE+1);
static bool dsync_brain_master_sync_recv_mailbox(struct dsync_brain *brain)
{
"finish",
"done"
};
+static_assert_array_size(dsync_state_names, DSYNC_STATE_DONE+1);
#define BRAIN_MASTER TRUE
#define BRAIN_SLAVE FALSE
const char *required_keys;
const char *optional_keys;
unsigned int min_minor_version;
-} items[ITEM_END_OF_LIST+1] = {
+} items[] = {
{ NULL, '\0', NULL, NULL, 0 },
{ .name = "done",
.chr = 'X',
{ "end_of_list", '\0', NULL, NULL, 0 }
};
+static_assert_array_size(items, ITEM_END_OF_LIST+1);
struct dsync_ibc_stream {
struct dsync_ibc ibc;
#include "imap-quote.h"
#include "imap-proxy.h"
-static const char *imap_proxy_sent_state_names[IMAP_PROXY_SENT_STATE_COUNT] = {
+static const char *imap_proxy_sent_state_names[] = {
"id", "starttls", "capability",
"authenticate", "auth-continue", "login"
};
-static const char *imap_proxy_rcvd_state_names[IMAP_PROXY_RCVD_STATE_COUNT] = {
+static_assert_array_size(imap_proxy_sent_state_names,
+ IMAP_PROXY_SENT_STATE_COUNT);
+
+static const char *imap_proxy_rcvd_state_names[] = {
"none", "banner", "id", "starttls", "capability",
"auth-continue", "login"
};
+static_assert_array_size(imap_proxy_rcvd_state_names,
+ IMAP_PROXY_RCVD_STATE_COUNT);
static void proxy_write_id(struct imap_client *client, string_t *str)
{
}
}
str_append_c(str, '/');
+
str_append(str, imap_proxy_rcvd_state_names[imap_client->proxy_rcvd_state]);
return str_c(str);
}
unsigned int imap_feature_condstore = UINT_MAX;
unsigned int imap_feature_qresync = UINT_MAX;
-static const char *client_command_state_names[CLIENT_COMMAND_STATE_DONE+1] = {
+static const char *client_command_state_names[] = {
"wait-input",
"wait-output",
"wait-external",
"wait-sync",
"done"
};
+static_assert_array_size(client_command_state_names,
+ CLIENT_COMMAND_STATE_DONE+1);
static void client_idle_timeout(struct client *client)
{
#define RANDOMFAIL_ERROR "Random failure injection"
-static const char *fs_op_names[FS_OP_COUNT] = {
+static const char *fs_op_names[] = {
"wait", "metadata", "prefetch", "read", "write", "lock", "exists",
"stat", "copy", "rename", "delete", "iter"
};
+static_assert_array_size(fs_op_names, FS_OP_COUNT);
struct randomfail_fs {
struct fs fs;
TEST_FIELD_YES_FORCED,
TEST_FIELD_COUNT,
};
-static const struct mail_cache_field decision_cache_fields[TEST_FIELD_COUNT] = {
+static const struct mail_cache_field decision_cache_fields[] = {
{
.name = "no",
.type = MAIL_CACHE_FIELD_STRING,
.decision = MAIL_CACHE_DECISION_YES | MAIL_CACHE_DECISION_FORCED,
},
};
+static_assert_array_size(decision_cache_fields, TEST_FIELD_COUNT);
static void test_mail_cache_fields(void)
{
CASSANDRA_COUNTER_COUNT
};
-static const char *counter_names[CASSANDRA_COUNTER_COUNT] = {
+static const char *counter_names[] = {
"sent",
"recv_ok",
"recv_err_no_hosts",
"recv_err_other",
"slow",
};
+static_assert_array_size(counter_names, CASSANDRA_COUNTER_COUNT);
enum cassandra_query_type {
CASSANDRA_QUERY_TYPE_READ,
CASSANDRA_QUERY_TYPE_COUNT
};
-static const char *cassandra_query_type_names[CASSANDRA_QUERY_TYPE_COUNT] = {
+static const char *cassandra_query_type_names[] = {
"read", "read-more", "write", "delete"
};
+static_assert_array_size(cassandra_query_type_names,
+ CASSANDRA_QUERY_TYPE_COUNT);
struct cassandra_callback {
unsigned int id;
#define BODY_SNIPPET_ALGO_V1 "1"
#define BODY_SNIPPET_MAX_CHARS 200
-static struct mail_cache_field global_cache_fields[MAIL_INDEX_CACHE_FIELD_COUNT] = {
+static struct mail_cache_field global_cache_fields[] = {
{ .name = "flags",
.type = MAIL_CACHE_FIELD_BITMASK,
.field_size = sizeof(uint32_t) },
index-status.c when adding more fields. those fields should probably
just be moved here to the same struct. */
};
+static_assert_array_size(global_cache_fields, MAIL_INDEX_CACHE_FIELD_COUNT);
static void index_mail_init_data(struct index_mail *mail);
static int index_mail_parse_body(struct index_mail *mail,
[LOG_TYPE_FATAL] = { EVENT_FILTER_LOG_TYPE_FATAL, "fatal" },
[LOG_TYPE_PANIC] = { EVENT_FILTER_LOG_TYPE_PANIC, "panic" },
};
+static_assert_array_size(event_filter_log_type_map, LOG_TYPE_COUNT);
struct event_filter_query_internal {
struct event_filter_node *expr;
#define LOG_TYPE_FLAG_PREFIX_LEN 0x40
#define LOG_TYPE_FLAG_DISABLE_LOG_PREFIX 0x80
-const char *failure_log_type_prefixes[LOG_TYPE_COUNT] = {
+const char *failure_log_type_prefixes[] = {
"Debug: ",
"Info: ",
"Warning: ",
"Fatal: ",
"Panic: "
};
+static_assert_array_size(failure_log_type_prefixes, LOG_TYPE_COUNT);
const char *failure_log_type_names[LOG_TYPE_COUNT] = {
"debug", "info", "warning", "error", "fatal", "panic"
static enum var_expand_if_op var_expand_if_str_to_comp(const char *op)
{
- const char *ops[OP_COUNT] = {
+ const char *ops[] = {
NULL,
"==",
"<",
"~",
"!~",
};
+ static_assert_array_size(ops, OP_COUNT);
for(enum var_expand_if_op i = 1; i < OP_COUNT; i++) {
i_assert(ops[i] != NULL);
if (strcmp(op, ops[i]) == 0)
bool autocreate_acls_checked:1;
};
-static const char *acl_storage_right_names[ACL_STORAGE_RIGHT_COUNT] = {
+static const char *acl_storage_right_names[] = {
MAIL_ACL_LOOKUP,
MAIL_ACL_READ,
MAIL_ACL_WRITE,
MAIL_ACL_DELETE,
MAIL_ACL_ADMIN
};
+static_assert_array_size(acl_storage_right_names, ACL_STORAGE_RIGHT_COUNT);
#define ACL_LIST_ITERATE_CONTEXT(obj) \
MODULE_CONTEXT_REQUIRE(obj, acl_mailbox_list_module)
#include "client.h"
#include "pop3-proxy.h"
-static const char *pop3_proxy_state_names[POP3_PROXY_STATE_COUNT] = {
+static const char *pop3_proxy_state_names[] = {
"banner", "starttls", "xclient", "login1", "login2"
};
+static_assert_array_size(pop3_proxy_state_names, POP3_PROXY_STATE_COUNT);
static int proxy_send_login(struct pop3_client *client, struct ostream *output)
{
#include <ctype.h>
-static const char *submission_proxy_state_names[SUBMISSION_PROXY_STATE_COUNT] = {
+static const char *submission_proxy_state_names[] = {
"banner", "ehlo", "starttls", "tls-ehlo", "xclient", "xclient-ehlo", "authenticate"
};
+static_assert_array_size(submission_proxy_state_names,
+ SUBMISSION_PROXY_STATE_COUNT);
static void
submission_proxy_success_reply_sent(