perl -p -i -e 's,sizeof\(([^)]+)\)\s+/\s+sizeof\([^\[)]+\[0\]\),NUM_ELEMENTS($1),;s,sizeof\(([^)]+)\)\s+/\s+sizeof\(\*[^\[)]+\),NUM_ELEMENTS($1),' $(find src -name "*.c" -print)
Hmm... Perl...
* load it as a dictionary.
*/
if (ret == 0) {
- if (dict_end >= (dicts + (sizeof(dicts) / sizeof(*dicts)))) {
+ if (dict_end >= (dicts + (NUM_ELEMENTS(dicts)))) {
fr_strerror_printf("Reached maximum number of dictionaries");
goto error;
}
{
fr_pcap_t *in_p;
size_t i;
- size_t rs_codes_len = (sizeof(rs_useful_codes) / sizeof(*rs_useful_codes));
+ size_t rs_codes_len = (NUM_ELEMENTS(rs_useful_codes));
/*
* Clear and reset the screen
static void rs_stats_print_csv_header(rs_update_t *this)
{
fr_pcap_t *in_p;
- size_t rs_codes_len = (sizeof(rs_useful_codes) / sizeof(*rs_useful_codes));
+ size_t rs_codes_len = (NUM_ELEMENTS(rs_useful_codes));
size_t i;
int j;
char buffer[2048], *p = buffer, *end = buffer + sizeof(buffer);
fr_pcap_t *in_p;
size_t i;
- size_t rs_codes_len = (sizeof(rs_useful_codes) / sizeof(*rs_useful_codes));
+ size_t rs_codes_len = (NUM_ELEMENTS(rs_useful_codes));
p += snprintf(buffer, sizeof(buffer) - (p - buffer), "%i", stats->intervals);
if (p >= end) {
static void rs_stats_process(fr_event_list_t *el, fr_time_t now_t, void *ctx)
{
size_t i;
- size_t rs_codes_len = (sizeof(rs_useful_codes) / sizeof(*rs_useful_codes));
+ size_t rs_codes_len = (NUM_ELEMENTS(rs_useful_codes));
fr_pcap_t *in_p;
rs_update_t *this = ctx;
rs_stats_t *stats = this->stats;
/* Reset the pointer to the start of the circular buffer */
if (request->capture_p++ >=
(request->capture +
- sizeof(request->capture) / sizeof(*request->capture))) {
+ NUM_ELEMENTS(request->capture))) {
request->capture_p = request->capture;
}
} while (request->capture_p != start);
/* Reset the pointer to the start of the circular buffer */
if (++request->capture_p >=
(request->capture +
- sizeof(request->capture) / sizeof(*request->capture))) {
+ NUM_ELEMENTS(request->capture))) {
request->capture_p = request->capture;
}
return 0;
fr_strerror(); /* Clear out any non-fatal errors */
if (conf->list_attributes) {
- conf->list_da_num = rs_build_dict_list(conf->list_da, sizeof(conf->list_da) / sizeof(*conf->list_da),
+ conf->list_da_num = rs_build_dict_list(conf->list_da, NUM_ELEMENTS(conf->list_da),
conf->list_attributes);
if (conf->list_da_num < 0) {
usage(64);
}
if (conf->link_attributes) {
- conf->link_da_num = rs_build_dict_list(conf->link_da, sizeof(conf->link_da) / sizeof(*conf->link_da),
+ conf->link_da_num = rs_build_dict_list(conf->link_da, NUM_ELEMENTS(conf->link_da),
conf->link_attributes);
if (conf->link_da_num < 0) {
usage(64);
next = &conf->stats.tmpl;
- for (i = 0; i < (sizeof(rs_useful_codes) / sizeof(*rs_useful_codes)); i++) {
+ for (i = 0; i < (NUM_ELEMENTS(rs_useful_codes)); i++) {
tmpl = rs_stats_collectd_init_latency(conf, next, conf, "exchanged",
&(stats->exchange[rs_useful_codes[i]]),
rs_useful_codes[i]);
DEBUG2("said: %s", (char *)io_vector[2].iov_base);
DEBUG2("said: %s", (char *)io_vector[4].iov_base);
- if (writev(fd, io_vector, sizeof(io_vector) / sizeof(*io_vector)) < 0) {
+ if (writev(fd, io_vector, NUM_ELEMENTS(io_vector)) < 0) {
fr_strerror_printf("Failed writing varbind result: %s", fr_syserror(errno));
return -1;
}
DEBUG2("said: %s", buffer);
- if (writev(fd, io_vector, sizeof(io_vector) / sizeof(*io_vector)) < 0) {
+ if (writev(fd, io_vector, NUM_ELEMENTS(io_vector)) < 0) {
fr_strerror_printf("Failed writing set response: %s", fr_syserror(errno));
return -1;
}
LDAPControl *our_clientctrls[LDAP_MAX_CONTROLS];
fr_ldap_control_merge(our_serverctrls, our_clientctrls,
- sizeof(our_serverctrls) / sizeof(*our_serverctrls),
- sizeof(our_clientctrls) / sizeof(*our_clientctrls),
+ NUM_ELEMENTS(our_serverctrls),
+ NUM_ELEMENTS(our_clientctrls),
*pconn, serverctrls, clientctrls);
rad_assert(*pconn && (*pconn)->handle);
LDAPControl *our_clientctrls[LDAP_MAX_CONTROLS];
fr_ldap_control_merge(our_serverctrls, our_clientctrls,
- sizeof(our_serverctrls) / sizeof(*our_serverctrls),
- sizeof(our_clientctrls) / sizeof(*our_clientctrls),
+ NUM_ELEMENTS(our_serverctrls),
+ NUM_ELEMENTS(our_clientctrls),
*pconn, serverctrls, clientctrls);
rad_assert(*pconn && (*pconn)->handle);
LDAPControl *our_clientctrls[LDAP_MAX_CONTROLS];
fr_ldap_control_merge(our_serverctrls, our_clientctrls,
- sizeof(our_serverctrls) / sizeof(*our_serverctrls),
- sizeof(our_clientctrls) / sizeof(*our_clientctrls),
+ NUM_ELEMENTS(our_serverctrls),
+ NUM_ELEMENTS(our_clientctrls),
*pconn, serverctrls, clientctrls);
rad_assert(*pconn && (*pconn)->handle);
struct berval cred;
fr_ldap_control_merge(our_serverctrls, our_clientctrls,
- sizeof(our_serverctrls) / sizeof(*our_serverctrls),
- sizeof(our_clientctrls) / sizeof(*our_clientctrls),
+ NUM_ELEMENTS(our_serverctrls),
+ NUM_ELEMENTS(our_clientctrls),
c, bind_ctx->serverctrls, bind_ctx->clientctrls);
/*
LDAPControl *our_clientctrls[LDAP_MAX_CONTROLS];
fr_ldap_control_merge(our_serverctrls, our_clientctrls,
- sizeof(our_serverctrls) / sizeof(*our_serverctrls),
- sizeof(our_clientctrls) / sizeof(*our_clientctrls),
+ NUM_ELEMENTS(our_serverctrls),
+ NUM_ELEMENTS(our_clientctrls),
c, NULL, NULL);
DEBUG3("Closing libldap handle %p", c->handle);
*/
int fr_ldap_control_add_server(fr_ldap_connection_t *conn, LDAPControl *ctrl, bool freeit)
{
- if ((size_t)conn->serverctrls_cnt >= ((sizeof(conn->serverctrls) / sizeof(conn->serverctrls[0])) - 1)) {
+ if ((size_t)conn->serverctrls_cnt >= ((NUM_ELEMENTS(conn->serverctrls)) - 1)) {
return -1;
}
*/
int fr_ldap_control_add_client(fr_ldap_connection_t *conn, LDAPControl *ctrl, bool freeit)
{
- if ((size_t)conn->clientctrls_cnt >= ((sizeof(conn->clientctrls) / sizeof(conn->clientctrls[0])) - 1)) {
+ if ((size_t)conn->clientctrls_cnt >= ((NUM_ELEMENTS(conn->clientctrls)) - 1)) {
return -1;
}
LDAPControl *our_clientctrls[LDAP_MAX_CONTROLS];
fr_ldap_control_merge(our_serverctrls, our_clientctrls,
- sizeof(our_serverctrls) / sizeof(*our_serverctrls),
- sizeof(our_clientctrls) / sizeof(*our_clientctrls),
+ NUM_ELEMENTS(our_serverctrls),
+ NUM_ELEMENTS(our_clientctrls),
c, sasl_ctx->serverctrls, sasl_ctx->clientctrls);
DEBUG2("Starting SASL mech(s): %s", sasl_ctx->mechs);
LDAPControl *our_clientctrls[LDAP_MAX_CONTROLS];
fr_ldap_control_merge(our_serverctrls, our_clientctrls,
- sizeof(our_serverctrls) / sizeof(*our_serverctrls),
- sizeof(our_clientctrls) / sizeof(*our_clientctrls),
+ NUM_ELEMENTS(our_serverctrls),
+ NUM_ELEMENTS(our_clientctrls),
conn, serverctrls, clientctrls);
sasl_ctx.request = request;
LDAPControl *our_clientctrls[LDAP_MAX_CONTROLS];
fr_ldap_control_merge(our_serverctrls, our_clientctrls,
- sizeof(our_serverctrls) / sizeof(*our_serverctrls),
- sizeof(our_clientctrls) / sizeof(*our_clientctrls),
+ NUM_ELEMENTS(our_serverctrls),
+ NUM_ELEMENTS(our_clientctrls),
c, tls_ctx->serverctrls, tls_ctx->clientctrls);
/*
* and will remain locked in the child.
*/
for (vp = fr_cursor_init(&cursor, &input_pairs);
- vp && (envlen < ((sizeof(envp) / sizeof(*envp)) - 1));
+ vp && (envlen < ((NUM_ELEMENTS(envp)) - 1));
vp = fr_cursor_next(&cursor)) {
/*
* Hmm... maybe we shouldn't pass the
da = fr_dict_attr_child_by_num(fr_dict_root(fr_dict_internal), FR_EXEC_EXPORT);
if (da) {
for (vp = fr_cursor_iter_by_da_init(&cursor, &request->control, da);
- vp && (envlen < ((sizeof(envp) / sizeof(*envp)) - 1));
+ vp && (envlen < ((NUM_ELEMENTS(envp)) - 1));
vp = fr_cursor_next(&cursor)) {
DEBUG3("export %pV", &vp->data);
memcpy(&envp[envlen++], &vp->vp_strvalue, sizeof(*envp));
/* Check for bad versions */
v = (uint64_t) SSLeay();
- for (i = 0; i < (sizeof(libssl_defects) / sizeof(*libssl_defects)); i++) {
+ for (i = 0; i < (NUM_ELEMENTS(libssl_defects)); i++) {
libssl_defect_t *defect = &libssl_defects[i];
if ((v >= defect->low) && (v <= defect->high)) {
if (has_current_func &&
(!has_prev_func ||
(has_prev_func && (current_fflags != prev_fflags)))) {
- if ((size_t)(add_p - add) >= (sizeof(add) / sizeof(*add))) {
+ if ((size_t)(add_p - add) >= (NUM_ELEMENTS(add))) {
fr_strerror_printf("Out of memory to store kevent EV_ADD filters");
return -1;
}
CAP_NET_BIND_SERVICE
};
- if (cap_set_flag(caps, CAP_EFFECTIVE, sizeof(to_set) / sizeof(*to_set), to_set, CAP_SET) < 0) {
+ if (cap_set_flag(caps, CAP_EFFECTIVE, NUM_ELEMENTS(to_set), to_set, CAP_SET) < 0) {
fr_strerror_printf_push("Failed setting CAP_NET_BIND_SERVICE effective state: %s",
fr_syserror(errno));
goto skip_cap;
///< which cause a crash on exit if the logging buffer
///< has already been freed.
-#define HAVE_DEFINITION(_errno) ((_errno) < (int)(sizeof(fr_syserror_macro_names) / sizeof(*fr_syserror_macro_names)))
+#define HAVE_DEFINITION(_errno) ((_errno) < (int)(NUM_ELEMENTS(fr_syserror_macro_names)))
/*
* Explicitly cleanup the memory allocated to the error buffer,
* Copy specific fields from packet to reply, if they
* don't already exist
*/
- for (i = 0; i < sizeof(attrnums) / sizeof(attrnums[0]); i++) {
+ for (i = 0; i < NUM_ELEMENTS(attrnums); i++) {
uint32_t attr = attrnums[i];
if (fr_pair_find_by_num(request->reply->vps, DHCP_MAGIC_VENDOR, attr, TAG_ANY)) continue;
cf_data_add(ci, type_enum, NULL, false);
code = type_enum->value->vb_uint32;
- if (!code || (code >= (sizeof(type_lib_table) / sizeof(*type_lib_table)))) {
+ if (!code || (code >= (NUM_ELEMENTS(type_lib_table)))) {
cf_log_err(ci, "Unsupported 'type = %s'", type_str);
return -1;
}
* Instantiate the process modules
*/
if (fr_app_process_instantiate(inst->io.server_cs, inst->type_submodule, inst->type_submodule_by_code,
- sizeof(inst->type_submodule_by_code) / sizeof(inst->type_submodule_by_code[0]),
+ NUM_ELEMENTS(inst->type_submodule_by_code),
conf) < 0) {
return -1;
}
if (!type_enum) {
size_t i;
- for (i = 0; i < (sizeof(type_lib_table) / sizeof(*type_lib_table)); i++) {
+ for (i = 0; i < (NUM_ELEMENTS(type_lib_table)); i++) {
name = type_lib_table[i];
if (name && (strcmp(name, type_str) == 0)) {
type_enum = fr_dict_enum_by_value(attr_packet_type, fr_box_uint32(i));
* Instantiate the process modules
*/
if (fr_app_process_instantiate(inst->io.server_cs, inst->type_submodule, inst->type_submodule_by_code,
- sizeof(inst->type_submodule_by_code) / sizeof(inst->type_submodule_by_code[0]),
+ NUM_ELEMENTS(inst->type_submodule_by_code),
conf) < 0) {
return -1;
}
* Instantiate the process modules
*/
if (fr_app_process_instantiate(inst->io.server_cs, inst->type_submodule, inst->type_submodule_by_code,
- sizeof(inst->type_submodule_by_code) / sizeof(inst->type_submodule_by_code[0]),
+ NUM_ELEMENTS(inst->type_submodule_by_code),
conf) < 0) {
return -1;
}
}
reply_cnt = fr_redis_pipeline_result(&pipelined, &status,
- replies, sizeof(replies) / sizeof(*replies),
+ replies, NUM_ELEMENTS(replies),
conn);
reply = replies[0];
}
*/
if (*state->token == '}') break;
- rcode = match_keyword(info, state, commands, sizeof(commands) / sizeof(commands[0]));
+ rcode = match_keyword(info, state, commands, NUM_ELEMENTS(commands));
if (rcode < 0) return rcode;
if (rcode == 0) break;
* This will automatically re-fill the buffer,
* and find a matching token.
*/
- rcode = match_keyword(parent, &state, commands, sizeof(commands) / sizeof(commands[0]));
+ rcode = match_keyword(parent, &state, commands, NUM_ELEMENTS(commands));
if (rcode < 0) goto fail;
if (rcode == 0) break;
}
}
if (fr_ldap_xlat_filter(request,
- filters, sizeof(filters) / sizeof(*filters),
+ filters, NUM_ELEMENTS(filters),
filter, sizeof(filter)) < 0) {
return RLM_MODULE_INVALID;
}
RINDENT();
ret = fr_ldap_xlat_filter(request,
- filters, sizeof(filters) / sizeof(*filters),
+ filters, NUM_ELEMENTS(filters),
filter, sizeof(filter));
REXDENT();
snprintf(name_filter, sizeof(name_filter), "(%s=%s)", inst->groupobj_name_attr, check->vp_strvalue);
RINDENT();
ret = fr_ldap_xlat_filter(request,
- filters, sizeof(filters) / sizeof(*filters),
+ filters, NUM_ELEMENTS(filters),
filter, sizeof(filter));
REXDENT();
if (ret < 0) return RLM_MODULE_INVALID;
pipelined++;
}
reply_cnt = fr_redis_pipeline_result(&pipelined, &status,
- replies, sizeof(replies) / sizeof(*replies),
+ replies, NUM_ELEMENTS(replies),
conn);
if (status != REDIS_RCODE_NO_SCRIPT) continue;
}
reply_cnt = fr_redis_pipeline_result(&pipelined, &status,
- replies, sizeof(replies) / sizeof(*replies),
+ replies, NUM_ELEMENTS(replies),
conn);
if (status == REDIS_RCODE_SUCCESS) {
if (RDEBUG_ENABLED3) for (i = 0; i < reply_cnt; i++) {
int main(int argc, char *argv[])
{
static ippool_tool_operation_t ops[128];
- ippool_tool_operation_t *p = ops, *end = ops + (sizeof(ops) / sizeof(*ops));
+ ippool_tool_operation_t *p = ops, *end = ops + (NUM_ELEMENTS(ops));
int c;
curl_version_info_data *curlversion;
/* developer sanity */
- rad_assert((sizeof(http_body_type_supported) / sizeof(*http_body_type_supported)) == REST_HTTP_BODY_NUM_ENTRIES);
+ rad_assert((NUM_ELEMENTS(http_body_type_supported)) == REST_HTTP_BODY_NUM_ENTRIES);
ret = curl_global_init(CURL_GLOBAL_ALL);
if (ret != CURLE_OK) {
sql_log_entry_t log[20];
size_t num, i;
- num = (inst->driver->sql_error)(handle->log_ctx, log, (sizeof(log) / sizeof(*log)), handle, inst->config);
+ num = (inst->driver->sql_error)(handle->log_ctx, log, (NUM_ELEMENTS(log)), handle, inst->config);
if (num == 0) {
ROPTIONAL(RERROR, ERROR, "Unknown error");
return;
rlm_stats_data_t mydata, *stats;
fr_cursor_t cursor;
char buffer[64];
- uint64_t local_stats[sizeof(inst->stats) / sizeof(inst->stats[0])];
+ uint64_t local_stats[NUM_ELEMENTS(inst->stats)];
/*
* Increment counters only in "send foo" sections.
"DHCP-Lease-Query-Done"
};
-#define DHCP_MAX_MESSAGE_TYPE (sizeof(dhcp_message_types) / sizeof(dhcp_message_types[0]))
+#define DHCP_MAX_MESSAGE_TYPE (NUM_ELEMENTS(dhcp_message_types))
int dhcp_header_sizes[] = {
1, /* op */