Mercurial > dovecot > core-2.2
changeset 14629:c93ca5e46a8a
Marked functions parameters that are allowed to be NULL. Some APIs were also changed.
The non-obvious APIs where NULL parameter was changed to "" are
master_service_init() and auth_master_user_list_init().
These checks can currently be enabled only on a patched clang:
http://llvm.org/bugs/show_bug.cgi?id=6786
line wrap: on
line diff
--- a/src/anvil/main.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/anvil/main.c Sun Jun 24 00:52:57 2012 +0300 @@ -29,7 +29,8 @@ anvil_connection_create(conn->fd, master, conn->fifo); } -static void log_fdpass_input(void *context ATTR_UNUSED) +static void ATTR_NULL(1) +log_fdpass_input(void *context ATTR_UNUSED) { int fd; char c; @@ -57,7 +58,7 @@ const char *error; master_service = master_service_init("anvil", service_flags, - &argc, &argv, NULL); + &argc, &argv, ""); if (master_getopt(master_service) > 0) return FATAL_DEFAULT; if (master_service_settings_read_simple(master_service,
--- a/src/auth/auth-master-connection.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/auth/auth-master-connection.c Sun Jun 24 00:52:57 2012 +0300 @@ -383,14 +383,14 @@ return FALSE; auth_request_log_info(auth_request, "passdb", "%s", error); pass_callback(PASSDB_RESULT_USER_UNKNOWN, - NULL, 0, auth_request); + &uchar_nul, 0, auth_request); } else if (conn->userdb_restricted_uid != 0) { /* no permissions to do this lookup */ auth_request_log_error(auth_request, "passdb", "Auth client doesn't have permissions to do " "a PASS lookup: %s", auth_restricted_reason(conn)); pass_callback(PASSDB_RESULT_INTERNAL_FAILURE, - NULL, 0, auth_request); + &uchar_nul, 0, auth_request); } else { auth_request_set_state(auth_request, AUTH_REQUEST_STATE_MECH_CONTINUE);
--- a/src/auth/auth-master-connection.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/auth/auth-master-connection.h Sun Jun 24 00:52:57 2012 +0300 @@ -28,7 +28,7 @@ struct auth_master_connection * auth_master_connection_create(struct auth *auth, int fd, const char *path, const struct stat *socket_st, - bool userdb_only); + bool userdb_only) ATTR_NULL(4); void auth_master_connection_destroy(struct auth_master_connection **conn); void auth_master_connection_ref(struct auth_master_connection *conn);
--- a/src/auth/auth-request-handler.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/auth/auth-request-handler.c Sun Jun 24 00:52:57 2012 +0300 @@ -37,7 +37,7 @@ static struct aqueue *auth_failures; static struct timeout *to_auth_failures; -static void auth_failure_timeout(void *context); +static void auth_failure_timeout(void *context) ATTR_NULL(1); #undef auth_request_handler_create struct auth_request_handler * @@ -762,7 +762,8 @@ i_assert(auth_request->state == AUTH_REQUEST_STATE_FINISHED); auth_request_handler_reply(auth_request, - AUTH_CLIENT_RESULT_FAILURE, NULL, 0); + AUTH_CLIENT_RESULT_FAILURE, + &uchar_nul, 0); auth_request_unref(&auth_request); } }
--- a/src/auth/auth-request.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/auth/auth-request.c Sun Jun 24 00:52:57 2012 +0300 @@ -141,8 +141,7 @@ auth_request_set_state(request, AUTH_REQUEST_STATE_FINISHED); auth_request_refresh_last_access(request); - auth_request_handler_reply(request, AUTH_CLIENT_RESULT_FAILURE, - NULL, 0); + auth_request_handler_reply(request, AUTH_CLIENT_RESULT_FAILURE, "", 0); } void auth_request_internal_failure(struct auth_request *request) @@ -325,7 +324,7 @@ i_assert(request->state == AUTH_REQUEST_STATE_MECH_CONTINUE); if (request->successful) { - auth_request_success(request, NULL, 0); + auth_request_success(request, "", 0); return; } @@ -790,7 +789,8 @@ auth_request_log_debug(request, "password", "passdb doesn't support credential lookups"); auth_request_lookup_credentials_callback( - PASSDB_RESULT_SCHEME_NOT_AVAILABLE, NULL, 0, request); + PASSDB_RESULT_SCHEME_NOT_AVAILABLE, + &uchar_nul, 0, request); } else if (passdb->blocking) { passdb_blocking_lookup_credentials(request); } else {
--- a/src/auth/auth-request.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/auth/auth-request.h Sun Jun 24 00:52:57 2012 +0300 @@ -175,13 +175,13 @@ void auth_request_set_field(struct auth_request *request, const char *name, const char *value, - const char *default_scheme); + const char *default_scheme) ATTR_NULL(4); void auth_request_set_field_keyvalue(struct auth_request *request, const char *field, - const char *default_scheme); + const char *default_scheme) ATTR_NULL(3); void auth_request_set_fields(struct auth_request *request, const char *const *fields, - const char *default_scheme); + const char *default_scheme) ATTR_NULL(3); void auth_request_init_userdb_reply(struct auth_request *request); void auth_request_set_userdb_field(struct auth_request *request, @@ -203,7 +203,8 @@ const struct var_expand_table * auth_request_get_var_expand_table(const struct auth_request *auth_request, - auth_request_escape_func_t *escape_func); + auth_request_escape_func_t *escape_func) + ATTR_NULL(2); const char *auth_request_str_escape(const char *string, const struct auth_request *request);
--- a/src/auth/auth-settings.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/auth/auth-settings.h Sun Jun 24 00:52:57 2012 +0300 @@ -67,6 +67,7 @@ struct auth_settings * auth_settings_read(const char *service, pool_t pool, - struct master_service_settings_output *output_r); + struct master_service_settings_output *output_r) + ATTR_NULL(1); #endif
--- a/src/auth/auth-stream.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/auth/auth-stream.h Sun Jun 24 00:52:57 2012 +0300 @@ -5,7 +5,7 @@ struct auth_stream_reply *auth_stream_reply_init(pool_t pool); void auth_stream_reply_add(struct auth_stream_reply *reply, - const char *key, const char *value); + const char *key, const char *value) ATTR_NULL(2, 3); void auth_stream_reply_reset(struct auth_stream_reply *reply); void auth_stream_reply_remove(struct auth_stream_reply *reply, const char *key);
--- a/src/auth/auth-worker-server.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/auth/auth-worker-server.c Sun Jun 24 00:52:57 2012 +0300 @@ -57,7 +57,7 @@ static void worker_input(struct auth_worker_connection *conn); static void auth_worker_destroy(struct auth_worker_connection **conn, - const char *reason, bool restart); + const char *reason, bool restart) ATTR_NULL(2); static void auth_worker_idle_timeout(struct auth_worker_connection *conn) {
--- a/src/auth/auth.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/auth/auth.c Sun Jun 24 00:52:57 2012 +0300 @@ -137,7 +137,7 @@ } } -static struct auth * +static struct auth * ATTR_NULL(2) auth_preinit(const struct auth_settings *set, const char *service, pool_t pool, const struct mechanisms_register *reg) { @@ -229,21 +229,28 @@ unsigned int i, count; a = array_get(&auths, &count); - if (name != NULL) { - for (i = 1; i < count; i++) { - if (strcmp(a[i]->service, name) == 0) - return a[i]; - } - /* not found. maybe we can instead find a !service */ - for (i = 1; i < count; i++) { - if (a[i]->service[0] == '!' && - strcmp(a[i]->service + 1, name) != 0) - return a[i]; - } + for (i = 1; i < count; i++) { + if (strcmp(a[i]->service, name) == 0) + return a[i]; + } + /* not found. maybe we can instead find a !service */ + for (i = 1; i < count; i++) { + if (a[i]->service[0] == '!' && + strcmp(a[i]->service + 1, name) != 0) + return a[i]; } return a[0]; } +struct auth *auth_default_service(void) +{ + struct auth *const *a; + unsigned int count; + + a = array_get(&auths, &count); + return a[0]; +} + void auths_preinit(const struct auth_settings *set, pool_t pool, const struct mechanisms_register *reg, const char *const *services)
--- a/src/auth/auth.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/auth/auth.h Sun Jun 24 00:52:57 2012 +0300 @@ -33,6 +33,7 @@ extern struct auth_penalty *auth_penalty; struct auth *auth_find_service(const char *name); +struct auth *auth_default_service(void); void auths_preinit(const struct auth_settings *set, pool_t pool, const struct mechanisms_register *reg,
--- a/src/auth/db-checkpassword.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/auth/db-checkpassword.h Sun Jun 24 00:52:57 2012 +0300 @@ -24,6 +24,6 @@ struct auth_request *request, const char *auth_password, db_checkpassword_callback_t *callback, - void (*request_callback)()); + void (*request_callback)()) ATTR_NULL(3); #endif
--- a/src/auth/db-ldap.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/auth/db-ldap.c Sun Jun 24 00:52:57 2012 +0300 @@ -753,7 +753,7 @@ net_set_nonblock(conn->fd, TRUE); } -static void +static void ATTR_NULL(1) db_ldap_set_opt(struct ldap_connection *conn, int opt, const void *value, const char *optname, const char *value_str) { @@ -766,7 +766,7 @@ } } -static void +static void ATTR_NULL(1) db_ldap_set_opt_str(struct ldap_connection *conn, int opt, const char *value, const char *optname) {
--- a/src/auth/db-ldap.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/auth/db-ldap.h Sun Jun 24 00:52:57 2012 +0300 @@ -167,7 +167,7 @@ void db_ldap_set_attrs(struct ldap_connection *conn, const char *attrlist, char ***attr_names_r, ARRAY_TYPE(ldap_field) *attr_map, - const char *skip_attr); + const char *skip_attr) ATTR_NULL(5); struct ldap_connection *db_ldap_init(const char *config_path, bool userdb); void db_ldap_unref(struct ldap_connection **conn);
--- a/src/auth/db-passwd-file.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/auth/db-passwd-file.c Sun Jun 24 00:52:57 2012 +0300 @@ -25,8 +25,9 @@ static struct db_passwd_file *passwd_files; -static void passwd_file_add(struct passwd_file *pw, const char *username, - const char *pass, const char *const *args) +static void ATTR_NULL(3) +passwd_file_add(struct passwd_file *pw, const char *username, + const char *pass, const char *const *args) { /* args = uid, gid, user info, home dir, shell, extra_fields */ struct passwd_user *pu;
--- a/src/auth/main.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/auth/main.c Sun Jun 24 00:52:57 2012 +0300 @@ -227,7 +227,7 @@ /* set proctitles before init()s, since they may set them to error */ auth_refresh_proctitle(); - auth_worker_refresh_proctitle(NULL); + auth_worker_refresh_proctitle(""); child_wait_init(); auth_worker_server_init(); @@ -297,7 +297,7 @@ } master_service_client_connection_accept(conn); - (void)auth_worker_client_create(auth_find_service(NULL), conn->fd); + (void)auth_worker_client_create(auth_default_service(), conn->fd); } static void client_connected(struct master_service_connection *conn) @@ -312,7 +312,7 @@ l->type = auth_socket_type_get(conn->name); l->path = i_strdup(conn->name); } - auth = auth_find_service(NULL); + auth = auth_default_service(); switch (l->type) { case AUTH_SOCKET_MASTER: (void)auth_master_connection_create(auth, conn->fd,
--- a/src/auth/mech-anonymous.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/auth/mech-anonymous.c Sun Jun 24 00:52:57 2012 +0300 @@ -20,7 +20,7 @@ request->user = p_strdup(request->pool, request->set->anonymous_username); - auth_request_success(request, NULL, 0); + auth_request_success(request, "", 0); } static struct auth_request *mech_anonymous_auth_new(void)
--- a/src/auth/mech-apop.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/auth/mech-apop.c Sun Jun 24 00:52:57 2012 +0300 @@ -54,7 +54,7 @@ switch (result) { case PASSDB_RESULT_OK: if (verify_credentials(request, credentials, size)) - auth_request_success(auth_request, NULL, 0); + auth_request_success(auth_request, "", 0); else auth_request_fail(auth_request); break;
--- a/src/auth/mech-cram-md5.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/auth/mech-cram-md5.c Sun Jun 24 00:52:57 2012 +0300 @@ -115,7 +115,7 @@ switch (result) { case PASSDB_RESULT_OK: if (verify_credentials(request, credentials, size)) - auth_request_success(auth_request, NULL, 0); + auth_request_success(auth_request, "", 0); else auth_request_fail(auth_request); break;
--- a/src/auth/mech-ntlm.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/auth/mech-ntlm.c Sun Jun 24 00:52:57 2012 +0300 @@ -68,7 +68,7 @@ switch (result) { case PASSDB_RESULT_OK: if (lm_verify_credentials(request, credentials, size)) - auth_request_success(auth_request, NULL, 0); + auth_request_success(auth_request, "", 0); else auth_request_fail(auth_request); break; @@ -151,7 +151,7 @@ case PASSDB_RESULT_OK: ret = ntlm_verify_credentials(request, credentials, size); if (ret > 0) { - auth_request_success(auth_request, NULL, 0); + auth_request_success(auth_request, "", 0); return; } if (ret < 0) {
--- a/src/auth/mech-otp-skey-common.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/auth/mech-otp-skey-common.c Sun Jun 24 00:52:57 2012 +0300 @@ -51,7 +51,7 @@ struct auth_request *auth_request) { if (success) - auth_request_success(auth_request, NULL, 0); + auth_request_success(auth_request, "", 0); else { auth_request_internal_failure(auth_request); otp_unlock(auth_request);
--- a/src/auth/mech-plain-common.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/auth/mech-plain-common.c Sun Jun 24 00:52:57 2012 +0300 @@ -8,7 +8,7 @@ { switch (result) { case PASSDB_RESULT_OK: - auth_request_success(request, NULL, 0); + auth_request_success(request, "", 0); break; case PASSDB_RESULT_INTERNAL_FAILURE: auth_request_internal_failure(request);
--- a/src/auth/mech-rpa.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/auth/mech-rpa.c Sun Jun 24 00:52:57 2012 +0300 @@ -524,7 +524,7 @@ "invalid token 5 or client rejects us"); auth_request_fail(auth_request); } else { - auth_request_success(auth_request, NULL, 0); + auth_request_success(auth_request, "", 0); } }
--- a/src/auth/mech-winbind.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/auth/mech-winbind.c Sun Jun 24 00:52:57 2012 +0300 @@ -264,7 +264,7 @@ auth_request_success(&request->auth_request, buf->data, buf->used); } else { - auth_request_success(&request->auth_request, NULL, 0); + auth_request_success(&request->auth_request, "", 0); } return HR_OK; } else if (strcmp(token[0], "BH") == 0) {
--- a/src/auth/mech.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/auth/mech.c Sun Jun 24 00:52:57 2012 +0300 @@ -50,7 +50,7 @@ const unsigned char *data, size_t data_size) { if (data == NULL) { - auth_request_handler_reply_continue(request, NULL, 0); + auth_request_handler_reply_continue(request, &uchar_nul, 0); } else { /* initial reply given, even if it was 0 bytes */ request->mech->auth_continue(request, data, data_size);
--- a/src/auth/password-scheme-otp.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/auth/password-scheme-otp.c Sun Jun 24 00:52:57 2012 +0300 @@ -12,13 +12,13 @@ #include "randgen.h" #include "otp.h" -int password_generate_otp(const char *pw, const char *data, +int password_generate_otp(const char *pw, const char *state_data, unsigned int algo, const char **result_r) { struct otp_state state; - if (data != NULL) { - if (otp_parse_dbentry(data, &state) != 0) + if (state_data != NULL) { + if (otp_parse_dbentry(state_data, &state) != 0) return -1; } else { /* Generate new OTP credentials from plaintext */
--- a/src/auth/password-scheme.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/auth/password-scheme.h Sun Jun 24 00:52:57 2012 +0300 @@ -76,8 +76,9 @@ /* INTERNAL: */ const char *password_generate_salt(size_t len); const char *password_generate_md5_crypt(const char *pw, const char *salt); -int password_generate_otp(const char *pw, const char *state, - unsigned int algo, const char **result_r); +int password_generate_otp(const char *pw, const char *state_data, + unsigned int algo, const char **result_r) + ATTR_NULL(2); void password_generate_rpa(const char *pw, unsigned char result[]); int crypt_verify(const char *plaintext, const char *user,
--- a/src/auth/userdb-passwd.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/auth/userdb-passwd.c Sun Jun 24 00:52:57 2012 +0300 @@ -185,7 +185,8 @@ _ctx->callback(NULL, _ctx->context); } -static void passwd_iterate_next_timeout(void *context ATTR_UNUSED) +static void ATTR_NULL(1) +passwd_iterate_next_timeout(void *context ATTR_UNUSED) { timeout_remove(&cur_userdb_iter_to); passwd_iterate_next(&cur_userdb_iter->ctx);
--- a/src/auth/userdb-static.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/auth/userdb-static.c Sun Jun 24 00:52:57 2012 +0300 @@ -97,7 +97,7 @@ } else { static_credentials_callback( PASSDB_RESULT_SCHEME_NOT_AVAILABLE, - NULL, 0, auth_request); + &uchar_nul, 0, auth_request); } } else { static_lookup_real(auth_request, callback);
--- a/src/auth/userdb.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/auth/userdb.h Sun Jun 24 00:52:57 2012 +0300 @@ -65,8 +65,10 @@ int (*iterate_deinit)(struct userdb_iterate_context *ctx); }; -uid_t userdb_parse_uid(struct auth_request *request, const char *str); -gid_t userdb_parse_gid(struct auth_request *request, const char *str); +uid_t userdb_parse_uid(struct auth_request *request, const char *str) + ATTR_NULL(1); +gid_t userdb_parse_gid(struct auth_request *request, const char *str) + ATTR_NULL(1); struct userdb_module * userdb_preinit(pool_t pool, const struct auth_userdb_settings *set);
--- a/src/config/config-parser-private.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/config/config-parser-private.h Sun Jun 24 00:52:57 2012 +0300 @@ -61,7 +61,7 @@ extern void (*hook_config_parser_begin)(struct config_parser_context *ctx); int config_apply_line(struct config_parser_context *ctx, const char *key, - const char *line, const char *section_name); + const char *line, const char *section_name) ATTR_NULL(4); void config_parser_apply_line(struct config_parser_context *ctx, enum config_line_type type, const char *key, const char *value);
--- a/src/config/config-request.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/config/config-request.h Sun Jun 24 00:52:57 2012 +0300 @@ -36,11 +36,12 @@ bool config_export_type(string_t *str, const void *value, const void *default_value, enum setting_type type, bool dump_default, - bool *dump_r); + bool *dump_r) ATTR_NULL(3); struct config_export_context * config_export_init(const char *module, enum config_dump_scope scope, enum config_dump_flags flags, - config_request_callback_t *callback, void *context); + config_request_callback_t *callback, void *context) + ATTR_NULL(5); void config_export_by_filter(struct config_export_context *ctx, const struct config_filter *filter); void config_export_parsers(struct config_export_context *ctx,
--- a/src/config/doveconf.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/config/doveconf.c Sun Jun 24 00:52:57 2012 +0300 @@ -163,7 +163,7 @@ return FALSE; } -static int +static int ATTR_NULL(4) config_dump_human_output(struct config_dump_human_context *ctx, struct ostream *output, unsigned int indent, const char *setting_name_filter) @@ -418,7 +418,7 @@ return ret; } -static int +static int ATTR_NULL(4) config_dump_human(const struct config_filter *filter, const char *module, enum config_dump_scope scope, const char *setting_name_filter) {
--- a/src/config/main.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/config/main.c Sun Jun 24 00:52:57 2012 +0300 @@ -18,7 +18,7 @@ { const char *path, *error; - master_service = master_service_init("config", 0, &argc, &argv, NULL); + master_service = master_service_init("config", 0, &argc, &argv, ""); if (master_getopt(master_service) > 0) return FATAL_DEFAULT; master_service_init_log(master_service, "config: ");
--- a/src/dict/main.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/dict/main.c Sun Jun 24 00:52:57 2012 +0300 @@ -85,7 +85,7 @@ }; const char *error; - master_service = master_service_init("dict", 0, &argc, &argv, NULL); + master_service = master_service_init("dict", 0, &argc, &argv, ""); if (master_getopt(master_service) > 0) return FATAL_DEFAULT;
--- a/src/director/director-connection.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/director/director-connection.c Sun Jun 24 00:52:57 2012 +0300 @@ -746,7 +746,7 @@ return TRUE; } -static bool +static bool ATTR_NULL(3) director_cmd_host_int(struct director_connection *conn, const char *const *args, struct director_host *dir_host) {
--- a/src/director/director-test.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/director/director-test.c Sun Jun 24 00:52:57 2012 +0300 @@ -508,7 +508,7 @@ net_set_nonblock(admin->fd, TRUE); } -static void +static void ATTR_NULL(1) director_connection_disconnect_timeout(void *context ATTR_UNUSED) { struct director_connection *conn; @@ -586,7 +586,7 @@ const char *admin_path; master_service = master_service_init("director-test", 0, - &argc, &argv, NULL); + &argc, &argv, ""); if (master_getopt(master_service) > 0) return FATAL_DEFAULT; admin_path = argv[optind];
--- a/src/director/director.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/director/director.h Sun Jun 24 00:52:57 2012 +0300 @@ -109,26 +109,27 @@ void director_update_host(struct director *dir, struct director_host *src, struct director_host *orig_src, - struct mail_host *host); + struct mail_host *host) ATTR_NULL(3); void director_remove_host(struct director *dir, struct director_host *src, struct director_host *orig_src, - struct mail_host *host); + struct mail_host *host) ATTR_NULL(2, 3); void director_flush_host(struct director *dir, struct director_host *src, struct director_host *orig_src, - struct mail_host *host); + struct mail_host *host) ATTR_NULL(3); void director_update_user(struct director *dir, struct director_host *src, struct user *user); void director_update_user_weak(struct director *dir, struct director_host *src, struct director_host *orig_src, - struct user *user); + struct user *user) ATTR_NULL(3); void director_move_user(struct director *dir, struct director_host *src, struct director_host *orig_src, - unsigned int username_hash, struct mail_host *host); + unsigned int username_hash, struct mail_host *host) + ATTR_NULL(3); void director_user_killed(struct director *dir, unsigned int username_hash); void director_user_killed_everywhere(struct director *dir, struct director_host *src, struct director_host *orig_src, - unsigned int username_hash); + unsigned int username_hash) ATTR_NULL(3); void director_user_weak(struct director *dir, struct user *user); void director_sync_freeze(struct director *dir);
--- a/src/dns/dns-client.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/dns/dns-client.c Sun Jun 24 00:52:57 2012 +0300 @@ -128,8 +128,7 @@ int main(int argc, char *argv[]) { - master_service = master_service_init("dns-client", 0, - &argc, &argv, NULL); + master_service = master_service_init("dns-client", 0, &argc, &argv, ""); if (master_getopt(master_service) > 0) return FATAL_DEFAULT;
--- a/src/doveadm/doveadm-director.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/doveadm/doveadm-director.c Sun Jun 24 00:52:57 2012 +0300 @@ -205,7 +205,7 @@ hash_table_insert(users, POINTER_CAST(user_hash), user); } -static void +static void ATTR_NULL(1) userdb_get_user_list(const char *auth_socket_path, pool_t pool, struct hash_table *users) { @@ -219,7 +219,7 @@ } conn = auth_master_init(auth_socket_path, 0); - ctx = auth_master_user_list_init(conn, NULL, NULL); + ctx = auth_master_user_list_init(conn, "", NULL); while ((username = auth_master_user_list_next(ctx)) != NULL) user_list_add(username, pool, users); if (auth_master_user_list_deinit(&ctx) < 0) {
--- a/src/doveadm/doveadm-log.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/doveadm/doveadm-log.c Sun Jun 24 00:52:57 2012 +0300 @@ -23,7 +23,8 @@ #define LOG_ERRORS_FNAME "log-errors" #define LOG_TIMESTAMP_FORMAT "%b %d %H:%M:%S" -static void cmd_log_test(int argc ATTR_UNUSED, char *argv[] ATTR_UNUSED) +static void ATTR_NULL(2) +cmd_log_test(int argc ATTR_UNUSED, char *argv[] ATTR_UNUSED) { struct failure_context ctx; unsigned int i;
--- a/src/doveadm/doveadm-mail-fetch.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/doveadm/doveadm-mail-fetch.c Sun Jun 24 00:52:57 2012 +0300 @@ -126,7 +126,7 @@ ret = -1; } i_stream_unref(&input); - doveadm_print_stream(NULL, 0); + doveadm_print_stream("", 0); return ret; } @@ -220,7 +220,7 @@ i_error("read() failed: %m"); ret = -1; } - doveadm_print_stream(NULL, 0); + doveadm_print_stream("", 0); return ret; } @@ -246,7 +246,7 @@ i_error("read() failed: %m"); ret = -1; } - doveadm_print_stream(NULL, 0); + doveadm_print_stream("", 0); return ret; } @@ -293,7 +293,7 @@ message_decoder_deinit(&decoder); (void)message_parser_deinit(&parser, &parts); - doveadm_print_stream(NULL, 0); + doveadm_print_stream("", 0); if (input->stream_errno != 0) { i_error("read() failed: %m"); return -1;
--- a/src/doveadm/doveadm-mail-iter.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/doveadm/doveadm-mail-iter.h Sun Jun 24 00:52:57 2012 +0300 @@ -10,7 +10,7 @@ enum mail_fetch_field wanted_fields, const char *const *wanted_headers, struct mailbox_transaction_context **trans_r, - struct doveadm_mail_iter **iter_r); + struct doveadm_mail_iter **iter_r) ATTR_NULL(5); int doveadm_mail_iter_deinit(struct doveadm_mail_iter **iter); int doveadm_mail_iter_deinit_sync(struct doveadm_mail_iter **iter); int doveadm_mail_iter_deinit_keep_box(struct doveadm_mail_iter **iter,
--- a/src/doveadm/doveadm-mail-mailbox-status.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/doveadm/doveadm-mail-mailbox-status.c Sun Jun 24 00:52:57 2012 +0300 @@ -79,9 +79,10 @@ } } -static void status_output(struct status_cmd_context *ctx, struct mailbox *box, - const struct mailbox_status *status, - const struct mailbox_metadata *metadata) +static void ATTR_NULL(2) +status_output(struct status_cmd_context *ctx, struct mailbox *box, + const struct mailbox_status *status, + const struct mailbox_metadata *metadata) { if (box != NULL) doveadm_print(mailbox_get_vname(box));
--- a/src/doveadm/dsync/doveadm-dsync.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/doveadm/dsync/doveadm-dsync.c Sun Jun 24 00:52:57 2012 +0300 @@ -257,10 +257,10 @@ "virtual mailbox hierarchy separator " "(specify separator for the default namespace)"); } - path1 = mailbox_list_get_path(user->namespaces->list, NULL, - MAILBOX_LIST_PATH_TYPE_MAILBOX); - path2 = mailbox_list_get_path(user2->namespaces->list, NULL, - MAILBOX_LIST_PATH_TYPE_MAILBOX); + path1 = mailbox_list_get_root_path(user->namespaces->list, + MAILBOX_LIST_PATH_TYPE_MAILBOX); + path2 = mailbox_list_get_root_path(user2->namespaces->list, + MAILBOX_LIST_PATH_TYPE_MAILBOX); if (path1 != NULL && path2 != NULL && strcmp(path1, path2) == 0) { i_fatal("Both source and destination mail_location " @@ -347,7 +347,7 @@ ctx->sync_type, DSYNC_BRAIN_FLAG_MAILS_HAVE_GUIDS | DSYNC_BRAIN_FLAG_SEND_REQUESTS, - NULL); + ""); if (!ctx->remote) cmd_dsync_run_local(ctx, user, brain, slave2);
--- a/src/doveadm/dsync/dsync-brain.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/doveadm/dsync/dsync-brain.c Sun Jun 24 00:52:57 2012 +0300 @@ -66,7 +66,7 @@ const char *error; i_assert(sync_type != DSYNC_BRAIN_SYNC_TYPE_UNKNOWN); - i_assert(sync_type != DSYNC_BRAIN_SYNC_TYPE_STATE || state != NULL); + i_assert(sync_type != DSYNC_BRAIN_SYNC_TYPE_STATE || *state != '\0'); brain = dsync_brain_common_init(user, slave); brain->sync_type = sync_type;
--- a/src/doveadm/dsync/dsync-mailbox-import.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/doveadm/dsync/dsync-mailbox-import.c Sun Jun 24 00:52:57 2012 +0300 @@ -367,8 +367,9 @@ return remote_saved; } -static bool dsync_mailbox_try_save(struct dsync_mailbox_importer *importer, - struct dsync_mail_change *save_change) +static bool ATTR_NULL(2) +dsync_mailbox_try_save(struct dsync_mailbox_importer *importer, + struct dsync_mail_change *save_change) { if (importer->cur_mail_saved) { if (!importer_next_mail(importer, 0) && save_change == NULL)
--- a/src/doveadm/dsync/dsync-slave-io.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/doveadm/dsync/dsync-slave-io.c Sun Jun 24 00:52:57 2012 +0300 @@ -275,7 +275,7 @@ slave->io = io_add(slave->fd_in, IO_READ, dsync_slave_io_input, slave); o_stream_set_flush_callback(slave->output, dsync_slave_io_output, slave); slave->to = timeout_add(DSYNC_SLAVE_IO_TIMEOUT_MSECS, - dsync_slave_io_timeout, NULL); + dsync_slave_io_timeout, slave); o_stream_cork(slave->output); o_stream_send_str(slave->output, DSYNC_HANDSHAKE_VERSION); @@ -362,7 +362,7 @@ return 1; } -static void ATTR_FORMAT(3, 4) +static void ATTR_FORMAT(3, 4) ATTR_NULL(2) dsync_slave_input_error(struct dsync_slave_io *slave, struct dsync_deserializer_decoder *decoder, const char *fmt, ...)
--- a/src/doveadm/main.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/doveadm/main.c Sun Jun 24 00:52:57 2012 +0300 @@ -70,7 +70,7 @@ }; const char *error; - master_service = master_service_init("doveadm", 0, &argc, &argv, NULL); + master_service = master_service_init("doveadm", 0, &argc, &argv, ""); if (master_getopt(master_service) > 0) return FATAL_DEFAULT;
--- a/src/imap-login/client.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/imap-login/client.c Sun Jun 24 00:52:57 2012 +0300 @@ -427,7 +427,7 @@ imap_client->skip_line = FALSE; } -static void +static void ATTR_NULL(3) client_send_reply_raw(struct client *client, const char *prefix, const char *resp_code, const char *text, bool tagged)
--- a/src/imap-login/client.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/imap-login/client.h Sun Jun 24 00:52:57 2012 +0300 @@ -40,6 +40,6 @@ void client_send_reply_code(struct client *client, enum imap_cmd_reply reply, const char *resp_code, - const char *text); + const char *text) ATTR_NULL(3); #endif
--- a/src/imap/cmd-append.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/imap/cmd-append.c Sun Jun 24 00:52:57 2012 +0300 @@ -352,7 +352,7 @@ { struct cmd_append_context *ctx = cmd->context; - i_stream_chain_append(ctx->catchain, NULL); + i_stream_chain_append_eof(ctx->catchain); i_stream_unref(&ctx->input); ctx->catenate = FALSE;
--- a/src/imap/cmd-expunge.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/imap/cmd-expunge.c Sun Jun 24 00:52:57 2012 +0300 @@ -19,8 +19,9 @@ return TRUE; } -static bool cmd_expunge_finish(struct client_command_context *cmd, - struct mail_search_args *search_args) +static bool ATTR_NULL(2) +cmd_expunge_finish(struct client_command_context *cmd, + struct mail_search_args *search_args) { struct client *client = cmd->client; int ret;
--- a/src/imap/imap-client.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/imap/imap-client.h Sun Jun 24 00:52:57 2012 +0300 @@ -170,7 +170,7 @@ struct mail_user *user, struct mail_storage_service_user *service_user, const struct imap_settings *set); -void client_destroy(struct client *client, const char *reason); +void client_destroy(struct client *client, const char *reason) ATTR_NULL(2); /* Disconnect client connection */ void client_disconnect(struct client *client, const char *reason);
--- a/src/imap/imap-commands-util.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/imap/imap-commands-util.h Sun Jun 24 00:52:57 2012 +0300 @@ -49,7 +49,8 @@ void client_send_mailbox_flags(struct client *client, bool selecting); /* Update client->keywords array. Use keywords=NULL when unselecting. */ void client_update_mailbox_flags(struct client *client, - const ARRAY_TYPE(keywords) *keywords); + const ARRAY_TYPE(keywords) *keywords) + ATTR_NULL(2); /* Convert keyword indexes to keyword names in selected mailbox. */ const char *const * client_get_keyword_names(struct client *client, ARRAY_TYPE(keywords) *dest,
--- a/src/imap/imap-expunge.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/imap/imap-expunge.h Sun Jun 24 00:52:57 2012 +0300 @@ -3,6 +3,7 @@ struct mail_search_arg; -int imap_expunge(struct mailbox *box, struct mail_search_arg *next_search_arg); +int imap_expunge(struct mailbox *box, struct mail_search_arg *next_search_arg) + ATTR_NULL(2); #endif
--- a/src/imap/imap-fetch-body.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/imap/imap-fetch-body.c Sun Jun 24 00:52:57 2012 +0300 @@ -295,8 +295,9 @@ return TRUE; } -static int fetch_rfc822_size(struct imap_fetch_context *ctx, struct mail *mail, - void *context ATTR_UNUSED) +static int ATTR_NULL(3) +fetch_rfc822_size(struct imap_fetch_context *ctx, struct mail *mail, + void *context ATTR_UNUSED) { uoff_t size; @@ -325,8 +326,9 @@ return 0; } -static int fetch_rfc822(struct imap_fetch_context *ctx, struct mail *mail, - void *context ATTR_UNUSED) +static int ATTR_NULL(3) +fetch_rfc822(struct imap_fetch_context *ctx, struct mail *mail, + void *context ATTR_UNUSED) { struct imap_msgpart *msgpart; const char *str; @@ -345,8 +347,9 @@ return ctx->cont_handler(ctx); } -static int fetch_rfc822_header(struct imap_fetch_context *ctx, - struct mail *mail, void *context ATTR_UNUSED) +static int ATTR_NULL(3) +fetch_rfc822_header(struct imap_fetch_context *ctx, + struct mail *mail, void *context ATTR_UNUSED) { struct imap_msgpart *msgpart; const char *str; @@ -366,8 +369,9 @@ return ctx->cont_handler(ctx); } -static int fetch_rfc822_text(struct imap_fetch_context *ctx, struct mail *mail, - void *context ATTR_UNUSED) +static int ATTR_NULL(3) +fetch_rfc822_text(struct imap_fetch_context *ctx, struct mail *mail, + void *context ATTR_UNUSED) { struct imap_msgpart *msgpart; const char *str;
--- a/src/imap/imap-fetch.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/imap/imap-fetch.h Sun Jun 24 00:52:57 2012 +0300 @@ -88,7 +88,8 @@ void imap_fetch_add_handler(struct imap_fetch_init_context *ctx, enum imap_fetch_handler_flags flags, const char *nil_reply, - imap_fetch_handler_t *handler, void *context); + imap_fetch_handler_t *handler, void *context) + ATTR_NULL(3, 5); #ifdef CONTEXT_TYPE_SAFETY # define imap_fetch_add_handler(ctx, flags, nil_reply, handler, context) \ ({(void)(1 ? 0 : handler((struct imap_fetch_context *)NULL, \
--- a/src/imap/imap-search.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/imap/imap-search.h Sun Jun 24 00:52:57 2012 +0300 @@ -50,6 +50,6 @@ bool imap_search_start(struct imap_search_context *ctx, struct mail_search_args *sargs, - const enum mail_sort_type *sort_program); + const enum mail_sort_type *sort_program) ATTR_NULL(3); #endif
--- a/src/imap/imap-sync.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/imap/imap-sync.c Sun Jun 24 00:52:57 2012 +0300 @@ -607,7 +607,7 @@ return TRUE; } -static bool +static bool ATTR_NULL(4, 5) cmd_sync_full(struct client_command_context *cmd, enum mailbox_sync_flags flags, enum imap_sync_flags imap_flags, const char *tagline, imap_sync_callback_t *callback)
--- a/src/indexer/indexer.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/indexer/indexer.c Sun Jun 24 00:52:57 2012 +0300 @@ -120,7 +120,7 @@ { const char *error; - master_service = master_service_init("indexer", 0, &argc, &argv, NULL); + master_service = master_service_init("indexer", 0, &argc, &argv, ""); if (master_getopt(master_service) > 0) return FATAL_DEFAULT;
--- a/src/indexer/master-connection.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/indexer/master-connection.c Sun Jun 24 00:52:57 2012 +0300 @@ -33,7 +33,7 @@ unsigned int version_received:1; }; -static void +static void ATTR_NULL(1, 2) indexer_worker_refresh_proctitle(const char *username, const char *mailbox, uint32_t seq1, uint32_t seq2) {
--- a/src/ipc/client.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/ipc/client.c Sun Jun 24 00:52:57 2012 +0300 @@ -83,8 +83,7 @@ if (strcmp(id, "*") == 0) { /* send to everyone */ if (group == NULL) { - client_cmd_input(IPC_CMD_STATUS_OK, - NULL, client); + client_cmd_input(IPC_CMD_STATUS_OK, "", client); } else { ret = ipc_group_cmd(group, data, client_cmd_input, client);
--- a/src/ipc/main.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/ipc/main.c Sun Jun 24 00:52:57 2012 +0300 @@ -38,7 +38,7 @@ const char *error; master_service = master_service_init("ipc", service_flags, - &argc, &argv, NULL); + &argc, &argv, ""); if (master_getopt(master_service) > 0) return FATAL_DEFAULT; if (master_service_settings_read_simple(master_service,
--- a/src/lib-auth/auth-client-request.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-auth/auth-client-request.c Sun Jun 24 00:52:57 2012 +0300 @@ -124,10 +124,11 @@ i_error("Error sending continue request to auth server: %m"); } -static void call_callback(struct auth_client_request *request, - enum auth_request_status status, - const char *data_base64, - const char *const *args) +static void ATTR_NULL(3, 4) +call_callback(struct auth_client_request *request, + enum auth_request_status status, + const char *data_base64, + const char *const *args) { auth_request_callback_t *callback = request->callback;
--- a/src/lib-auth/auth-client.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-auth/auth-client.h Sun Jun 24 00:52:57 2012 +0300 @@ -67,7 +67,7 @@ bool auth_client_is_disconnected(struct auth_client *client); void auth_client_set_connect_notify(struct auth_client *client, auth_connect_notify_callback_t *callback, - void *context); + void *context) ATTR_NULL(2, 3); const struct auth_mech_desc * auth_client_get_available_mechs(struct auth_client *client, unsigned int *mech_count); @@ -84,7 +84,8 @@ struct auth_client_request * auth_client_request_new(struct auth_client *client, const struct auth_request_info *request_info, - auth_request_callback_t *callback, void *context); + auth_request_callback_t *callback, void *context) + ATTR_NULL(4); /* Continue authentication. Call when reply->result == AUTH_CLIENT_REQUEST_CONTINUE */ void auth_client_request_continue(struct auth_client_request *request,
--- a/src/lib-auth/auth-master.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-auth/auth-master.c Sun Jun 24 00:52:57 2012 +0300 @@ -615,7 +615,7 @@ str = t_str_new(128); str_printfa(str, "LIST\t%u", auth_master_next_request_id(conn)); - if (user_mask != NULL && *user_mask != '\0') + if (*user_mask != '\0') str_printfa(str, "\tuser=%s", user_mask); if (info != NULL) auth_user_info_export(str, info);
--- a/src/lib-auth/auth-master.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-auth/auth-master.h Sun Jun 24 00:52:57 2012 +0300 @@ -50,7 +50,7 @@ struct auth_master_user_list_ctx * auth_master_user_list_init(struct auth_master_connection *conn, const char *user_mask, - const struct auth_user_info *info); + const struct auth_user_info *info) ATTR_NULL(3); const char *auth_master_user_list_next(struct auth_master_user_list_ctx *ctx); unsigned int auth_master_user_list_count(struct auth_master_user_list_ctx *ctx); /* Returns -1 if anything failed, 0 if ok */
--- a/src/lib-dict/dict.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-dict/dict.h Sun Jun 24 00:52:57 2012 +0300 @@ -67,7 +67,7 @@ result. */ void dict_transaction_commit_async(struct dict_transaction_context **ctx, dict_transaction_commit_callback_t *callback, - void *context); + void *context) ATTR_NULL(2, 3); /* Rollback all changes made in transaction. */ void dict_transaction_rollback(struct dict_transaction_context **ctx);
--- a/src/lib-dns/dns-lookup.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-dns/dns-lookup.h Sun Jun 24 00:52:57 2012 +0300 @@ -30,7 +30,7 @@ function. */ int dns_lookup(const char *host, const struct dns_lookup_settings *set, struct dns_lookup **lookup_r, - dns_lookup_callback_t *callback, void *context); + dns_lookup_callback_t *callback, void *context) ATTR_NULL(5); #define dns_lookup(host, set, callback, context, lookup_r) \ CONTEXT_CALLBACK2(dns_lookup, dns_lookup_callback_t, \ callback, const struct dns_lookup_result *, \
--- a/src/lib-imap-client/imapc-connection.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-imap-client/imapc-connection.h Sun Jun 24 00:52:57 2012 +0300 @@ -23,7 +23,7 @@ void imapc_connection_connect(struct imapc_connection *conn, imapc_command_callback_t *login_callback, - void *login_context); + void *login_context) ATTR_NULL(2, 3); void imapc_connection_disconnect(struct imapc_connection *conn); void imapc_connection_abort_commands(struct imapc_connection *conn, bool disconnected, bool keep_retriable); @@ -32,7 +32,8 @@ struct imapc_command * imapc_connection_cmd(struct imapc_connection *conn, - imapc_command_callback_t *callback, void *context); + imapc_command_callback_t *callback, void *context) + ATTR_NULL(3); void imapc_connection_unselect(struct imapc_client_mailbox *box);
--- a/src/lib-imap-storage/imap-msgpart.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-imap-storage/imap-msgpart.c Sun Jun 24 00:52:57 2012 +0300 @@ -312,6 +312,7 @@ const char *const *hdr_fields = msgpart->headers; unsigned int hdr_count = str_array_length(hdr_fields); struct istream *input; + bool has_nuls; if (msgpart->fetch_type == FETCH_HEADER_FIELDS) { input = i_stream_create_header_filter(mail_input, @@ -328,7 +329,7 @@ null_header_filter_callback, NULL); } - if (message_get_header_size(input, hdr_size_r, NULL) < 0) { + if (message_get_header_size(input, hdr_size_r, &has_nuls) < 0) { errno = input->stream_errno; mail_storage_set_critical(mail->box->storage, "read(%s) failed: %m", i_stream_get_name(mail_input));
--- a/src/lib-imap/imap-base-subject.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-imap/imap-base-subject.c Sun Jun 24 00:52:57 2012 +0300 @@ -65,8 +65,7 @@ size--; else if (size >= 5 && memcmp(data + size - 5, "(FWD)", 5) == 0) { - if (is_reply_or_forward_r != NULL) - *is_reply_or_forward_r = TRUE; + *is_reply_or_forward_r = TRUE; size -= 5; } else { break; @@ -150,8 +149,7 @@ data++; *start_pos += (size_t)(data - orig_data); - if (is_reply_or_forward_r != NULL) - *is_reply_or_forward_r = TRUE; + *is_reply_or_forward_r = TRUE; return TRUE; } @@ -187,8 +185,7 @@ if (data[size-2] != ']') return FALSE; - if (is_reply_or_forward_r != NULL) - *is_reply_or_forward_r = TRUE; + *is_reply_or_forward_r = TRUE; buffer_set_used_size(buf, size-2); buffer_append_c(buf, '\0'); @@ -204,8 +201,7 @@ size_t start_pos, subject_len; bool found; - if (is_reply_or_forward_r != NULL) - *is_reply_or_forward_r = FALSE; + *is_reply_or_forward_r = FALSE; subject_len = strlen(subject); buf = buffer_create_dynamic(pool, subject_len);
--- a/src/lib-imap/imap-parser.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-imap/imap-parser.c Sun Jun 24 00:52:57 2012 +0300 @@ -473,7 +473,7 @@ } else { /* we want to save only literal size, not the literal itself. */ parser->literal_size_return = TRUE; - imap_parser_save_arg(parser, NULL, 0); + imap_parser_save_arg(parser, &uchar_nul, 0); return FALSE; } }
--- a/src/lib-imap/imap-parser.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-imap/imap-parser.h Sun Jun 24 00:52:57 2012 +0300 @@ -38,7 +38,7 @@ 2 * max_line_size. */ struct imap_parser * imap_parser_create(struct istream *input, struct ostream *output, - size_t max_line_size); + size_t max_line_size) ATTR_NULL(2); void imap_parser_ref(struct imap_parser *parser); void imap_parser_unref(struct imap_parser **parser); @@ -47,7 +47,7 @@ /* Change parser's input and output streams */ void imap_parser_set_streams(struct imap_parser *parser, struct istream *input, - struct ostream *output); + struct ostream *output) ATTR_NULL(3); /* Return the last error in parser. fatal is set to TRUE if there's no way to continue parsing, currently only if too large non-sync literal size was
--- a/src/lib-imap/imap-url.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-imap/imap-url.c Sun Jun 24 00:52:57 2012 +0300 @@ -284,6 +284,7 @@ const char *p, *q, *data; buffer_t *uauth_token; time_t expire = (time_t)-1; + int tz; /* iurlauth = iurlauth-rump iua-verifier * enc-urlauth = 32*HEXDIG @@ -306,7 +307,7 @@ if ((p = strchr(urlext+8, ';')) != NULL) { if (!iso8601_date_parse((const unsigned char *)urlext+8, - p-urlext-8, &expire, NULL)) { + p-urlext-8, &expire, &tz)) { parser->error = "invalid date-time for `;EXPIRE='"; return -1; }
--- a/src/lib-imap/imap-util.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-imap/imap-util.h Sun Jun 24 00:52:57 2012 +0300 @@ -8,7 +8,7 @@ /* Write flags as a space separated string. */ void imap_write_flags(string_t *dest, enum mail_flags flags, - const char *const *keywords); + const char *const *keywords) ATTR_NULL(3); /* Parse system flag from a string, or return 0 if it's invalid. */ enum mail_flags imap_parse_system_flag(const char *str);
--- a/src/lib-index/mail-cache-lookup.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-index/mail-cache-lookup.c Sun Jun 24 00:52:57 2012 +0300 @@ -61,9 +61,10 @@ struct mail_index_map *map; const void *data; uint32_t offset; + bool expunged; mail_index_lookup_ext_full(view, seq, cache->ext_id, - &map, &data, NULL); + &map, &data, &expunged); if (data == NULL) { /* no cache offsets */ return 0;
--- a/src/lib-index/mail-cache-transaction.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-index/mail-cache-transaction.c Sun Jun 24 00:52:57 2012 +0300 @@ -594,8 +594,7 @@ *offset_r = ctx->reserved_space_offset; ctx->reserved_space_offset += size; ctx->reserved_space -= size; - if (available_space_r != NULL) - *available_space_r = size; + *available_space_r = size; i_assert((size & 3) == 0); if (size == max_size && commit) { @@ -829,11 +828,11 @@ const buffer_t *buffer) { struct mail_cache *cache = ctx->cache; - size_t size = buffer->used; + size_t max_size, size = buffer->used; uint32_t offset, hdr_offset; if (mail_cache_transaction_get_space(ctx, size, size, - &offset, NULL, TRUE) <= 0) + &offset, &max_size, TRUE) <= 0) return -1; if (mail_cache_write(cache, buffer->data, size, offset) < 0)
--- a/src/lib-index/mail-index-alloc-cache.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-index/mail-index-alloc-cache.c Sun Jun 24 00:52:57 2012 +0300 @@ -174,7 +174,8 @@ timeout_remove(&to_index); } -static void index_removal_timeout(void *context ATTR_UNUSED) +static void ATTR_NULL(1) +index_removal_timeout(void *context ATTR_UNUSED) { destroy_unrefed(FALSE); }
--- a/src/lib-index/mail-index-alloc-cache.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-index/mail-index-alloc-cache.h Sun Jun 24 00:52:57 2012 +0300 @@ -2,7 +2,7 @@ #define MAIL_INDEX_ALLOC_CACHE_H /* If using in-memory indexes, give index_dir=NULL. */ -struct mail_index * +struct mail_index * ATTR_NULL(1, 2) mail_index_alloc_cache_get(const char *mailbox_path, const char *index_dir, const char *prefix); void mail_index_alloc_cache_unref(struct mail_index **index);
--- a/src/lib-index/mail-index-map-hdr.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-index/mail-index-map-hdr.c Sun Jun 24 00:52:57 2012 +0300 @@ -10,7 +10,7 @@ const struct mail_index_ext_header *ext_hdr; unsigned int i, old_count, offset; const char *name, *error; - uint32_t ext_id, ext_offset; + uint32_t ext_id, ext_map_idx, ext_offset; /* extension headers always start from 64bit offsets, so if base header doesn't happen to be 64bit aligned we'll skip some bytes */ @@ -45,7 +45,7 @@ index->filepath, i, name, error); return -1; } - if (mail_index_map_lookup_ext(map, name, NULL)) { + if (mail_index_map_lookup_ext(map, name, &ext_map_idx)) { mail_index_set_error(index, "Corrupted index file %s: " "Duplicate header extension %s", index->filepath, name);
--- a/src/lib-index/mail-index-map.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-index/mail-index-map.c Sun Jun 24 00:52:57 2012 +0300 @@ -50,10 +50,7 @@ array_foreach(&map->extensions, ext) { if (strcmp(ext->name, name) == 0) { - if (idx_r != NULL) { - *idx_r = array_foreach_idx(&map->extensions, - ext); - } + *idx_r = array_foreach_idx(&map->extensions, ext); return TRUE; } } @@ -72,7 +69,7 @@ const struct mail_index_ext_header *ext_hdr) { struct mail_index_ext *ext; - uint32_t idx, empty_idx = (uint32_t)-1; + uint32_t idx, ext_map_idx, empty_idx = (uint32_t)-1; if (!array_is_created(&map->extensions)) { mail_index_map_init_extbufs(map, 5); @@ -80,7 +77,7 @@ } else { idx = array_count(&map->extensions); } - i_assert(!mail_index_map_lookup_ext(map, name, NULL)); + i_assert(!mail_index_map_lookup_ext(map, name, &ext_map_idx)); ext = array_append_space(&map->extensions); ext->name = p_strdup(map->extension_pool, name);
--- a/src/lib-index/mail-index-util.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-index/mail-index-util.h Sun Jun 24 00:52:57 2012 +0300 @@ -15,6 +15,6 @@ uint32_t seq, unsigned int *idx_r); bool mail_index_seq_array_add(ARRAY_TYPE(seq_array) *array, uint32_t seq, const void *record, size_t record_size, - void *old_record); + void *old_record) ATTR_NULL(5); #endif
--- a/src/lib-index/mail-index-view.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-index/mail-index-view.c Sun Jun 24 00:52:57 2012 +0300 @@ -275,16 +275,17 @@ { const unsigned int *keyword_idx_map; unsigned int i, j, keyword_count, index_idx; - uint32_t idx; - uint16_t record_size; + uint32_t idx, hdr_size; + uint16_t record_size, record_align; array_clear(keyword_idx); if (data == NULL) { /* no keywords at all in index */ return; } - (void)mail_index_ext_get_size(NULL, map->index->keywords_ext_id, - map, NULL, &record_size, NULL); + (void)mail_index_ext_get_size(map, map->index->keywords_ext_id, + &hdr_size, &record_size, + &record_align); /* keyword_idx_map[] contains file => index keyword mapping */ if (!array_is_created(&map->keyword_idx_map)) @@ -318,9 +319,10 @@ { struct mail_index_map *map; const void *data; + bool expunged; mail_index_lookup_ext_full(view, seq, view->index->keywords_ext_id, - &map, &data, NULL); + &map, &data, &expunged); mail_index_data_lookup_keywords(map, data, keyword_idx); } @@ -523,11 +525,6 @@ uint32_t ext_id, struct mail_index_map **map_r, const void **data_r, bool *expunged_r) { - bool expunged; - - if (expunged_r == NULL) - expunged_r = &expunged; - view->v.lookup_ext_full(view, seq, ext_id, map_r, data_r, expunged_r); } @@ -551,8 +548,7 @@ return view->v.ext_get_reset_id(view, map, ext_id, reset_id_r); } -void mail_index_ext_get_size(struct mail_index_view *view ATTR_UNUSED, - uint32_t ext_id, struct mail_index_map *map, +void mail_index_ext_get_size(struct mail_index_map *map, uint32_t ext_id, uint32_t *hdr_size_r, uint16_t *record_size_r, uint16_t *record_align_r) { @@ -563,22 +559,16 @@ if (!mail_index_map_get_ext_idx(map, ext_id, &idx)) { /* extension doesn't exist in this index file */ - if (hdr_size_r != NULL) - *hdr_size_r = 0; - if (record_size_r != NULL) - *record_size_r = 0; - if (record_align_r != NULL) - *record_align_r = 0; + *hdr_size_r = 0; + *record_size_r = 0; + *record_align_r = 0; return; } ext = array_idx(&map->extensions, idx); - if (hdr_size_r != NULL) - *hdr_size_r = ext->hdr_size; - if (record_size_r != NULL) - *record_size_r = ext->record_size; - if (record_align_r != NULL) - *record_align_r = ext->record_align; + *hdr_size_r = ext->hdr_size; + *record_size_r = ext->record_size; + *record_align_r = ext->record_align; } static struct mail_index_view_vfuncs view_vfuncs = {
--- a/src/lib-index/mail-index.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-index/mail-index.c Sun Jun 24 00:52:57 2012 +0300 @@ -251,13 +251,13 @@ bool mail_index_keyword_lookup(struct mail_index *index, const char *keyword, unsigned int *idx_r) { - void *value; + void *key, *value; /* keywords_hash keeps a name => index mapping of keywords. Keywords are never removed from it, so the index values are valid for the lifetime of the mail_index. */ if (hash_table_lookup_full(index->keywords_hash, keyword, - NULL, &value)) { + &key, &value)) { *idx_r = POINTER_CAST_TO(value, unsigned int); return TRUE; }
--- a/src/lib-index/mail-index.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-index/mail-index.h Sun Jun 24 00:52:57 2012 +0300 @@ -485,7 +485,7 @@ /* Create a keyword list structure. */ struct mail_keywords * mail_index_keywords_create(struct mail_index *index, - const char *const keywords[]); + const char *const keywords[]) ATTR_NULL(2); struct mail_keywords * mail_index_keywords_create_from_indexes(struct mail_index *index, const ARRAY_TYPE(keyword_indexes) @@ -573,8 +573,7 @@ const void **data_r, bool *expunged_r); /* Get current extension sizes. Returns 1 if ok, 0 if extension doesn't exist in view. Any of the _r parameters may be NULL. */ -void mail_index_ext_get_size(struct mail_index_view *view, - uint32_t ext_id, struct mail_index_map *map, +void mail_index_ext_get_size(struct mail_index_map *map, uint32_t ext_id, uint32_t *hdr_size_r, uint16_t *record_size_r, uint16_t *record_align_r); /* Update extension header field. */ @@ -585,7 +584,8 @@ was already updated in this transaction, it's set to contain the data it's now overwriting. */ void mail_index_update_ext(struct mail_index_transaction *t, uint32_t seq, - uint32_t ext_id, const void *data, void *old_data); + uint32_t ext_id, const void *data, void *old_data) + ATTR_NULL(5); /* Increase/decrease number in extension atomically. Returns the sum of the diffs for this seq. */ int mail_index_atomic_inc_ext(struct mail_index_transaction *t,
--- a/src/lib-lda/mail-deliver.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-lda/mail-deliver.h Sun Jun 24 00:52:57 2012 +0300 @@ -87,7 +87,7 @@ enum mail_error *error_r, const char **error_str_r); int mail_deliver_save(struct mail_deliver_context *ctx, const char *mailbox, enum mail_flags flags, const char *const *keywords, - struct mail_storage **storage_r); + struct mail_storage **storage_r) ATTR_NULL(4); void mail_deliver_deduplicate_guid_if_needed(struct mail_deliver_session *session, struct mail_save_context *save_ctx);
--- a/src/lib-lda/smtp-client.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-lda/smtp-client.h Sun Jun 24 00:52:57 2012 +0300 @@ -3,7 +3,7 @@ #include <stdio.h> -struct smtp_client * +struct smtp_client * ATTR_NULL(3) smtp_client_open(const struct lda_settings *set, const char *destination, const char *return_path, struct ostream **output_r); /* Returns sysexits-compatible return value */
--- a/src/lib-mail/istream-binary-converter.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-mail/istream-binary-converter.c Sun Jun 24 00:52:57 2012 +0300 @@ -219,7 +219,7 @@ if (block.part != bstream->convert_part && bstream->convert_part != NULL) { /* end of base64 encoded part */ - stream_encode_base64(bstream, NULL, 0); + stream_encode_base64(bstream, "", 0); } if (block.hdr != NULL) {
--- a/src/lib-mail/istream-dot.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-mail/istream-dot.c Sun Jun 24 00:52:57 2012 +0300 @@ -24,7 +24,7 @@ static int i_stream_dot_read_some(struct dot_istream *dstream) { struct istream_private *stream = &dstream->istream; - size_t size; + size_t size, avail; ssize_t ret; (void)i_stream_get_data(stream->parent, &size); @@ -44,7 +44,7 @@ i_assert(size != 0); } - if (!i_stream_get_buffer_space(stream, size, NULL)) + if (!i_stream_get_buffer_space(stream, size, &avail)) return -2; return 1; } @@ -109,11 +109,11 @@ /* @UNSAFE */ struct dot_istream *dstream = (struct dot_istream *)stream; const unsigned char *data; - size_t i, dest, size; + size_t i, dest, size, avail; ssize_t ret, ret1; if (dstream->pending[0] != '\0') { - if (!i_stream_get_buffer_space(stream, 1, NULL)) + if (!i_stream_get_buffer_space(stream, 1, &avail)) return -2; dest = stream->pos; (void)flush_pending(dstream, &dest);
--- a/src/lib-mail/istream-header-filter.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-mail/istream-header-filter.h Sun Jun 24 00:52:57 2012 +0300 @@ -30,7 +30,8 @@ enum header_filter_flags flags, const char *const *headers, unsigned int headers_count, - header_filter_callback *callback, void *context); + header_filter_callback *callback, void *context) + ATTR_NULL(6); #ifdef CONTEXT_TYPE_SAFETY # define i_stream_create_header_filter(input, flags, headers, headers_count, \ callback, context) \
--- a/src/lib-mail/message-header-parser.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-mail/message-header-parser.h Sun Jun 24 00:52:57 2012 +0300 @@ -45,7 +45,7 @@ struct message_header_parser_ctx * message_parse_header_init(struct istream *input, struct message_size *hdr_size, - enum message_header_parser_flags flags); + enum message_header_parser_flags flags) ATTR_NULL(2); void message_parse_header_deinit(struct message_header_parser_ctx **ctx); /* Read and return next header line. Returns 1 if header is returned, 0 if @@ -61,7 +61,8 @@ /* Read and parse the header from the given stream. */ void message_parse_header(struct istream *input, struct message_size *hdr_size, enum message_header_parser_flags flags, - message_header_callback_t *callback, void *context); + message_header_callback_t *callback, void *context) + ATTR_NULL(2); #ifdef CONTEXT_TYPE_SAFETY # define message_parse_header(input, hdr_size, flags, callback, context) \ ({(void)(1 ? 0 : callback((struct message_header_line *)0, context)); \
--- a/src/lib-mail/message-parser.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-mail/message-parser.h Sun Jun 24 00:52:57 2012 +0300 @@ -97,7 +97,7 @@ void message_parser_parse_header(struct message_parser_ctx *ctx, struct message_size *hdr_size, message_part_header_callback_t *callback, - void *context); + void *context) ATTR_NULL(4); #ifdef CONTEXT_TYPE_SAFETY # define message_parser_parse_header(ctx, hdr_size, callback, context) \ ({(void)(1 ? 0 : callback((struct message_part *)0, \ @@ -115,7 +115,7 @@ for the body content. */ void message_parser_parse_body(struct message_parser_ctx *ctx, message_part_header_callback_t *hdr_callback, - void *context); + void *context) ATTR_NULL(3); #ifdef CONTEXT_TYPE_SAFETY # define message_parser_parse_body(ctx, callback, context) \ ({(void)(1 ? 0 : callback((struct message_part *)0, \
--- a/src/lib-mail/message-part-serialize.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-mail/message-part-serialize.c Sun Jun 24 00:52:57 2012 +0300 @@ -115,7 +115,7 @@ return TRUE; } -static bool +static bool ATTR_NULL(2) message_part_deserialize_part(struct deserialize_context *ctx, struct message_part *parent, unsigned int siblings,
--- a/src/lib-mail/message-search.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-mail/message-search.h Sun Jun 24 00:52:57 2012 +0300 @@ -29,6 +29,7 @@ /* Search a full message. Returns 1 if match was found, 0 if not, -1 if error (if stream_error == 0, the parts contained broken data) */ int message_search_msg(struct message_search_context *ctx, - struct istream *input, struct message_part *parts); + struct istream *input, struct message_part *parts) + ATTR_NULL(3); #endif
--- a/src/lib-mail/message-size.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-mail/message-size.c Sun Jun 24 00:52:57 2012 +0300 @@ -6,22 +6,21 @@ #include "message-size.h" int message_get_header_size(struct istream *input, struct message_size *hdr, - bool *has_nuls) + bool *has_nuls_r) { const unsigned char *msg; size_t i, size, startpos, missing_cr_count; int ret; memset(hdr, 0, sizeof(struct message_size)); - if (has_nuls != NULL) - *has_nuls = FALSE; + *has_nuls_r = FALSE; missing_cr_count = 0; startpos = 0; while (i_stream_read_data(input, &msg, &size, startpos) > 0) { for (i = startpos; i < size; i++) { if (msg[i] != '\n') { - if (msg[i] == '\0' && has_nuls != NULL) - *has_nuls = TRUE; + if (msg[i] == '\0') + *has_nuls_r = TRUE; continue; } @@ -65,15 +64,14 @@ } int message_get_body_size(struct istream *input, struct message_size *body, - bool *has_nuls) + bool *has_nuls_r) { const unsigned char *msg; size_t i, size, missing_cr_count; int ret; memset(body, 0, sizeof(struct message_size)); - if (has_nuls != NULL) - *has_nuls = FALSE; + *has_nuls_r = FALSE; missing_cr_count = 0; if ((ret = i_stream_read_data(input, &msg, &size, 0)) <= 0) @@ -97,8 +95,7 @@ at virtual \r */ body->lines++; } else if (msg[i] == '\0') { - if (has_nuls != NULL) - *has_nuls = TRUE; + *has_nuls_r = TRUE; } }
--- a/src/lib-mail/message-size.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-mail/message-size.h Sun Jun 24 00:52:57 2012 +0300 @@ -10,10 +10,10 @@ /* Calculate size of message header. Leave the input point to first character in body. */ int message_get_header_size(struct istream *input, struct message_size *hdr, - bool *has_nuls); + bool *has_nuls_r); /* Calculate size of message body. */ int message_get_body_size(struct istream *input, struct message_size *body, - bool *has_nuls); + bool *has_nuls_r); /* Sum contents of src into dest. */ void message_size_add(struct message_size *dest,
--- a/src/lib-mail/rfc822-parser.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-mail/rfc822-parser.h Sun Jun 24 00:52:57 2012 +0300 @@ -15,7 +15,7 @@ /* Parse given data using RFC 822 token parser. */ void rfc822_parser_init(struct rfc822_parser_context *ctx, const unsigned char *data, size_t size, - string_t *last_comment); + string_t *last_comment) ATTR_NULL(4); /* The functions below return 1 = more data available, 0 = no more data available (but a value might have been returned now), -1 = invalid input.
--- a/src/lib-mail/test-istream-header-filter.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-mail/test-istream-header-filter.c Sun Jun 24 00:52:57 2012 +0300 @@ -7,8 +7,9 @@ #include "istream-header-filter.h" #include "test-common.h" -static void filter_callback(struct message_header_line *hdr, - bool *matched, void *context ATTR_UNUSED) +static void ATTR_NULL(3) +filter_callback(struct message_header_line *hdr, + bool *matched, void *context ATTR_UNUSED) { if (hdr != NULL && hdr->name_offset == 0) { /* drop first header */ @@ -67,6 +68,7 @@ static void test_istream_end_body_with_lf(void) { + static const char *empty_strarray[] = { NULL }; const char *input = "From: foo\n\nhello world"; const char *output = "From: foo\n\nhello world\n"; struct istream *istream, *filter; @@ -82,7 +84,7 @@ HEADER_FILTER_EXCLUDE | HEADER_FILTER_NO_CR | HEADER_FILTER_END_BODY_WITH_LF, - NULL, 0, + empty_strarray, 0, null_header_filter_callback, NULL); for (i = 1; i < input_len; i++) {
--- a/src/lib-master/anvil-client.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-master/anvil-client.h Sun Jun 24 00:52:57 2012 +0300 @@ -13,7 +13,7 @@ If the callback returns FALSE, reconnection isn't attempted. */ struct anvil_client * anvil_client_init(const char *path, bool (*reconnect_callback)(void), - enum anvil_client_flags flags); + enum anvil_client_flags flags) ATTR_NULL(2); void anvil_client_deinit(struct anvil_client **client); /* Connect to anvil. If retry=TRUE, try connecting for a while */
--- a/src/lib-master/ipc-client.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-master/ipc-client.h Sun Jun 24 00:52:57 2012 +0300 @@ -15,6 +15,7 @@ void ipc_client_deinit(struct ipc_client **client); void ipc_client_cmd(struct ipc_client *client, const char *cmd, - ipc_client_callback_t *callback, void *context); + ipc_client_callback_t *callback, void *context) + ATTR_NULL(4); #endif
--- a/src/lib-master/ipc-server.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-master/ipc-server.c Sun Jun 24 00:52:57 2012 +0300 @@ -176,7 +176,7 @@ void ipc_cmd_success(struct ipc_cmd **_cmd) { - ipc_cmd_success_reply(_cmd, NULL); + ipc_cmd_success_reply(_cmd, ""); } void ipc_cmd_success_reply(struct ipc_cmd **_cmd, const char *data)
--- a/src/lib-master/master-service-settings-cache.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-master/master-service-settings-cache.h Sun Jun 24 00:52:57 2012 +0300 @@ -11,6 +11,6 @@ const struct master_service_settings_input *input, const struct dynamic_settings_parser *dyn_parsers, const struct setting_parser_context **parser_r, - const char **error_r); + const char **error_r) ATTR_NULL(3); #endif
--- a/src/lib-master/master-service-settings.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-master/master-service-settings.h Sun Jun 24 00:52:57 2012 +0300 @@ -59,7 +59,7 @@ const char **error_r); int master_service_settings_read_simple(struct master_service *service, const struct setting_parser_info **roots, - const char **error_r); + const char **error_r) ATTR_NULL(2); /* destroy settings parser and clear service's set_pool, so that master_service_settings_read*() can be called without freeing memory used by existing settings structures. */
--- a/src/lib-master/master-service.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-master/master-service.c Sun Jun 24 00:52:57 2012 +0300 @@ -149,7 +149,7 @@ service->argv = *argv; service->name = i_strdup(name); /* keep getopt_str first in case it contains "+" */ - service->getopt_str = getopt_str == NULL ? + service->getopt_str = *getopt_str == '\0' ? i_strdup(master_service_getopt_string()) : i_strconcat(getopt_str, master_service_getopt_string(), NULL); service->flags = flags; @@ -289,8 +289,8 @@ if (strcmp(service->set->log_path, "syslog") != 0) { /* set error handlers back to file */ - i_set_fatal_handler(NULL); - i_set_error_handler(NULL); + i_set_fatal_handler(default_fatal_handler); + i_set_error_handler(default_error_handler); } }
--- a/src/lib-master/master-service.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-master/master-service.h Sun Jun 24 00:52:57 2012 +0300 @@ -121,7 +121,8 @@ /* Start the service. Blocks until finished */ void master_service_run(struct master_service *service, - master_service_connection_callback_t *callback); + master_service_connection_callback_t *callback) + ATTR_NULL(2); /* Stop a running service. */ void master_service_stop(struct master_service *service); /* Stop once we're done serving existing new connections, but don't accept
--- a/src/lib-master/mountpoint-list.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-master/mountpoint-list.c Sun Jun 24 00:52:57 2012 +0300 @@ -58,8 +58,8 @@ NULL }; -struct mountpoint_list * -mountpoint_list_init(const char *perm_path, const char *state_path) +static struct mountpoint_list * ATTR_NULL(1) +mountpoint_list_init_internal(const char *perm_path, const char *state_path) { struct mountpoint_list *list; pool_t pool; @@ -76,9 +76,15 @@ } struct mountpoint_list * +mountpoint_list_init(const char *perm_path, const char *state_path) +{ + return mountpoint_list_init_internal(perm_path, state_path); +} + +struct mountpoint_list * mountpoint_list_init_readonly(const char *state_path) { - return mountpoint_list_init(NULL, state_path); + return mountpoint_list_init_internal(NULL, state_path); } void mountpoint_list_deinit(struct mountpoint_list **_list)
--- a/src/lib-ntlm/ntlm-encrypt.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-ntlm/ntlm-encrypt.c Sun Jun 24 00:52:57 2012 +0300 @@ -74,7 +74,7 @@ hmac_md5_update(ctx, wstr, len); } -static void +static void ATTR_NULL(2) ntlm_v2_hash(const char *user, const char *target, const unsigned char *hash_v1, unsigned char hash[NTLMSSP_V2_HASH_SIZE]) @@ -83,7 +83,7 @@ hmac_md5_init(&ctx, hash_v1, NTLMSSP_HASH_SIZE); hmac_md5_ucs2le_string_ucase(&ctx, user); - if (target) + if (target != NULL) hmac_md5_ucs2le_string_ucase(&ctx, target); hmac_md5_final(&ctx, hash); }
--- a/src/lib-ntlm/ntlm-encrypt.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-ntlm/ntlm-encrypt.h Sun Jun 24 00:52:57 2012 +0300 @@ -20,6 +20,7 @@ const unsigned char *hash_v1, const unsigned char *challenge, const unsigned char *blob, size_t blob_size, - unsigned char response[NTLMSSP_V2_RESPONSE_SIZE]); + unsigned char response[NTLMSSP_V2_RESPONSE_SIZE]) + ATTR_NULL(2); #endif
--- a/src/lib-otp/otp-parse.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-otp/otp-parse.c Sun Jun 24 00:52:57 2012 +0300 @@ -55,15 +55,13 @@ break; } } else if (!IS_LWS(c)) { - if (endptr) - *endptr = data; + *endptr = data; return -1; } data++; } - if (endptr) - *endptr = data; + *endptr = data; if (i < OTP_HASH_SIZE * 2) return -1; @@ -246,7 +244,7 @@ if (*end++ != ' ') return -1; - return otp_read_hex(end, NULL, state->hash); + return otp_read_hex(end, &end, state->hash); } const char *otp_print_dbentry(const struct otp_state *state)
--- a/src/lib-settings/settings-parser.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-settings/settings-parser.c Sun Jun 24 00:52:57 2012 +0300 @@ -493,9 +493,10 @@ } } -static int setting_link_add(struct setting_parser_context *ctx, - const struct setting_define *def, - const struct setting_link *link_copy, char *key) +static int ATTR_NULL(2) +setting_link_add(struct setting_parser_context *ctx, + const struct setting_define *def, + const struct setting_link *link_copy, char *key) { struct setting_link *link; @@ -520,7 +521,7 @@ return 0; } -static int +static int ATTR_NULL(3, 8) get_deflist(struct setting_parser_context *ctx, struct setting_link *parent, const struct setting_define *def, const struct setting_parser_info *info, @@ -1183,19 +1184,9 @@ settings_parse_set_key_expandeded(ctx, pool, *keys); } -void settings_parse_var_skip(struct setting_parser_context *ctx) -{ - unsigned int i; - - for (i = 0; i < ctx->root_count; i++) { - settings_var_expand(ctx->roots[i].info, - ctx->roots[i].set_struct, NULL, NULL); - } -} - -static void -settings_var_expand_info(const struct setting_parser_info *info, - pool_t pool, void *set, +static void ATTR_NULL(3, 4, 5) +settings_var_expand_info(const struct setting_parser_info *info, void *set, + pool_t pool, const struct var_expand_table *table, string_t *str) { const struct setting_define *def; @@ -1245,7 +1236,7 @@ children = array_get(val, &count); for (i = 0; i < count; i++) { settings_var_expand_info(def->list_info, - pool, children[i], + children[i], pool, table, str); } break; @@ -1262,10 +1253,21 @@ T_BEGIN { str = t_str_new(256); - settings_var_expand_info(info, pool, set, table, str); + settings_var_expand_info(info, set, pool, table, str); } T_END; } +void settings_parse_var_skip(struct setting_parser_context *ctx) +{ + unsigned int i; + + for (i = 0; i < ctx->root_count; i++) { + settings_var_expand_info(ctx->roots[i].info, + ctx->roots[i].set_struct, + NULL, NULL, NULL); + } +} + bool settings_vars_have_key(const struct setting_parser_info *info, void *set, char var_key, const char *long_var_key, const char **key_r, const char **value_r)
--- a/src/lib-settings/settings.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-settings/settings.h Sun Jun 24 00:52:57 2012 +0300 @@ -42,7 +42,8 @@ bool settings_read(const char *path, const char *section, settings_callback_t *callback, - settings_section_callback_t *sect_callback, void *context); + settings_section_callback_t *sect_callback, void *context) + ATTR_NULL(2, 4, 5); #ifdef CONTEXT_TYPE_SAFETY # define settings_read(path, section, callback, sect_callback, context) \ ({(void)(1 ? 0 : callback((const char *)0, (const char *)0, context)); \
--- a/src/lib-sql/driver-mysql.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-sql/driver-mysql.c Sun Jun 24 00:52:57 2012 +0300 @@ -500,7 +500,7 @@ callback(NULL, context); } -static int +static int ATTR_NULL(3) transaction_send_query(struct mysql_transaction_context *ctx, const char *query, unsigned int *affected_rows_r) {
--- a/src/lib-sql/driver-pgsql.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-sql/driver-pgsql.c Sun Jun 24 00:52:57 2012 +0300 @@ -485,8 +485,10 @@ (void)sql_connect(&db->api); } if (db->api.state != SQL_DB_STATE_DISCONNECTED) { + int error; + to = t_buffer_get(len * 2 + 1); - len = PQescapeStringConn(db->pg, to, string, len, NULL); + len = PQescapeStringConn(db->pg, to, string, len, &error); } else #endif {
--- a/src/lib-sql/driver-sqlpool.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-sql/driver-sqlpool.c Sun Jun 24 00:52:57 2012 +0300 @@ -80,7 +80,7 @@ driver_sqlpool_commit_callback(const char *error, struct sqlpool_transaction_context *ctx); -static struct sqlpool_request * +static struct sqlpool_request * ATTR_NULL(2) sqlpool_request_new(struct sqlpool_db *db, const char *query) { struct sqlpool_request *request; @@ -639,8 +639,9 @@ } } -static void driver_sqlpool_query(struct sql_db *_db, const char *query, - sql_query_callback_t *callback, void *context) +static void ATTR_NULL(3, 4) +driver_sqlpool_query(struct sql_db *_db, const char *query, + sql_query_callback_t *callback, void *context) { struct sqlpool_db *db = (struct sqlpool_db *)_db; struct sqlpool_request *request;
--- a/src/lib-sql/sql-api.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-sql/sql-api.c Sun Jun 24 00:52:57 2012 +0300 @@ -369,7 +369,7 @@ void sql_update(struct sql_transaction_context *ctx, const char *query) { - sql_update_get_rows(ctx, query, NULL); + ctx->db->v.update(ctx, query, NULL); } void sql_update_get_rows(struct sql_transaction_context *ctx, const char *query,
--- a/src/lib-storage/index/dbox-common/dbox-file-fix.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/index/dbox-common/dbox-file-fix.c Sun Jun 24 00:52:57 2012 +0300 @@ -164,6 +164,7 @@ uoff_t offset, msg_size, hdr_offset, body_offset; bool pre, write_header, have_guid; struct message_size body; + bool has_nuls; struct istream *body_input; guid_128_t guid_128; int ret; @@ -248,7 +249,7 @@ /* get message body size */ i_stream_seek(file->input, body_offset); body_input = i_stream_create_limit(file->input, msg_size); - ret = message_get_body_size(body_input, &body, NULL); + ret = message_get_body_size(body_input, &body, &has_nuls); i_stream_unref(&body_input); if (ret < 0) { errno = output->stream_errno;
--- a/src/lib-storage/index/dbox-common/dbox-save.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/index/dbox-common/dbox-save.h Sun Jun 24 00:52:57 2012 +0300 @@ -26,7 +26,7 @@ void dbox_save_write_metadata(struct mail_save_context *ctx, struct ostream *output, uoff_t output_msg_size, const char *orig_mailbox_name, - guid_128_t guid_128_r); + guid_128_t guid_128_r) ATTR_NULL(4); void dbox_save_add_to_index(struct dbox_save_context *ctx);
--- a/src/lib-storage/index/dbox-common/dbox-storage.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/index/dbox-common/dbox-storage.c Sun Jun 24 00:52:57 2012 +0300 @@ -59,12 +59,10 @@ { const char *root_dir, *alt_symlink_path, *alt_path; - root_dir = mailbox_list_get_path(list, NULL, - MAILBOX_LIST_PATH_TYPE_DIR); + root_dir = mailbox_list_get_root_path(list, MAILBOX_LIST_PATH_TYPE_DIR); alt_symlink_path = t_strconcat(root_dir, "/"DBOX_ALT_SYMLINK_NAME, NULL); - alt_path = mailbox_list_get_path(list, NULL, - MAILBOX_LIST_PATH_TYPE_ALT_MAILBOX); + alt_path = mailbox_list_get_root_path(list, MAILBOX_LIST_PATH_TYPE_ALT_MAILBOX); if (!dbox_alt_path_has_changed(root_dir, alt_path, alt_symlink_path)) return; @@ -123,8 +121,7 @@ { const char *path; - path = mailbox_list_get_path(list, NULL, - MAILBOX_LIST_PATH_TYPE_CONTROL); + path = mailbox_list_get_root_path(list, MAILBOX_LIST_PATH_TYPE_CONTROL); path = t_strconcat(path, "/"DBOX_UIDVALIDITY_FILE_NAME, NULL); return mailbox_uidvalidity_next(list, path); }
--- a/src/lib-storage/index/dbox-common/dbox-sync-rebuild.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/index/dbox-common/dbox-sync-rebuild.c Sun Jun 24 00:52:57 2012 +0300 @@ -207,8 +207,7 @@ const char *alt_path, *error; struct stat st; - alt_path = mailbox_list_get_path(list, NULL, - MAILBOX_LIST_PATH_TYPE_ALT_DIR); + alt_path = mailbox_list_get_root_path(list, MAILBOX_LIST_PATH_TYPE_ALT_DIR); if (alt_path == NULL) return 0;
--- a/src/lib-storage/index/dbox-multi/mdbox-map.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/index/dbox-multi/mdbox-map.c Sun Jun 24 00:52:57 2012 +0300 @@ -52,10 +52,8 @@ const char *root, *index_root; mode_t dir_mode; - root = mailbox_list_get_path(root_list, NULL, - MAILBOX_LIST_PATH_TYPE_DIR); - index_root = mailbox_list_get_path(root_list, NULL, - MAILBOX_LIST_PATH_TYPE_INDEX); + root = mailbox_list_get_root_path(root_list, MAILBOX_LIST_PATH_TYPE_DIR); + index_root = mailbox_list_get_root_path(root_list, MAILBOX_LIST_PATH_TYPE_INDEX); map = i_new(struct mdbox_map, 1); map->storage = storage;
--- a/src/lib-storage/index/dbox-multi/mdbox-storage.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/index/dbox-multi/mdbox-storage.c Sun Jun 24 00:52:57 2012 +0300 @@ -52,7 +52,7 @@ _storage->unique_root_dir = p_strdup(_storage->pool, ns->list->set.root_dir); - dir = mailbox_list_get_path(ns->list, NULL, MAILBOX_LIST_PATH_TYPE_DIR); + dir = mailbox_list_get_root_path(ns->list, MAILBOX_LIST_PATH_TYPE_DIR); storage->storage_dir = p_strconcat(_storage->pool, dir, "/"MDBOX_GLOBAL_DIR_NAME, NULL); storage->alt_storage_dir = p_strconcat(_storage->pool, @@ -243,9 +243,10 @@ } } -static int mdbox_write_index_header(struct mailbox *box, - const struct mailbox_update *update, - struct mail_index_transaction *trans) +static int ATTR_NULL(2, 3) +mdbox_write_index_header(struct mailbox *box, + const struct mailbox_update *update, + struct mail_index_transaction *trans) { struct mdbox_mailbox *mbox = (struct mdbox_mailbox *)box; struct mail_index_transaction *new_trans = NULL;
--- a/src/lib-storage/index/dbox-multi/mdbox-storage.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/index/dbox-multi/mdbox-storage.h Sun Jun 24 00:52:57 2012 +0300 @@ -72,7 +72,7 @@ struct mdbox_index_header *hdr); void mdbox_update_header(struct mdbox_mailbox *mbox, struct mail_index_transaction *trans, - const struct mailbox_update *update); + const struct mailbox_update *update) ATTR_NULL(3); struct mail_save_context * mdbox_save_alloc(struct mailbox_transaction_context *_t);
--- a/src/lib-storage/index/dbox-multi/mdbox-sync.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/index/dbox-multi/mdbox-sync.c Sun Jun 24 00:52:57 2012 +0300 @@ -30,10 +30,11 @@ { const void *data; uint32_t uid; + bool expunged; mail_index_lookup_uid(ctx->sync_view, seq, &uid); mail_index_lookup_ext(ctx->sync_view, seq, - ctx->mbox->guid_ext_id, &data, NULL); + ctx->mbox->guid_ext_id, &data, &expunged); if (guid_128_is_empty(guid_128) || memcmp(data, guid_128, GUID_128_SIZE) == 0) return 0; @@ -99,6 +100,7 @@ unsigned int n; const void *data; uint32_t seq, uid; + bool expunged; /* use a separate transaction here so that we can commit the changes during map transaction */ @@ -107,7 +109,7 @@ while (seq_range_array_iter_nth(&iter, n++, &seq)) { mail_index_lookup_uid(ctx->sync_view, seq, &uid); mail_index_lookup_ext(ctx->sync_view, seq, - ctx->mbox->guid_ext_id, &data, NULL); + ctx->mbox->guid_ext_id, &data, &expunged); mail_index_expunge_guid(trans, seq, data); } if (mail_index_transaction_commit(&trans) < 0)
--- a/src/lib-storage/index/dbox-single/sdbox-storage.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/index/dbox-single/sdbox-storage.c Sun Jun 24 00:52:57 2012 +0300 @@ -178,9 +178,10 @@ sizeof(mbox->mailbox_guid)); } -static int sdbox_mailbox_create_indexes(struct mailbox *box, - const struct mailbox_update *update, - struct mail_index_transaction *trans) +static int ATTR_NULL(2, 3) +sdbox_mailbox_create_indexes(struct mailbox *box, + const struct mailbox_update *update, + struct mail_index_transaction *trans) { struct sdbox_mailbox *mbox = (struct sdbox_mailbox *)box; struct mail_index_transaction *new_trans = NULL;
--- a/src/lib-storage/index/imapc/imapc-mail.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/index/imapc/imapc-mail.c Sun Jun 24 00:52:57 2012 +0300 @@ -196,7 +196,7 @@ return them as empty mails instead of disconnecting the client. */ mail->body_fetched = TRUE; - data->stream = i_stream_create_from_data(NULL, 0); + data->stream = i_stream_create_from_data(&uchar_nul, 0); imapc_mail_init_stream(mail, TRUE); } }
--- a/src/lib-storage/index/index-mail-headers.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/index/index-mail-headers.c Sun Jun 24 00:52:57 2012 +0300 @@ -64,7 +64,7 @@ i_assert((match[match_idx] & HEADER_MATCH_FLAG_FOUND) == 0); index_mail_cache_add_idx(mail, match_idx, - NULL, 0); + "", 0); } match_idx++; } @@ -125,7 +125,7 @@ /* this header doesn't exist. remember that. */ i_assert((match[match_idx] & HEADER_MATCH_FLAG_FOUND) == 0); - index_mail_cache_add_idx(mail, match_idx, NULL, 0); + index_mail_cache_add_idx(mail, match_idx, "", 0); } }
--- a/src/lib-storage/index/index-mail.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/index/index-mail.c Sun Jun 24 00:52:57 2012 +0300 @@ -872,6 +872,7 @@ struct mail *_mail = &mail->mail.mail; struct index_mail_data *data = &mail->data; struct istream *input; + bool has_nuls; int ret; if (!data->initialized_wrapper_stream && @@ -903,7 +904,8 @@ return -1; } else { message_get_header_size(data->stream, - &data->hdr_size, NULL); + &data->hdr_size, + &has_nuls); data->hdr_size_set = TRUE; } } @@ -923,7 +925,8 @@ return -1; } else { message_get_body_size(data->stream, - &data->body_size, NULL); + &data->body_size, + &has_nuls); data->body_size_set = TRUE; } }
--- a/src/lib-storage/index/index-mail.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/index/index-mail.h Sun Jun 24 00:52:57 2012 +0300 @@ -170,12 +170,14 @@ bool index_mail_want_parse_headers(struct index_mail *mail); void index_mail_parse_header_init(struct index_mail *mail, - struct mailbox_header_lookup_ctx *headers); + struct mailbox_header_lookup_ctx *headers) + ATTR_NULL(2); void index_mail_parse_header(struct message_part *part, struct message_header_line *hdr, - struct index_mail *mail); + struct index_mail *mail) ATTR_NULL(1); int index_mail_parse_headers(struct index_mail *mail, - struct mailbox_header_lookup_ctx *headers); + struct mailbox_header_lookup_ctx *headers) + ATTR_NULL(2); int index_mail_headers_get_envelope(struct index_mail *mail); int index_mail_get_first_header(struct mail *_mail, const char *field, @@ -201,7 +203,7 @@ int index_mail_init_stream(struct index_mail *mail, struct message_size *hdr_size, struct message_size *body_size, - struct istream **stream_r); + struct istream **stream_r) ATTR_NULL(2, 3); int index_mail_get_special(struct mail *_mail, enum mail_fetch_field field, const char **value_r); struct mail *index_mail_get_real_mail(struct mail *mail);
--- a/src/lib-storage/index/index-search.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/index/index-search.c Sun Jun 24 00:52:57 2012 +0300 @@ -58,8 +58,9 @@ struct mail_search_arg *args, uint32_t *seq1_r, uint32_t *seq2_r); -static void search_none(struct mail_search_arg *arg ATTR_UNUSED, - struct search_body_context *ctx ATTR_UNUSED) +static void ATTR_NULL(2) +search_none(struct mail_search_arg *arg ATTR_UNUSED, + struct search_body_context *ctx ATTR_UNUSED) { } @@ -1164,8 +1165,9 @@ return &ctx->mail_ctx; } -static void search_arg_deinit(struct mail_search_arg *arg, - void *context ATTR_UNUSED) +static void ATTR_NULL(2) +search_arg_deinit(struct mail_search_arg *arg, + void *context ATTR_UNUSED) { struct message_search_context *search_ctx = arg->context;
--- a/src/lib-storage/index/index-sort.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/index/index-sort.c Sun Jun 24 00:52:57 2012 +0300 @@ -57,10 +57,11 @@ { ARRAY_TYPE(mail_sort_node_date) *nodes = program->context; struct mail_sort_node_date *node; + int tz; node = array_append_space(nodes); node->seq = mail->seq; - if (mail_get_date(mail, &node->date, NULL) < 0) + if (mail_get_date(mail, &node->date, &tz) < 0) node->date = 0; else if (node->date == 0) { if (mail_get_received_date(mail, &node->date) < 0) @@ -410,6 +411,7 @@ { const char *str; int ret; + bool reply_or_fw; mail_set_seq(mail, seq); str_truncate(dest, 0); @@ -419,7 +421,7 @@ if ((ret = mail_get_first_header(mail, "Subject", &str)) <= 0) return ret; str = imap_get_base_subject_cased(pool_datastack_create(), - str, NULL); + str, &reply_or_fw); str_append(dest, str); return 0; case MAIL_SORT_CC: @@ -453,7 +455,7 @@ time_t time1, time2; uoff_t size1, size2; float float1, float2; - int ret = 0; + int tz, ret = 0; sort_type = *sort_program & MAIL_SORT_MASK; switch (sort_type) { @@ -488,7 +490,7 @@ break; case MAIL_SORT_DATE: mail_set_seq(mail, seq1); - if (mail_get_date(mail, &time1, NULL) < 0) + if (mail_get_date(mail, &time1, &tz) < 0) time1 = 0; else if (time1 == 0) { if (mail_get_received_date(mail, &time1) < 0) @@ -496,7 +498,7 @@ } mail_set_seq(mail, seq2); - if (mail_get_date(mail, &time2, NULL) < 0) + if (mail_get_date(mail, &time2, &tz) < 0) time2 = 0; else if (time2 == 0) { if (mail_get_received_date(mail, &time2) < 0)
--- a/src/lib-storage/index/index-storage.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/index/index-storage.h Sun Jun 24 00:52:57 2012 +0300 @@ -62,7 +62,8 @@ int index_storage_mailbox_exists(struct mailbox *box, bool auto_boxes, enum mailbox_existence *existence_r); int index_storage_mailbox_exists_full(struct mailbox *box, const char *subdir, - enum mailbox_existence *existence_r); + enum mailbox_existence *existence_r) + ATTR_NULL(2); int index_storage_mailbox_open(struct mailbox *box, bool move_to_memory); int index_storage_mailbox_enable(struct mailbox *box, enum mailbox_feature feature);
--- a/src/lib-storage/index/index-sync-changes.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/index/index-sync-changes.h Sun Jun 24 00:52:57 2012 +0300 @@ -22,6 +22,7 @@ void index_sync_changes_apply(struct index_sync_changes_context *ctx, pool_t pool, uint8_t *flags, ARRAY_TYPE(keyword_indexes) *keywords, - enum mail_index_sync_type *sync_type_r); + enum mail_index_sync_type *sync_type_r) + ATTR_NULL(2); #endif
--- a/src/lib-storage/index/maildir/maildir-filename-flags.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/index/maildir/maildir-filename-flags.c Sun Jun 24 00:52:57 2012 +0300 @@ -88,9 +88,10 @@ char_cmp); } -const char *maildir_filename_flags_set(struct maildir_keywords_sync_ctx *ctx, - const char *fname, enum mail_flags flags, - ARRAY_TYPE(keyword_indexes) *keywords) +static const char * ATTR_NULL(1, 4) +maildir_filename_flags_full_set(struct maildir_keywords_sync_ctx *ctx, + const char *fname, enum mail_flags flags, + ARRAY_TYPE(keyword_indexes) *keywords) { string_t *flags_str; enum mail_flags flags_left; @@ -170,3 +171,15 @@ return str_c(flags_str); } + +const char *maildir_filename_flags_set(const char *fname, enum mail_flags flags) +{ + return maildir_filename_flags_full_set(NULL, fname, flags, NULL); +} + +const char *maildir_filename_flags_kw_set(struct maildir_keywords_sync_ctx *ctx, + const char *fname, enum mail_flags flags, + ARRAY_TYPE(keyword_indexes) *keywords) +{ + return maildir_filename_flags_full_set(ctx, fname, flags, keywords); +}
--- a/src/lib-storage/index/maildir/maildir-filename-flags.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/index/maildir/maildir-filename-flags.h Sun Jun 24 00:52:57 2012 +0300 @@ -5,8 +5,9 @@ const char *fname, enum mail_flags *flags_r, ARRAY_TYPE(keyword_indexes) *keywords_r); -const char *maildir_filename_flags_set(struct maildir_keywords_sync_ctx *ctx, - const char *fname, enum mail_flags flags, - ARRAY_TYPE(keyword_indexes) *keywords); +const char *maildir_filename_flags_set(const char *fname, enum mail_flags flags); +const char *maildir_filename_flags_kw_set(struct maildir_keywords_sync_ctx *ctx, + const char *fname, enum mail_flags flags, + ARRAY_TYPE(keyword_indexes) *keywords); #endif
--- a/src/lib-storage/index/maildir/maildir-mail.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/index/maildir/maildir-mail.c Sun Jun 24 00:52:57 2012 +0300 @@ -504,8 +504,8 @@ "Maildir %s: Corrupted dovecot-uidlist: " "UID %u had empty GUID, clearing it", mailbox_get_path(_mail->box), _mail->uid); - maildir_uidlist_set_ext(mbox->uidlist, _mail->uid, - MAILDIR_UIDLIST_REC_EXT_GUID, NULL); + maildir_uidlist_unset_ext(mbox->uidlist, _mail->uid, + MAILDIR_UIDLIST_REC_EXT_GUID); } /* default to base filename: */ @@ -617,13 +617,13 @@ if (maildir_uidlist_lookup_ext(mbox->uidlist, mail->uid, MAILDIR_UIDLIST_REC_EXT_VSIZE) != NULL) { - maildir_uidlist_set_ext(mbox->uidlist, mail->uid, - MAILDIR_UIDLIST_REC_EXT_VSIZE, NULL); + maildir_uidlist_unset_ext(mbox->uidlist, mail->uid, + MAILDIR_UIDLIST_REC_EXT_VSIZE); } if (maildir_uidlist_lookup_ext(mbox->uidlist, mail->uid, MAILDIR_UIDLIST_REC_EXT_PSIZE) != NULL) { - maildir_uidlist_set_ext(mbox->uidlist, mail->uid, - MAILDIR_UIDLIST_REC_EXT_PSIZE, NULL); + maildir_uidlist_unset_ext(mbox->uidlist, mail->uid, + MAILDIR_UIDLIST_REC_EXT_PSIZE); } }
--- a/src/lib-storage/index/maildir/maildir-save.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/index/maildir/maildir-save.c Sun Jun 24 00:52:57 2012 +0300 @@ -135,7 +135,7 @@ ctx->newdir = p_strconcat(pool, path, "/new", NULL); ctx->curdir = p_strconcat(pool, path, "/cur", NULL); - buffer_create_const_data(&ctx->keywords_buffer, NULL, 0); + buffer_create_const_data(&ctx->keywords_buffer, "", 0); array_create_from_buffer(&ctx->keywords_array, &ctx->keywords_buffer, sizeof(unsigned int)); ctx->last_save_finished = TRUE; @@ -272,17 +272,18 @@ return TRUE; } - *fname_r = maildir_filename_flags_set(NULL, basename, - mf->flags & MAIL_FLAGS_MASK, NULL); + *fname_r = maildir_filename_flags_set(basename, + mf->flags & MAIL_FLAGS_MASK); return FALSE; } i_assert(ctx->keywords_sync_ctx != NULL || mf->keywords_count == 0); buffer_create_const_data(&ctx->keywords_buffer, mf + 1, mf->keywords_count * sizeof(unsigned int)); - *fname_r = maildir_filename_flags_set(ctx->keywords_sync_ctx, basename, - mf->flags & MAIL_FLAGS_MASK, - &ctx->keywords_array); + *fname_r = maildir_filename_flags_kw_set(ctx->keywords_sync_ctx, + basename, + mf->flags & MAIL_FLAGS_MASK, + &ctx->keywords_array); return FALSE; }
--- a/src/lib-storage/index/maildir/maildir-storage.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/index/maildir/maildir-storage.c Sun Jun 24 00:52:57 2012 +0300 @@ -60,12 +60,10 @@ /* put the temp files into tmp/ directory preferrably */ storage->temp_prefix = p_strconcat(_storage->pool, "tmp/", storage->temp_prefix, NULL); - dir = mailbox_list_get_path(list, NULL, - MAILBOX_LIST_PATH_TYPE_DIR); + dir = mailbox_list_get_root_path(list, MAILBOX_LIST_PATH_TYPE_DIR); } else { /* control dir should also be writable */ - dir = mailbox_list_get_path(list, NULL, - MAILBOX_LIST_PATH_TYPE_CONTROL); + dir = mailbox_list_get_root_path(list, MAILBOX_LIST_PATH_TYPE_CONTROL); } _storage->temp_path_prefix = p_strconcat(_storage->pool, dir, "/", storage->temp_prefix, NULL); @@ -351,8 +349,7 @@ return -1; /* tmp/ directory doesn't exist. does the maildir? */ - root_dir = mailbox_list_get_path(box->list, NULL, - MAILBOX_LIST_PATH_TYPE_MAILBOX); + root_dir = mailbox_list_get_root_path(box->list, MAILBOX_LIST_PATH_TYPE_MAILBOX); if (strcmp(box_path, root_dir) == 0) { /* root directory. either INBOX or some other namespace root */ errno = ENOENT; @@ -465,8 +462,7 @@ /* if dovecot-shared exists in the root dir, copy it to newly created mailboxes */ - root_dir = mailbox_list_get_path(box->list, NULL, - MAILBOX_LIST_PATH_TYPE_MAILBOX); + root_dir = mailbox_list_get_root_path(box->list, MAILBOX_LIST_PATH_TYPE_MAILBOX); shared_path = t_strconcat(root_dir, "/dovecot-shared", NULL); if (stat(shared_path, &st) == 0) { if (maildir_create_shared(box) < 0) @@ -552,8 +548,7 @@ { const char *path; - path = mailbox_list_get_path(list, NULL, - MAILBOX_LIST_PATH_TYPE_CONTROL); + path = mailbox_list_get_root_path(list, MAILBOX_LIST_PATH_TYPE_CONTROL); path = t_strconcat(path, "/"MAILDIR_UIDVALIDITY_FNAME, NULL); return mailbox_uidvalidity_next(list, path); } @@ -568,10 +563,8 @@ return mbox->_private_flags_mask; mbox->private_flags_mask_set = TRUE; - path = mailbox_list_get_path(box->list, NULL, - MAILBOX_LIST_PATH_TYPE_MAILBOX); - path2 = mailbox_list_get_path(box->list, NULL, - MAILBOX_LIST_PATH_TYPE_INDEX); + path = mailbox_list_get_root_path(box->list, MAILBOX_LIST_PATH_TYPE_MAILBOX); + path2 = mailbox_list_get_root_path(box->list, MAILBOX_LIST_PATH_TYPE_INDEX); if (strcmp(path, path2) == 0) { /* no separate index directory. we can't have private flags, so don't even bother checking if dovecot-shared exists */
--- a/src/lib-storage/index/maildir/maildir-storage.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/index/maildir/maildir-storage.h Sun Jun 24 00:52:57 2012 +0300 @@ -126,7 +126,7 @@ struct maildir_filename * maildir_save_add(struct mail_save_context *_ctx, const char *tmp_fname, - struct mail *src_mail); + struct mail *src_mail) ATTR_NULL(3); void maildir_save_set_dest_basename(struct mail_save_context *ctx, struct maildir_filename *mf, const char *basename);
--- a/src/lib-storage/index/maildir/maildir-sync-index.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/index/maildir/maildir-sync-index.c Sun Jun 24 00:52:57 2012 +0300 @@ -132,8 +132,8 @@ ctx->flags = flags8; /* and try renaming with the new name */ - newfname = maildir_filename_flags_set(ctx->keywords_sync_ctx, fname, - ctx->flags, &ctx->keywords); + newfname = maildir_filename_flags_kw_set(ctx->keywords_sync_ctx, fname, + ctx->flags, &ctx->keywords); newpath = t_strconcat(dir, newfname, NULL); if (strcmp(path, newpath) == 0) { /* just make sure that the file still exists. avoid rename()
--- a/src/lib-storage/index/maildir/maildir-sync.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/index/maildir/maildir-sync.c Sun Jun 24 00:52:57 2012 +0300 @@ -749,8 +749,9 @@ return mail_index_sync_have_any(mbox->box.index, flags) ? 1 : 0; } -static int maildir_sync_context(struct maildir_sync_context *ctx, bool forced, - uint32_t *find_uid, bool *lost_files_r) +static int ATTR_NULL(3) +maildir_sync_context(struct maildir_sync_context *ctx, bool forced, + uint32_t *find_uid, bool *lost_files_r) { enum maildir_uidlist_sync_flags sync_flags; enum maildir_uidlist_rec_flag flags;
--- a/src/lib-storage/index/maildir/maildir-sync.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/index/maildir/maildir-sync.h Sun Jun 24 00:52:57 2012 +0300 @@ -31,7 +31,8 @@ int maildir_sync_index_begin(struct maildir_mailbox *mbox, struct maildir_sync_context *maildir_sync_ctx, - struct maildir_index_sync_context **ctx_r); + struct maildir_index_sync_context **ctx_r) + ATTR_NULL(2); int maildir_sync_index(struct maildir_index_sync_context *sync_ctx, bool partial); int maildir_sync_index_commit(struct maildir_index_sync_context **_ctx);
--- a/src/lib-storage/index/maildir/maildir-uidlist.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/index/maildir/maildir-uidlist.c Sun Jun 24 00:52:57 2012 +0300 @@ -1165,9 +1165,10 @@ memcpy(rec->extensions, buf->data, buf->used); } -void maildir_uidlist_set_ext(struct maildir_uidlist *uidlist, uint32_t uid, - enum maildir_uidlist_rec_ext_key key, - const char *value) +static void ATTR_NULL(4) +maildir_uidlist_set_ext_internal(struct maildir_uidlist *uidlist, uint32_t uid, + enum maildir_uidlist_rec_ext_key key, + const char *value) { struct maildir_uidlist_rec *rec; int ret; @@ -1199,6 +1200,19 @@ } } +void maildir_uidlist_set_ext(struct maildir_uidlist *uidlist, uint32_t uid, + enum maildir_uidlist_rec_ext_key key, + const char *value) +{ + return maildir_uidlist_set_ext_internal(uidlist, uid, key, value); +} + +void maildir_uidlist_unset_ext(struct maildir_uidlist *uidlist, uint32_t uid, + enum maildir_uidlist_rec_ext_key key) +{ + return maildir_uidlist_set_ext_internal(uidlist, uid, key, NULL); +} + static void maildir_uidlist_generate_uid_validity(struct maildir_uidlist *uidlist) {
--- a/src/lib-storage/index/maildir/maildir-uidlist.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/index/maildir/maildir-uidlist.h Sun Jun 24 00:52:57 2012 +0300 @@ -99,10 +99,12 @@ void maildir_uidlist_set_next_uid(struct maildir_uidlist *uidlist, uint32_t next_uid, bool force); -/* Update extended record. value=NULL removes the key. */ +/* Update extended record. */ void maildir_uidlist_set_ext(struct maildir_uidlist *uidlist, uint32_t uid, enum maildir_uidlist_rec_ext_key key, const char *value); +void maildir_uidlist_unset_ext(struct maildir_uidlist *uidlist, uint32_t uid, + enum maildir_uidlist_rec_ext_key key); /* If uidlist has changed, update it. This is mostly meant to be used with maildir_uidlist_set_ext() */
--- a/src/lib-storage/index/maildir/maildir-util.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/index/maildir/maildir-util.c Sun Jun 24 00:52:57 2012 +0300 @@ -44,13 +44,13 @@ mail_index_lookup_view_flags(view, seq, &flags, &keywords); if (array_count(&keywords) == 0) { *have_flags_r = (flags & MAIL_FLAGS_NONRECENT) != 0; - fname = maildir_filename_flags_set(NULL, fname, flags, NULL); + fname = maildir_filename_flags_set(fname, flags); } else { *have_flags_r = TRUE; kw_ctx = maildir_keywords_sync_init_readonly(mbox->keywords, mbox->box.index); - fname = maildir_filename_flags_set(kw_ctx, fname, - flags, &keywords); + fname = maildir_filename_flags_kw_set(kw_ctx, fname, + flags, &keywords); maildir_keywords_sync_deinit(&kw_ctx); }
--- a/src/lib-storage/index/mbox/mbox-file.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/index/mbox/mbox-file.c Sun Jun 24 00:52:57 2012 +0300 @@ -77,7 +77,7 @@ if (mbox->mbox_writeonly) { mbox->mbox_file_stream = - i_stream_create_from_data(NULL, 0); + i_stream_create_from_data("", 0); } else { mbox->mbox_file_stream = i_stream_create_fd(mbox->mbox_fd,
--- a/src/lib-storage/index/mbox/mbox-lock.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/index/mbox/mbox-lock.c Sun Jun 24 00:52:57 2012 +0300 @@ -246,9 +246,10 @@ return TRUE; } -static int mbox_dotlock_privileged_op(struct mbox_mailbox *mbox, - struct dotlock_settings *set, - enum mbox_dotlock_op op) +static int ATTR_NULL(2) +mbox_dotlock_privileged_op(struct mbox_mailbox *mbox, + struct dotlock_settings *set, + enum mbox_dotlock_op op) { const char *box_path, *dir, *fname; int ret = -1, orig_dir_fd, orig_errno; @@ -357,8 +358,8 @@ mail_storage_set_critical(&mbox->storage->storage, "%s (not INBOX -> no privileged locking)", errmsg); } else if (!mbox->mbox_privileged_locking) { - dir = mailbox_list_get_path(mbox->box.list, NULL, - MAILBOX_LIST_PATH_TYPE_DIR); + dir = mailbox_list_get_root_path(mbox->box.list, + MAILBOX_LIST_PATH_TYPE_DIR); mail_storage_set_critical(&mbox->storage->storage, "%s (under root dir %s -> no privileged locking)", errmsg, dir);
--- a/src/lib-storage/index/mbox/mbox-mail.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/index/mbox/mbox-mail.c Sun Jun 24 00:52:57 2012 +0300 @@ -153,6 +153,7 @@ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; struct mbox_mailbox *mbox = (struct mbox_mailbox *)mail->mail.mail.box; const void *ext_data; + bool expunged; if (mail->data.guid != NULL) { *value_r = mail->data.guid; @@ -161,7 +162,7 @@ mail_index_lookup_ext(mail->mail.mail.transaction->view, mail->mail.mail.seq, mbox->md5hdr_ext_idx, - &ext_data, NULL); + &ext_data, &expunged); if (ext_data != NULL && memcmp(ext_data, empty_md5, 16) != 0) { mail->data.guid = p_strdup(mail->data_pool, binary_to_hex(ext_data, 16));
--- a/src/lib-storage/index/mbox/mbox-storage.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/index/mbox/mbox-storage.c Sun Jun 24 00:52:57 2012 +0300 @@ -136,8 +136,7 @@ storage->set = mail_storage_get_driver_settings(_storage); - dir = mailbox_list_get_path(ns->list, NULL, - MAILBOX_LIST_PATH_TYPE_INDEX); + dir = mailbox_list_get_root_path(ns->list, MAILBOX_LIST_PATH_TYPE_INDEX); if (*dir != '\0') { _storage->temp_path_prefix = p_strconcat(_storage->pool, dir, "/", mailbox_list_get_temp_prefix(ns->list), NULL); @@ -411,8 +410,8 @@ if (box->inbox_any || strcmp(box->name, "INBOX") == 0) { /* if INBOX isn't under the root directory, it's probably in /var/mail and we want to allow privileged dotlocking */ - rootdir = mailbox_list_get_path(box->list, NULL, - MAILBOX_LIST_PATH_TYPE_DIR); + rootdir = mailbox_list_get_root_path(box->list, + MAILBOX_LIST_PATH_TYPE_DIR); if (strncmp(box_path, rootdir, strlen(rootdir)) != 0) mbox->mbox_privileged_locking = TRUE; }
--- a/src/lib-storage/index/mbox/mbox-sync-parse.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/index/mbox/mbox-sync-parse.c Sun Jun 24 00:52:57 2012 +0300 @@ -548,6 +548,7 @@ struct header_func *func; struct mbox_md5_context *mbox_md5_ctx; const void *data; + bool expunged; uint32_t uid; int ret; @@ -595,7 +596,8 @@ /* match by MD5 sum */ mbox->mbox_save_md5 = TRUE; - mail_index_lookup_ext(view, seq, mbox->md5hdr_ext_idx, &data, NULL); + mail_index_lookup_ext(view, seq, mbox->md5hdr_ext_idx, + &data, &expunged); return data == NULL ? 0 : memcmp(data, ctx.hdr_md5_sum, 16) == 0; }
--- a/src/lib-storage/index/mbox/mbox-sync.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/index/mbox/mbox-sync.c Sun Jun 24 00:52:57 2012 +0300 @@ -244,6 +244,7 @@ const struct mail_index_record *rec = NULL; uint32_t messages_count; const void *data; + bool expunged; if (sync_ctx->index_reset) { *rec_r = NULL; @@ -257,7 +258,7 @@ mail_index_lookup_ext(sync_ctx->sync_view, sync_ctx->idx_seq, sync_ctx->mbox->md5hdr_ext_idx, - &data, NULL); + &data, &expunged); if (data != NULL && memcmp(data, hdr_md5_sum, 16) == 0) break; @@ -277,12 +278,13 @@ { const void *data; uint64_t offset; + bool expunged; if (!nocheck) { /* see if from_offset needs updating */ mail_index_lookup_ext(sync_ctx->sync_view, sync_ctx->idx_seq, sync_ctx->mbox->mbox_ext_idx, - &data, NULL); + &data, &expunged); if (data != NULL && *((const uint64_t *)data) == mail->from_offset) return; @@ -314,9 +316,11 @@ { struct mbox_sync_context *sync_ctx = mail_ctx->sync_ctx; const void *ext_data; + bool expunged; mail_index_lookup_ext(sync_ctx->sync_view, sync_ctx->idx_seq, - sync_ctx->mbox->md5hdr_ext_idx, &ext_data, NULL); + sync_ctx->mbox->md5hdr_ext_idx, + &ext_data, &expunged); if (ext_data == NULL || memcmp(mail_ctx->hdr_md5_sum, ext_data, 16) != 0) { mail_index_update_ext(sync_ctx->t, sync_ctx->idx_seq, @@ -1412,8 +1416,7 @@ { const char *path; - path = mailbox_list_get_path(list, NULL, - MAILBOX_LIST_PATH_TYPE_CONTROL); + path = mailbox_list_get_root_path(list, MAILBOX_LIST_PATH_TYPE_CONTROL); path = t_strconcat(path, "/"MBOX_UIDVALIDITY_FNAME, NULL); return mailbox_uidvalidity_next(list, path); }
--- a/src/lib-storage/index/raw/raw-storage.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/index/raw/raw-storage.c Sun Jun 24 00:52:57 2012 +0300 @@ -40,7 +40,7 @@ return user; } -static int +static int ATTR_NULL(2, 3) raw_mailbox_alloc_common(struct mail_user *user, struct istream *input, const char *path, time_t received_time, const char *envelope_sender, struct mailbox **box_r) @@ -125,7 +125,7 @@ mbox->box.list = list; mbox->box.mail_vfuncs = &raw_mail_vfuncs; - index_storage_mailbox_alloc(&mbox->box, vname, flags, NULL); + index_storage_mailbox_alloc(&mbox->box, vname, flags, "dovecot.index"); mbox->mtime = mbox->ctime = (time_t)-1; mbox->storage = (struct raw_storage *)storage;
--- a/src/lib-storage/index/shared/shared-storage.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/index/shared/shared-storage.c Sun Jun 24 00:52:57 2012 +0300 @@ -125,7 +125,7 @@ const char *path; struct stat st; - path = mailbox_list_get_path(ns->list, NULL, MAILBOX_LIST_PATH_TYPE_DIR); + path = mailbox_list_get_root_path(ns->list, MAILBOX_LIST_PATH_TYPE_DIR); if (path == NULL) { /* we can't know if this exists */ return TRUE;
--- a/src/lib-storage/list/mailbox-list-delete.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/list/mailbox-list-delete.c Sun Jun 24 00:52:57 2012 +0300 @@ -19,8 +19,7 @@ { const char *root_dir; - root_dir = mailbox_list_get_path(list, NULL, - MAILBOX_LIST_PATH_TYPE_DIR); + root_dir = mailbox_list_get_root_path(list, MAILBOX_LIST_PATH_TYPE_DIR); if (strcmp(root_dir, path) != 0) return 0; @@ -242,7 +241,7 @@ const char *root_dir, *p; unsigned int len; - root_dir = mailbox_list_get_path(list, NULL, type); + root_dir = mailbox_list_get_root_path(list, type); if (strncmp(path, root_dir, strlen(root_dir)) != 0) { /* mbox workaround: name=child/box, root_dir=mail/.imap/, path=mail/child/.imap/box. we'll want to try to delete
--- a/src/lib-storage/list/mailbox-list-fs-iter.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/list/mailbox-list-fs-iter.c Sun Jun 24 00:52:57 2012 +0300 @@ -97,8 +97,8 @@ string_t *dest = t_str_new(128); const char *root, *src; - root = mailbox_list_get_path(ctx->ctx.list, NULL, - MAILBOX_LIST_PATH_TYPE_MAILBOX); + root = mailbox_list_get_root_path(ctx->ctx.list, + MAILBOX_LIST_PATH_TYPE_MAILBOX); src = t_strconcat(root, "/", storage_name, NULL); (void)uni_utf8_get_valid_data((const void *)storage_name, @@ -153,8 +153,8 @@ } if (strcmp(d->d_name, ctx->ctx.list->set.subscription_fname) == 0) { /* if this is the subscriptions file, skip it */ - root_dir = mailbox_list_get_path(ctx->ctx.list, NULL, - MAILBOX_LIST_PATH_TYPE_DIR); + root_dir = mailbox_list_get_root_path(ctx->ctx.list, + MAILBOX_LIST_PATH_TYPE_DIR); if (strcmp(root_dir, dir_path) == 0) return 0; } @@ -229,8 +229,8 @@ } if (*path != '/') { /* non-absolute path. add the mailbox root dir as prefix. */ - root = mailbox_list_get_path(ctx->ctx.list, NULL, - MAILBOX_LIST_PATH_TYPE_MAILBOX); + root = mailbox_list_get_root_path(ctx->ctx.list, + MAILBOX_LIST_PATH_TYPE_MAILBOX); path = *path == '\0' ? root : t_strconcat(root, "/", path, NULL); }
--- a/src/lib-storage/list/mailbox-list-fs.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/list/mailbox-list-fs.c Sun Jun 24 00:52:57 2012 +0300 @@ -150,7 +150,7 @@ if (name == NULL) { /* return root directories */ - return mailbox_list_get_root_path(set, type); + return mailbox_list_set_get_root_path(set, type); } i_assert(mailbox_list_is_valid_pattern(_list, name)); @@ -318,8 +318,7 @@ { const char *root_dir; - root_dir = mailbox_list_get_path(list, NULL, - MAILBOX_LIST_PATH_TYPE_DIR); + root_dir = mailbox_list_get_root_path(list, MAILBOX_LIST_PATH_TYPE_DIR); return t_strdup_printf("%s/"MAILBOX_LIST_FS_TRASH_DIR_NAME, root_dir); } @@ -514,8 +513,7 @@ newpath = mailbox_list_get_path(newlist, newname, path_type); alt_newpath = mailbox_list_get_path(newlist, newname, alt_path_type); - root_path = mailbox_list_get_path(oldlist, NULL, - MAILBOX_LIST_PATH_TYPE_MAILBOX); + root_path = mailbox_list_get_root_path(oldlist, MAILBOX_LIST_PATH_TYPE_MAILBOX); if (strcmp(oldpath, root_path) == 0) { /* most likely INBOX */ mailbox_list_set_error(oldlist, MAIL_ERROR_NOTPOSSIBLE,
--- a/src/lib-storage/list/mailbox-list-index-status.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/list/mailbox-list-index-status.c Sun Jun 24 00:52:57 2012 +0300 @@ -60,7 +60,7 @@ return 1; } -static bool +static bool ATTR_NULL(6) index_list_get_view_status(struct mailbox *box, struct mail_index_view *view, uint32_t seq, enum mailbox_status_items items, struct mailbox_status *status_r,
--- a/src/lib-storage/list/mailbox-list-index.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/list/mailbox-list-index.c Sun Jun 24 00:52:57 2012 +0300 @@ -355,7 +355,7 @@ struct mailbox_list_index *ilist; const char *dir; - dir = mailbox_list_get_path(list, NULL, MAILBOX_LIST_PATH_TYPE_INDEX); + dir = mailbox_list_get_root_path(list, MAILBOX_LIST_PATH_TYPE_INDEX); if (!list->mail_set->mailbox_list_index) { /* reserve the module context anyway, so syncing code knows that the index is disabled */
--- a/src/lib-storage/list/mailbox-list-maildir.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/list/mailbox-list-maildir.c Sun Jun 24 00:52:57 2012 +0300 @@ -193,7 +193,7 @@ if (name == NULL) { /* return root directories */ - return mailbox_list_get_root_path(&_list->set, type); + return mailbox_list_set_get_root_path(&_list->set, type); } if (_list->mail_set->mail_full_filesystem_access && @@ -334,8 +334,7 @@ path = t_strdup_until(path, p); } - root_dir = mailbox_list_get_path(list, NULL, - MAILBOX_LIST_PATH_TYPE_MAILBOX); + root_dir = mailbox_list_get_root_path(list, MAILBOX_LIST_PATH_TYPE_MAILBOX); mailbox_list_get_permissions(list, name, &perm); if (mkdir_parents_chgrp(path, perm.dir_create_mode, perm.file_create_gid, @@ -375,8 +374,7 @@ (struct maildir_mailbox_list *)_list; const char *root_dir; - root_dir = mailbox_list_get_path(_list, NULL, - MAILBOX_LIST_PATH_TYPE_DIR); + root_dir = mailbox_list_get_root_path(_list, MAILBOX_LIST_PATH_TYPE_DIR); return t_strdup_printf("%s/%c%c"MAILBOX_LIST_MAILDIR_TRASH_DIR_NAME, root_dir, list->sep, list->sep); } @@ -571,8 +569,8 @@ newpath = mailbox_list_get_path(newlist, newname, MAILBOX_LIST_PATH_TYPE_MAILBOX); - root_path = mailbox_list_get_path(oldlist, NULL, - MAILBOX_LIST_PATH_TYPE_MAILBOX); + root_path = mailbox_list_get_root_path(oldlist, + MAILBOX_LIST_PATH_TYPE_MAILBOX); if (strcmp(oldpath, root_path) == 0) { /* most likely INBOX */ mailbox_list_set_error(oldlist, MAIL_ERROR_NOTPOSSIBLE,
--- a/src/lib-storage/mail-namespace.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/mail-namespace.h Sun Jun 24 00:52:57 2012 +0300 @@ -74,7 +74,7 @@ int mail_namespaces_init(struct mail_user *user, const char **error_r); int mail_namespaces_init_location(struct mail_user *user, const char *location, - const char **error_r); + const char **error_r) ATTR_NULL(2); struct mail_namespace *mail_namespaces_init_empty(struct mail_user *user); /* Deinitialize all namespaces. mail_user_deinit() calls this automatically for user's namespaces. */
--- a/src/lib-storage/mail-search.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/mail-search.h Sun Jun 24 00:52:57 2012 +0300 @@ -123,7 +123,8 @@ change uidsets to seqsets. */ void mail_search_args_init(struct mail_search_args *args, struct mailbox *box, bool change_uidsets, - const ARRAY_TYPE(seq_range) *search_saved_uidset); + const ARRAY_TYPE(seq_range) *search_saved_uidset) + ATTR_NULL(4); /* Free keywords. The args can initialized afterwards again if needed. The args can be reused for other queries after calling this. */ void mail_search_args_deinit(struct mail_search_args *args); @@ -149,7 +150,7 @@ Returns 1 = search matched, 0 = search unmatched, -1 = don't know yet */ int mail_search_args_foreach(struct mail_search_arg *args, mail_search_foreach_callback_t *callback, - void *context); + void *context) ATTR_NULL(3); #ifdef CONTEXT_TYPE_SAFETY # define mail_search_args_foreach(args, callback, context) \ ({(void)(1 ? 0 : callback((struct mail_search_arg *)NULL, context)); \
--- a/src/lib-storage/mail-storage-service.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/mail-storage-service.c Sun Jun 24 00:52:57 2012 +0300 @@ -1208,7 +1208,7 @@ (void)auth_master_user_list_deinit(&ctx->auth_list); mail_storage_service_init_settings(ctx, NULL); - ctx->auth_list = auth_master_user_list_init(ctx->conn, NULL, NULL); + ctx->auth_list = auth_master_user_list_init(ctx->conn, "", NULL); return auth_master_user_list_count(ctx->auth_list); }
--- a/src/lib-storage/mail-storage-service.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/mail-storage-service.h Sun Jun 24 00:52:57 2012 +0300 @@ -59,7 +59,7 @@ struct mail_storage_service_ctx * mail_storage_service_init(struct master_service *service, const struct setting_parser_info *set_roots[], - enum mail_storage_service_flags flags); + enum mail_storage_service_flags flags) ATTR_NULL(2); struct auth_master_connection * mail_storage_service_get_auth_conn(struct mail_storage_service_ctx *ctx); int mail_storage_service_read_settings(struct mail_storage_service_ctx *ctx, @@ -67,12 +67,13 @@ pool_t pool, const struct setting_parser_info **user_info_r, const struct setting_parser_context **parser_r, - const char **error_r); + const char **error_r) ATTR_NULL(2); /* Read settings and initialize context to use them. Do nothing if service is already initialized. This is mainly necessary when calling _get_auth_conn() or _all_init(). */ void mail_storage_service_init_settings(struct mail_storage_service_ctx *ctx, - const struct mail_storage_service_input *input); + const struct mail_storage_service_input *input) + ATTR_NULL(2); /* Returns 1 if ok, 0 if user wasn't found, -1 if fatal error, -2 if error is user-specific (e.g. invalid settings). Error can be safely shown to untrusted users. */
--- a/src/lib-storage/mail-storage.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/mail-storage.c Sun Jun 24 00:52:57 2012 +0300 @@ -234,8 +234,7 @@ bool autocreate; int ret; - root_dir = mailbox_list_get_path(list, NULL, - MAILBOX_LIST_PATH_TYPE_MAILBOX); + root_dir = mailbox_list_get_root_path(list, MAILBOX_LIST_PATH_TYPE_MAILBOX); if (root_dir == NULL) { /* storage doesn't use directories (e.g. shared root) */ return 0; @@ -860,7 +859,8 @@ return ret; } -static int mailbox_open_full(struct mailbox *box, struct istream *input) +static int ATTR_NULL(2) +mailbox_open_full(struct mailbox *box, struct istream *input) { int ret; @@ -1383,7 +1383,10 @@ void mailbox_notify_changes_stop(struct mailbox *box) { - mailbox_notify_changes(box, NULL, NULL); + box->notify_callback = NULL; + box->notify_context = NULL; + + box->v.notify_changes(box); } struct mail_search_context *
--- a/src/lib-storage/mail-storage.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/mail-storage.h Sun Jun 24 00:52:57 2012 +0300 @@ -355,7 +355,8 @@ from ns location. If ns location is NULL, it uses the first storage that exists. The storage is put into ns->storage. */ int mail_storage_create(struct mail_namespace *ns, const char *driver, - enum mail_storage_flags flags, const char **error_r); + enum mail_storage_flags flags, const char **error_r) + ATTR_NULL(2); void mail_storage_unref(struct mail_storage **storage); /* Returns the mail storage settings. */ @@ -366,7 +367,7 @@ /* Set storage callback functions to use. */ void mail_storage_set_callbacks(struct mail_storage *storage, struct mail_storage_callbacks *callbacks, - void *context); + void *context) ATTR_NULL(3); /* Purge storage's mailboxes (freeing disk space from expunged mails), if supported by the storage. Otherwise just a no-op. */ @@ -374,10 +375,10 @@ /* Returns the error message of last occurred error. */ const char *mail_storage_get_last_error(struct mail_storage *storage, - enum mail_error *error_r); + enum mail_error *error_r) ATTR_NULL(2); /* Wrapper for mail_storage_get_last_error(); */ const char *mailbox_get_last_error(struct mailbox *box, - enum mail_error *error_r); + enum mail_error *error_r) ATTR_NULL(2); /* Wrapper for mail_storage_get_last_error(); */ enum mail_error mailbox_get_last_mail_error(struct mailbox *box); @@ -415,7 +416,7 @@ If update is non-NULL, its contents are used to set initial mailbox metadata. */ int mailbox_create(struct mailbox *box, const struct mailbox_update *update, - bool directory); + bool directory) ATTR_NULL(2); /* Update existing mailbox's metadata. */ int mailbox_update(struct mailbox *box, const struct mailbox_update *update); /* Delete mailbox (and its parent directory, if it has no siblings) */ @@ -495,7 +496,8 @@ /* Call given callback function when something changes in the mailbox. */ void mailbox_notify_changes(struct mailbox *box, - mailbox_notify_callback_t *callback, void *context); + mailbox_notify_callback_t *callback, void *context) + ATTR_NULL(3); #ifdef CONTEXT_TYPE_SAFETY # define mailbox_notify_changes(box, callback, context) \ ({(void)(1 ? 0 : callback((struct mailbox *)NULL, context)); \ @@ -558,7 +560,7 @@ /* Initialize new search request. If sort_program is non-NULL, the messages are returned in the requested order, otherwise from first to last. */ -struct mail_search_context * +struct mail_search_context * ATTR_NULL(3, 5) mailbox_search_init(struct mailbox_transaction_context *t, struct mail_search_args *args, const enum mail_sort_type *sort_program, @@ -689,7 +691,8 @@ struct mail *mail_alloc(struct mailbox_transaction_context *t, enum mail_fetch_field wanted_fields, - struct mailbox_header_lookup_ctx *wanted_headers); + struct mailbox_header_lookup_ctx *wanted_headers) + ATTR_NULL(3); void mail_free(struct mail **mail); void mail_set_seq(struct mail *mail, uint32_t seq); /* Returns TRUE if successful, FALSE if message doesn't exist. @@ -700,7 +703,8 @@ after the next mail_set_seq/uid(). */ void mail_add_temp_wanted_fields(struct mail *mail, enum mail_fetch_field fields, - struct mailbox_header_lookup_ctx *headers); + struct mailbox_header_lookup_ctx *headers) + ATTR_NULL(3); /* Returns message's flags */ enum mail_flags mail_get_flags(struct mail *mail); @@ -758,11 +762,12 @@ hdr_size and body_size are updated unless they're NULL. The returned stream is destroyed automatically, don't unreference it. */ int mail_get_stream(struct mail *mail, struct message_size *hdr_size, - struct message_size *body_size, struct istream **stream_r); + struct message_size *body_size, struct istream **stream_r) + ATTR_NULL(2, 3); /* Similar to mail_get_stream(), but the stream may or may not contain the message body. */ int mail_get_hdr_stream(struct mail *mail, struct message_size *hdr_size, - struct istream **stream_r); + struct istream **stream_r) ATTR_NULL(2); /* Get any of the "special" fields. Unhandled specials are returned as "". */ int mail_get_special(struct mail *mail, enum mail_fetch_field field,
--- a/src/lib-storage/mail-thread.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/mail-thread.h Sun Jun 24 00:52:57 2012 +0300 @@ -28,7 +28,7 @@ /* Build thread from given search arguments. args=NULL searches everything. */ int mail_thread_init(struct mailbox *box, struct mail_search_args *args, - struct mail_thread_context **ctx_r); + struct mail_thread_context **ctx_r) ATTR_NULL(2); void mail_thread_deinit(struct mail_thread_context **ctx); /* Iterate through thread tree. If write_seqs=TRUE, sequences are returned in
--- a/src/lib-storage/mail.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/mail.c Sun Jun 24 00:52:57 2012 +0300 @@ -110,10 +110,6 @@ int mail_get_date(struct mail *mail, time_t *date_r, int *timezone_r) { struct mail_private *p = (struct mail_private *)mail; - int tz; - - if (timezone_r == NULL) - timezone_r = &tz; return p->v.get_date(mail, date_r, timezone_r); }
--- a/src/lib-storage/mailbox-get.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/mailbox-get.c Sun Jun 24 00:52:57 2012 +0300 @@ -150,7 +150,7 @@ } } -static bool +static bool ATTR_NULL(4, 5) mailbox_get_expunges_full(struct mailbox *box, uint64_t prev_modseq, const ARRAY_TYPE(seq_range) *uids_filter, ARRAY_TYPE(seq_range) *expunged_uids,
--- a/src/lib-storage/mailbox-list-private.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/mailbox-list-private.h Sun Jun 24 00:52:57 2012 +0300 @@ -181,8 +181,8 @@ const char *mailbox_list_get_unexpanded_path(struct mailbox_list *list, enum mailbox_list_path_type type); const char * -mailbox_list_get_root_path(const struct mailbox_list_settings *set, - enum mailbox_list_path_type type); +mailbox_list_set_get_root_path(const struct mailbox_list_settings *set, + enum mailbox_list_path_type type); int mailbox_list_delete_index_control(struct mailbox_list *list, const char *name); @@ -195,7 +195,7 @@ bool mailbox_list_try_get_absolute_path(struct mailbox_list *list, const char **name); int mailbox_list_create_missing_index_dir(struct mailbox_list *list, - const char *name); + const char *name) ATTR_NULL(2); int mailbox_list_create_missing_index_pvt_dir(struct mailbox_list *list, const char *name);
--- a/src/lib-storage/mailbox-list.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/mailbox-list.c Sun Jun 24 00:52:57 2012 +0300 @@ -357,7 +357,7 @@ if (mailbox_list_settings_parse(user, p + 1, &set, &error) < 0) return ""; - return mailbox_list_get_root_path(&set, type); + return mailbox_list_set_get_root_path(&set, type); } static const char * @@ -634,8 +634,10 @@ return list->v.get_hierarchy_sep(list); } -void mailbox_list_get_permissions(struct mailbox_list *list, const char *name, - struct mailbox_permissions *permissions_r) +static void ATTR_NULL(2) +mailbox_list_get_permissions_internal(struct mailbox_list *list, + const char *name, + struct mailbox_permissions *permissions_r) { const char *path, *parent_name, *p; struct stat st; @@ -650,7 +652,9 @@ permissions_r->file_create_gid = (gid_t)-1; permissions_r->file_create_gid_origin = "defaults"; - path = mailbox_list_get_path(list, name, MAILBOX_LIST_PATH_TYPE_DIR); + path = name == NULL ? + mailbox_list_get_root_path(list, MAILBOX_LIST_PATH_TYPE_DIR) : + mailbox_list_get_path(list, name, MAILBOX_LIST_PATH_TYPE_DIR); if (path == NULL) { /* no filesystem support in storage */ } else if (stat(path, &st) < 0) { @@ -728,6 +732,12 @@ } } +void mailbox_list_get_permissions(struct mailbox_list *list, const char *name, + struct mailbox_permissions *permissions_r) +{ + mailbox_list_get_permissions_internal(list, name, permissions_r); +} + void mailbox_list_get_root_permissions(struct mailbox_list *list, mode_t *file_mode_r, mode_t *dir_mode_r, gid_t *gid_r, const char **gid_origin_r) @@ -740,7 +750,7 @@ *gid_r = list->file_create_gid; *gid_origin_r = list->file_create_gid_origin; } else { - mailbox_list_get_permissions(list, NULL, &perm); + mailbox_list_get_permissions_internal(list, NULL, &perm); *file_mode_r = perm.file_create_mode; *dir_mode_r = perm.dir_create_mode; @@ -848,7 +858,7 @@ if (p == unexpanded) expanded = ""; else { - expanded = mailbox_list_get_path(list, NULL, type); + expanded = mailbox_list_get_root_path(list, type); expanded = get_expanded_path(unexpanded, p, expanded); } } @@ -944,9 +954,15 @@ return list->v.get_path(list, name, type); } +const char *mailbox_list_get_root_path(struct mailbox_list *list, + enum mailbox_list_path_type type) +{ + return list->v.get_path(list, NULL, type); +} + const char * -mailbox_list_get_root_path(const struct mailbox_list_settings *set, - enum mailbox_list_path_type type) +mailbox_list_set_get_root_path(const struct mailbox_list_settings *set, + enum mailbox_list_path_type type) { const char *path; @@ -1073,8 +1089,7 @@ return mailbox_list_iter_deinit(&iter); } - rootdir = mailbox_list_get_path(list, NULL, - MAILBOX_LIST_PATH_TYPE_MAILBOX); + rootdir = mailbox_list_get_root_path(list, MAILBOX_LIST_PATH_TYPE_MAILBOX); i_assert(rootdir != NULL); path = mailbox_list_get_path(list, name, MAILBOX_LIST_PATH_TYPE_DIR); @@ -1126,7 +1141,7 @@ /* don't do this in mailbox_list_create(), because _get_path() might be overridden by storage (mbox). */ - path = mailbox_list_get_path(list, NULL, MAILBOX_LIST_PATH_TYPE_INDEX); + path = mailbox_list_get_root_path(list, MAILBOX_LIST_PATH_TYPE_INDEX); if (*path == '\0') return FALSE; @@ -1325,8 +1340,7 @@ /* okay, we have an absolute path now. but check first if it points to same directory as one of our regular mailboxes. */ - root_dir = mailbox_list_get_path(list, NULL, - MAILBOX_LIST_PATH_TYPE_MAILBOX); + root_dir = mailbox_list_get_root_path(list, MAILBOX_LIST_PATH_TYPE_MAILBOX); len = strlen(root_dir); if (strncmp(root_dir, *name, len) == 0 && (*name)[len] == '/') { mailbox_name = *name + len + 1; @@ -1347,7 +1361,15 @@ { struct mailbox_permissions perm; - mailbox_list_get_permissions(list, mailbox, &perm); + if (mailbox != NULL) + mailbox_list_get_permissions(list, mailbox, &perm); + else { + mailbox_list_get_root_permissions(list, + &perm.file_create_mode, + &perm.dir_create_mode, + &perm.file_create_gid, + &perm.file_create_gid_origin); + } if (mkdir_parents_chgrp(path, perm.dir_create_mode, perm.file_create_gid, perm.file_create_gid_origin) < 0 && @@ -1371,16 +1393,17 @@ return mailbox_list_mkdir(list, mailbox, t_strdup_until(path, p)); } -static int mailbox_list_create_missing_dir(struct mailbox_list *list, - const char *name, - enum mailbox_list_path_type type) +static int ATTR_NULL(2) +mailbox_list_create_missing_dir(struct mailbox_list *list, const char *name, + enum mailbox_list_path_type type) { const char *root_dir, *index_dir, *parent_dir, *p, *error; struct mailbox_permissions perm; unsigned int n = 0; - root_dir = mailbox_list_get_path(list, name, - MAILBOX_LIST_PATH_TYPE_MAILBOX); + root_dir = name == NULL ? + mailbox_list_get_root_path(list, MAILBOX_LIST_PATH_TYPE_MAILBOX) : + mailbox_list_get_path(list, name, MAILBOX_LIST_PATH_TYPE_MAILBOX); index_dir = mailbox_list_get_path(list, name, type); if (index_dir == NULL || *index_dir == '\0') return 0;
--- a/src/lib-storage/mailbox-list.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/mailbox-list.h Sun Jun 24 00:52:57 2012 +0300 @@ -213,12 +213,13 @@ gid_t *gid_r, const char **gid_origin_r); /* Create path's directory with proper permissions. */ int mailbox_list_mkdir(struct mailbox_list *list, - const char *mailbox, const char *path); + const char *mailbox, const char *path) ATTR_NULL(2); /* Like mailbox_list_mkdir(), but create path's parent parent directory. Since most directories are created lazily, this function can be used to easily create them whenever file creation fails with ENOENT. */ int mailbox_list_mkdir_parent(struct mailbox_list *list, - const char *mailbox, const char *path); + const char *mailbox, const char *path) + ATTR_NULL(2); /* mkdir() a root directory of given type with proper permissions. */ int mailbox_list_mkdir_root(struct mailbox_list *list, const char *path, enum mailbox_list_path_type type, @@ -238,10 +239,12 @@ const char *mailbox_list_get_vname(struct mailbox_list *list, const char *name); /* Return full path for the given mailbox name. The name must be a valid - existing mailbox name, or NULL to get the root directory. - For INDEX=MEMORY it returns "" as the path. */ + existing mailbox name. For INDEX=MEMORY it returns "" as the path. */ const char *mailbox_list_get_path(struct mailbox_list *list, const char *name, enum mailbox_list_path_type type); +/* Returns root directory path for given type. */ +const char *mailbox_list_get_root_path(struct mailbox_list *list, + enum mailbox_list_path_type type); /* Returns mailbox's change log, or NULL if it doesn't have one. */ struct mailbox_log *mailbox_list_get_changelog(struct mailbox_list *list); /* Specify timestamp to use when writing mailbox changes to changelog.
--- a/src/lib-storage/mailbox-tree.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/mailbox-tree.c Sun Jun 24 00:52:57 2012 +0300 @@ -62,7 +62,7 @@ tree->nodes = NULL; } -static struct mailbox_node * +static struct mailbox_node * ATTR_NULL(2) mailbox_tree_traverse(struct mailbox_tree_context *tree, const char *path, bool create, bool *created_r) { @@ -138,8 +138,7 @@ if (created && tree->parents_nonexistent) node->flags = 0; - if (created_r != NULL) - *created_r = created; + *created_r = created; return node; } @@ -163,7 +162,7 @@ ctx = i_new(struct mailbox_tree_iterate_context, 1); ctx->separator = tree->separator; - ctx->root = root != NULL ? root : mailbox_tree_get(tree, NULL, NULL); + ctx->root = root != NULL ? root : tree->nodes; ctx->flags_mask = flags_mask; ctx->path_str = str_new(default_pool, 256); i_array_init(&ctx->node_path, 16);
--- a/src/lib-storage/mailbox-tree.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-storage/mailbox-tree.h Sun Jun 24 00:52:57 2012 +0300 @@ -27,7 +27,7 @@ struct mailbox_node * mailbox_tree_lookup(struct mailbox_tree_context *tree, const char *path); -struct mailbox_tree_iterate_context * +struct mailbox_tree_iterate_context * ATTR_NULL(2) mailbox_tree_iterate_init(struct mailbox_tree_context *tree, struct mailbox_node *root, unsigned int flags_mask); struct mailbox_node *
--- a/src/lib-test/test-common.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib-test/test-common.h Sun Jun 24 00:52:57 2012 +0300 @@ -15,7 +15,8 @@ void test_end(void); void test_out(const char *name, bool success); -void test_out_reason(const char *name, bool success, const char *reason); +void test_out_reason(const char *name, bool success, const char *reason) + ATTR_NULL(3); int test_run(void (*test_functions[])(void));
--- a/src/lib/base64.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib/base64.h Sun Jun 24 00:52:57 2012 +0300 @@ -15,7 +15,7 @@ If src_pos is non-NULL, it's updated to first non-translated character in src. */ int base64_decode(const void *src, size_t src_size, - size_t *src_pos_r, buffer_t *dest); + size_t *src_pos_r, buffer_t *dest) ATTR_NULL(3); /* Decode given string to a buffer allocated from data stack. */ buffer_t *t_base64_decode_str(const char *str);
--- a/src/lib/buffer.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib/buffer.h Sun Jun 24 00:52:57 2012 +0300 @@ -73,7 +73,8 @@ /* Like buffer_get_data(), but don't return it as const. Returns NULL if the buffer is non-modifiable. WARNING: The returned address may become invalid if you add more data to buffer. */ -void *buffer_get_modifiable_data(const buffer_t *buf, size_t *used_size_r); +void *buffer_get_modifiable_data(const buffer_t *buf, size_t *used_size_r) + ATTR_NULL(2); /* Set the "used size" of buffer, ie. 0 would set the buffer empty. Must not be used to grow buffer. */ @@ -87,7 +88,7 @@ /* Returns pointer to beginning of buffer data. Current used size of buffer is stored in used_size if it's non-NULL. */ -static inline const void * +static inline const void * ATTR_NULL(2) buffer_get_data(const buffer_t *buf, size_t *used_size_r) { if (used_size_r != NULL)
--- a/src/lib/child-wait.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib/child-wait.h Sun Jun 24 00:52:57 2012 +0300 @@ -13,7 +13,7 @@ struct child_wait * child_wait_new_with_pid(pid_t pid, child_wait_callback_t *callback, - void *context); + void *context) ATTR_NULL(3); #ifdef CONTEXT_TYPE_SAFETY # define child_wait_new_with_pid(pid, callback, context) \ ({(void)(1 ? 0 : callback((const struct child_wait_status *)0, \
--- a/src/lib/eacces-error.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib/eacces-error.h Sun Jun 24 00:52:57 2012 +0300 @@ -8,6 +8,7 @@ failures when only the group is being changed. gid_origin specifies why exactly this group is being used. */ const char *eperm_error_get_chgrp(const char *func, const char *path, - gid_t gid, const char *gid_origin); + gid_t gid, const char *gid_origin) + ATTR_NULL(4); #endif
--- a/src/lib/failures.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib/failures.c Sun Jun 24 00:52:57 2012 +0300 @@ -342,29 +342,21 @@ void i_set_fatal_handler(failure_callback_t *callback ATTR_NORETURN) { - if (callback == NULL) - callback = default_fatal_handler; fatal_handler = callback; } void i_set_error_handler(failure_callback_t *callback) { - if (callback == NULL) - callback = default_error_handler; error_handler = callback; } void i_set_info_handler(failure_callback_t *callback) { - if (callback == NULL) - callback = default_error_handler; info_handler = callback; } void i_set_debug_handler(failure_callback_t *callback) { - if (callback == NULL) - callback = default_error_handler; debug_handler = callback; } @@ -504,10 +496,10 @@ log_info_fd = log_fd; log_debug_fd = log_fd; - i_set_fatal_handler(NULL); - i_set_error_handler(NULL); - i_set_info_handler(NULL); - i_set_debug_handler(NULL); + i_set_fatal_handler(default_fatal_handler); + i_set_error_handler(default_error_handler); + i_set_info_handler(default_error_handler); + i_set_debug_handler(default_error_handler); } static void i_failure_send_option(const char *key, const char *value) @@ -680,7 +672,7 @@ /* write debug-level messages to the info_log_path, until i_set_debug_file() was called */ log_debug_fd = log_info_fd; - i_set_debug_handler(NULL); + i_set_debug_handler(default_error_handler); } void i_set_debug_file(const char *path)
--- a/src/lib/file-dotlock.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib/file-dotlock.c Sun Jun 24 00:52:57 2012 +0300 @@ -800,7 +800,7 @@ return dotlock->fd; } -static int +static int ATTR_NULL(7) file_dotlock_open_mode_full(const struct dotlock_settings *set, const char *path, enum dotlock_create_flags flags, mode_t mode, uid_t uid, gid_t gid,
--- a/src/lib/hash.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib/hash.c Sun Jun 24 00:52:57 2012 +0300 @@ -171,10 +171,8 @@ if (node == NULL) return FALSE; - if (orig_key != NULL) - *orig_key = node->key; - if (value != NULL) - *value = node->value; + *orig_key = node->key; + *value = node->value; return TRUE; }
--- a/src/lib/hash.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib/hash.h Sun Jun 24 00:52:57 2012 +0300 @@ -14,7 +14,8 @@ be free'd before hash_table_destroy() is called. */ struct hash_table * hash_table_create(pool_t table_pool, pool_t node_pool, unsigned int initial_size, - hash_callback_t *hash_cb, hash_cmp_callback_t *key_compare_cb); + hash_callback_t *hash_cb, hash_cmp_callback_t *key_compare_cb) + ATTR_NULL(4, 5); void hash_table_destroy(struct hash_table **table); /* Remove all nodes from hash table. If free_collisions is TRUE, the memory allocated from node_pool is freed, or discarded with
--- a/src/lib/hash2.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib/hash2.h Sun Jun 24 00:52:57 2012 +0300 @@ -16,7 +16,7 @@ struct hash2_table * hash2_create(unsigned int initial_size, unsigned int value_size, hash2_key_callback_t *key_hash_cb, - hash2_cmp_callback_t *key_compare_cb, void *context); + hash2_cmp_callback_t *key_compare_cb, void *context) ATTR_NULL(5); void hash2_destroy(struct hash2_table **hash); /* Remove all nodes from hash table. */ void hash2_clear(struct hash2_table *hash);
--- a/src/lib/ioloop-notify-fd.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib/ioloop-notify-fd.h Sun Jun 24 00:52:57 2012 +0300 @@ -16,8 +16,9 @@ struct io_notify *notifies; }; -struct io *io_notify_fd_add(struct ioloop_notify_fd_context *ctx, int fd, - io_callback_t *callback, void *context); +struct io * +io_notify_fd_add(struct ioloop_notify_fd_context *ctx, int fd, + io_callback_t *callback, void *context) ATTR_NULL(4); void io_notify_fd_free(struct ioloop_notify_fd_context *ctx, struct io_notify *io);
--- a/src/lib/ioloop.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib/ioloop.c Sun Jun 24 00:52:57 2012 +0300 @@ -189,7 +189,7 @@ timeout_free(timeout); } -static void +static void ATTR_NULL(2) timeout_reset_timeval(struct timeout *timeout, struct timeval *tv_now) { timeout_update_next(timeout, tv_now);
--- a/src/lib/ioloop.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib/ioloop.h Sun Jun 24 00:52:57 2012 +0300 @@ -47,12 +47,13 @@ the behavior will be undefined. */ struct io *io_add(int fd, enum io_condition condition, unsigned int source_linenum, - io_callback_t *callback, void *context); + io_callback_t *callback, void *context) ATTR_NULL(5); #define io_add(fd, condition, callback, context) \ CONTEXT_CALLBACK(io_add, io_callback_t, \ callback, context, fd, condition, __LINE__) -enum io_notify_result io_add_notify(const char *path, io_callback_t *callback, - void *context, struct io **io_r); +enum io_notify_result +io_add_notify(const char *path, io_callback_t *callback, + void *context, struct io **io_r) ATTR_NULL(3); #ifdef CONTEXT_TYPE_SAFETY # define io_add_notify(path, callback, context, io_r) \ ({(void)(1 ? 0 : callback(context)); \ @@ -69,15 +70,16 @@ void io_remove_closed(struct io **io); /* Timeout handlers */ -struct timeout *timeout_add(unsigned int msecs, unsigned int source_linenum, - timeout_callback_t *callback, void *context); +struct timeout * +timeout_add(unsigned int msecs, unsigned int source_linenum, + timeout_callback_t *callback, void *context) ATTR_NULL(4); #define timeout_add(msecs, callback, context) \ CONTEXT_CALLBACK(timeout_add, timeout_callback_t, \ callback, context, msecs, __LINE__), \ (void)COMPILE_ERROR_IF_TRUE(__builtin_constant_p(msecs) && (msecs > 0 && msecs < 1000)) struct timeout * timeout_add_short(unsigned int msecs, unsigned int source_linenum, - timeout_callback_t *callback, void *context); + timeout_callback_t *callback, void *context) ATTR_NULL(4); #define timeout_add_short(msecs, callback, context) \ CONTEXT_CALLBACK(timeout_add_short, timeout_callback_t, \ callback, context, msecs, __LINE__)
--- a/src/lib/iso8601-date.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib/iso8601-date.c Sun Jun 24 00:52:57 2012 +0300 @@ -249,26 +249,28 @@ if (timestamp == (time_t)-1) return FALSE; - if (timezone_offset_r != NULL) - *timezone_offset_r = parser.timezone_offset; - if (tm_r != NULL) - *tm_r = parser.tm; - if (timestamp_r != NULL) - *timestamp_r = timestamp - parser.timezone_offset * 60; + *timezone_offset_r = parser.timezone_offset; + *tm_r = parser.tm; + *timestamp_r = timestamp - parser.timezone_offset * 60; return TRUE; } bool iso8601_date_parse(const unsigned char *data, size_t size, time_t *timestamp_r, int *timezone_offset_r) { - return iso8601_date_do_parse(data, size, NULL, + struct tm tm; + + return iso8601_date_do_parse(data, size, &tm, timestamp_r, timezone_offset_r); } bool iso8601_date_parse_tm(const unsigned char *data, size_t size, struct tm *tm_r, int *timezone_offset_r) { - return iso8601_date_do_parse(data, size, tm_r, NULL, timezone_offset_r); + time_t timestamp; + + return iso8601_date_do_parse(data, size, tm_r, + ×tamp, timezone_offset_r); } const char *iso8601_date_create_tm(struct tm *tm, int timezone_offset)
--- a/src/lib/istream-base64-encoder.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib/istream-base64-encoder.c Sun Jun 24 00:52:57 2012 +0300 @@ -43,7 +43,7 @@ { struct istream_private *stream = &bstream->istream; const unsigned char *data; - size_t size, buffer_avail; + size_t size, avail, buffer_avail; buffer_t buf; data = i_stream_get_data(stream->parent, &size); @@ -53,7 +53,7 @@ if (bstream->cur_line_len == bstream->chars_per_line) { /* @UNSAFE: end of line, add newline */ if (!i_stream_get_buffer_space(stream, - bstream->crlf ? 2 : 1, NULL)) + bstream->crlf ? 2 : 1, &avail)) return FALSE; if (bstream->crlf) @@ -62,7 +62,7 @@ bstream->cur_line_len = 0; } - i_stream_get_buffer_space(stream, (size+2)/3*4, NULL); + (void)i_stream_get_buffer_space(stream, (size+2)/3*4, &avail); buffer_avail = stream->buffer_size - stream->pos; if ((size + 2) / 3 * 4 > buffer_avail) {
--- a/src/lib/istream-chain.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib/istream-chain.c Sun Jun 24 00:52:57 2012 +0300 @@ -28,7 +28,9 @@ struct istream_chain chain; }; -void i_stream_chain_append(struct istream_chain *chain, struct istream *stream) +static void ATTR_NULL(2) +i_stream_chain_append_internal(struct istream_chain *chain, + struct istream *stream) { struct istream_chain_link *link; @@ -55,6 +57,16 @@ DLLIST2_APPEND(&chain->head, &chain->tail, link); } +void i_stream_chain_append(struct istream_chain *chain, struct istream *stream) +{ + return i_stream_chain_append_internal(chain, stream); +} + +void i_stream_chain_append_eof(struct istream_chain *chain) +{ + return i_stream_chain_append_internal(chain, NULL); +} + static void i_stream_chain_set_max_buffer_size(struct iostream_private *stream, size_t max_size)
--- a/src/lib/istream-chain.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib/istream-chain.h Sun Jun 24 00:52:57 2012 +0300 @@ -11,8 +11,10 @@ argument returns a pointer to the chain object. */ struct istream *i_stream_create_chain(struct istream_chain **chain_r); -/* Append an input stream to the chain. A NULL stream marks the end of the chain - and only then reads from the chain stream can return EOF. */ +/* Append an input stream to the chain. */ void i_stream_chain_append(struct istream_chain *chain, struct istream *stream); +/* Mark the end of the chain. Only then reads from the chain stream can + return EOF. */ +void i_stream_chain_append_eof(struct istream_chain *chain); #endif
--- a/src/lib/istream-crlf.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib/istream-crlf.c Sun Jun 24 00:52:57 2012 +0300 @@ -14,7 +14,7 @@ static int i_stream_crlf_read_common(struct crlf_istream *cstream) { struct istream_private *stream = &cstream->istream; - size_t size; + size_t size, avail; ssize_t ret; (void)i_stream_get_data(stream->parent, &size); @@ -30,7 +30,7 @@ i_assert(size != 0); } - if (!i_stream_get_buffer_space(stream, size, NULL)) + if (!i_stream_get_buffer_space(stream, size, &avail)) return -2; return 1; }
--- a/src/lib/istream-private.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib/istream-private.h Sun Jun 24 00:52:57 2012 +0300 @@ -48,7 +48,8 @@ }; struct istream * -i_stream_create(struct istream_private *stream, struct istream *parent, int fd); +i_stream_create(struct istream_private *stream, struct istream *parent, int fd) + ATTR_NULL(2); void i_stream_compress(struct istream_private *stream); void i_stream_grow_buffer(struct istream_private *stream, size_t bytes);
--- a/src/lib/istream-seekable.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib/istream-seekable.h Sun Jun 24 00:52:57 2012 +0300 @@ -11,6 +11,6 @@ i_stream_create_seekable(struct istream *input[], size_t max_buffer_size, int (*fd_callback)(const char **path_r, void *context), - void *context); + void *context) ATTR_NULL(4); #endif
--- a/src/lib/istream.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib/istream.c Sun Jun 24 00:52:57 2012 +0300 @@ -501,8 +501,7 @@ } } - if (size_r != NULL) - *size_r = stream->buffer_size - stream->pos; + *size_r = stream->buffer_size - stream->pos; return stream->pos != stream->buffer_size; }
--- a/src/lib/istream.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib/istream.h Sun Jun 24 00:52:57 2012 +0300 @@ -50,7 +50,8 @@ void i_stream_unref(struct istream **stream); /* Call the given callback function when stream is destroyed. */ void i_stream_set_destroy_callback(struct istream *stream, - istream_callback_t *callback, void *context); + istream_callback_t *callback, void *context) + ATTR_NULL(3); #define i_stream_set_destroy_callback(stream, callback, context) \ CONTEXT_CALLBACK(i_stream_set_destroy_callback, istream_callback_t, \ callback, context, stream)
--- a/src/lib/lib-signals.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib/lib-signals.c Sun Jun 24 00:52:57 2012 +0300 @@ -151,7 +151,8 @@ the system call might be restarted */ } -static void signal_read(void *context ATTR_UNUSED) +static void ATTR_NULL(1) +signal_read(void *context ATTR_UNUSED) { siginfo_t signals[MAX_SIGNAL_VALUE+1]; sigset_t fullset, oldset;
--- a/src/lib/lib-signals.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib/lib-signals.h Sun Jun 24 00:52:57 2012 +0300 @@ -30,11 +30,13 @@ /* Set signal handler for specific signal. */ void lib_signals_set_handler(int signo, enum libsig_flags flags, - signal_handler_t *handler, void *context); + signal_handler_t *handler, void *context) + ATTR_NULL(4); /* Ignore given signal. */ void lib_signals_ignore(int signo, bool restart_syscalls); void lib_signals_unset_handler(int signo, - signal_handler_t *handler, void *context); + signal_handler_t *handler, void *context) + ATTR_NULL(3); /* Remove and add the internal I/O handler back. This is necessary to get the delayed signals to work when using multiple I/O loops. */
--- a/src/lib/macros.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib/macros.h Sun Jun 24 00:52:57 2012 +0300 @@ -109,6 +109,11 @@ # define ATTR_CONST # define ATTR_PURE #endif +#ifdef HAVE_ATTR_NULL +# define ATTR_NULL(...) __attribute__((null(__VA_ARGS__))) +#else +# define ATTR_NULL(...) +#endif #if __GNUC__ > 2 # define ATTR_MALLOC __attribute__((malloc)) #else
--- a/src/lib/mkdir-parents.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib/mkdir-parents.c Sun Jun 24 00:52:57 2012 +0300 @@ -9,7 +9,7 @@ #include <sys/stat.h> #include <unistd.h> -static int +static int ATTR_NULL(5) mkdir_chown_full(const char *path, mode_t mode, uid_t uid, gid_t gid, const char *gid_origin) { @@ -79,7 +79,7 @@ return mkdir_chown_full(path, mode, (uid_t)-1, gid, gid_origin); } -static int +static int ATTR_NULL(5) mkdir_parents_chown_full(const char *path, mode_t mode, uid_t uid, gid_t gid, const char *gid_origin) {
--- a/src/lib/module-dir.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib/module-dir.h Sun Jun 24 00:52:57 2012 +0300 @@ -38,14 +38,16 @@ }; /* Load modules in given directory. module_names is a space separated list of - module names to load, or NULL to load everything. */ + module names to load. */ struct module *module_dir_load(const char *dir, const char *module_names, - const struct module_dir_load_settings *set); + const struct module_dir_load_settings *set) + ATTR_NULL(2); /* Load modules that aren't already loaded. */ struct module * module_dir_load_missing(struct module *old_modules, const char *dir, const char *module_names, - const struct module_dir_load_settings *set); + const struct module_dir_load_settings *set) + ATTR_NULL(1, 3); /* Call init() in all modules */ void module_dir_init(struct module *modules); /* Call deinit() in all modules and mark them NULL so module_dir_unload()
--- a/src/lib/network.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib/network.c Sun Jun 24 00:52:57 2012 +0300 @@ -500,7 +500,7 @@ return fd; } -int net_accept(int fd, struct ip_addr *addr, unsigned int *port) +int net_accept(int fd, struct ip_addr *addr_r, unsigned int *port_r) { union sockaddr_union so; int ret; @@ -518,12 +518,12 @@ return -2; } if (so.sin.sin_family == AF_UNIX) { - if (addr != NULL) - memset(addr, 0, sizeof(*addr)); - if (port != NULL) *port = 0; + if (addr_r != NULL) + memset(addr_r, 0, sizeof(*addr_r)); + if (port_r != NULL) *port_r = 0; } else { - if (addr != NULL) sin_get_ip(&so, addr); - if (port != NULL) *port = sin_get_port(&so); + if (addr_r != NULL) sin_get_ip(&so, addr_r); + if (port_r != NULL) *port_r = sin_get_port(&so); } return ret; }
--- a/src/lib/network.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib/network.h Sun Jun 24 00:52:57 2012 +0300 @@ -57,10 +57,10 @@ /* Connect to socket with ip address. The socket and connect() is non-blocking. */ int net_connect_ip(const struct ip_addr *ip, unsigned int port, - const struct ip_addr *my_ip); + const struct ip_addr *my_ip) ATTR_NULL(3); /* Like net_connect_ip(), but do a blocking connect(). */ int net_connect_ip_blocking(const struct ip_addr *ip, unsigned int port, - const struct ip_addr *my_ip); + const struct ip_addr *my_ip) ATTR_NULL(3); /* Returns 0 if we can bind() as given IP, -1 if not. */ int net_try_bind(const struct ip_addr *ip); /* Connect to named UNIX socket */ @@ -91,8 +91,9 @@ again. */ int net_listen_unix_unlink_stale(const char *path, int backlog); /* Accept a connection on a socket. Returns -1 if the connection got closed, - -2 for other failures. For UNIX sockets addr->family=port=0. */ -int net_accept(int fd, struct ip_addr *addr, unsigned int *port); + -2 for other failures. For UNIX sockets addr_r->family=port=0. */ +int net_accept(int fd, struct ip_addr *addr_r, unsigned int *port_r) + ATTR_NULL(2, 3); /* Read data from socket, return number of bytes read, -1 = error, -2 = disconnected */ @@ -111,9 +112,11 @@ int net_hosterror_notfound(int error) ATTR_CONST; /* Get socket local address/port. For UNIX sockets addr->family=port=0. */ -int net_getsockname(int fd, struct ip_addr *addr, unsigned int *port); +int net_getsockname(int fd, struct ip_addr *addr, unsigned int *port) + ATTR_NULL(2, 3); /* Get socket remote address/port. For UNIX sockets addr->family=port=0. */ -int net_getpeername(int fd, struct ip_addr *addr, unsigned int *port); +int net_getpeername(int fd, struct ip_addr *addr, unsigned int *port) + ATTR_NULL(2, 3); /* Get UNIX socket name. */ int net_getunixname(int fd, const char **name_r); /* Get UNIX socket peer process's credentials. The pid may be (pid_t)-1 if
--- a/src/lib/ostream-private.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib/ostream-private.h Sun Jun 24 00:52:57 2012 +0300 @@ -39,7 +39,8 @@ }; struct ostream * -o_stream_create(struct ostream_private *_stream, struct ostream *parent); +o_stream_create(struct ostream_private *_stream, struct ostream *parent) + ATTR_NULL(2); off_t io_stream_copy(struct ostream *outstream, struct istream *instream, size_t block_size);
--- a/src/lib/ostream.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib/ostream.c Sun Jun 24 00:52:57 2012 +0300 @@ -55,7 +55,9 @@ void o_stream_unset_flush_callback(struct ostream *stream) { - o_stream_set_flush_callback(stream, NULL, NULL); + struct ostream_private *_stream = stream->real_stream; + + _stream->set_flush_callback(_stream, NULL, NULL); } void o_stream_set_max_buffer_size(struct ostream *stream, size_t max_size)
--- a/src/lib/ostream.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib/ostream.h Sun Jun 24 00:52:57 2012 +0300 @@ -57,7 +57,7 @@ finishes when the buffer is empty. */ void o_stream_set_flush_callback(struct ostream *stream, stream_flush_callback_t *callback, - void *context); + void *context) ATTR_NULL(3); #define o_stream_set_flush_callback(stream, callback, context) \ CONTEXT_CALLBACK(o_stream_set_flush_callback, stream_flush_callback_t, \ callback, context, stream)
--- a/src/lib/restrict-access.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib/restrict-access.h Sun Jun 24 00:52:57 2012 +0300 @@ -32,7 +32,7 @@ /* Restrict access as specified by the settings. If home is not NULL, it's chdir()ed after chrooting, otherwise it chdirs to / (the chroot). */ void restrict_access(const struct restrict_access_settings *set, - const char *home, bool disallow_root); + const char *home, bool disallow_root) ATTR_NULL(2); /* Set environment variables so they can be read with restrict_access_by_env(). */ void restrict_access_set_env(const struct restrict_access_settings *set); @@ -41,7 +41,7 @@ /* Read restrictions from environment and call restrict_access(). If disallow_roots is TRUE, we'll kill ourself if we didn't have the environment settings. */ -void restrict_access_by_env(const char *home, bool disallow_root); +void restrict_access_by_env(const char *home, bool disallow_root) ATTR_NULL(1); /* Return the chrooted directory if restrict_access*() chrooted, otherwise NULL. */
--- a/src/lib/safe-mkstemp.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib/safe-mkstemp.c Sun Jun 24 00:52:57 2012 +0300 @@ -12,7 +12,7 @@ #include <fcntl.h> #include <sys/stat.h> -static int +static int ATTR_NULL(5) safe_mkstemp_full(string_t *prefix, mode_t mode, uid_t uid, gid_t gid, const char *gid_origin) {
--- a/src/lib/strfuncs.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib/strfuncs.c Sun Jun 24 00:52:57 2012 +0300 @@ -12,6 +12,8 @@ #define STRCONCAT_BUFSIZE 512 +const unsigned char uchar_nul = '\0'; + int i_snprintf(char *dest, size_t max_chars, const char *format, ...) { va_list args;
--- a/src/lib/strfuncs.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib/strfuncs.h Sun Jun 24 00:52:57 2012 +0300 @@ -3,6 +3,8 @@ #define MAX_INT_STRLEN ((sizeof(uintmax_t) * CHAR_BIT + 2) / 3 + 1) +extern const unsigned char uchar_nul; /* (const unsigned char *)"" */ + /* Returns -1 if dest wasn't large enough, 0 if not. */ int i_snprintf(char *dest, size_t max_chars, const char *format, ...) ATTR_FORMAT(3, 4);
--- a/src/lib/test-iso8601-date.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib/test-iso8601-date.c Sun Jun 24 00:52:57 2012 +0300 @@ -124,6 +124,8 @@ for (i = 0; i < invalid_date_test_count; i++) T_BEGIN { const char *date_in; + struct tm tm; + int tz; bool result; date_in = invalid_date_tests[i]; @@ -131,7 +133,7 @@ test_begin(t_strdup_printf("iso8601 date invalid [%d]", i)); result = iso8601_date_parse_tm - ((const unsigned char *)date_in, strlen(date_in), NULL, NULL); + ((const unsigned char *)date_in, strlen(date_in), &tm, &tz); test_out(t_strdup_printf("parse %s", date_in), !result); test_end();
--- a/src/lib/uri-util.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib/uri-util.c Sun Jun 24 00:52:57 2012 +0300 @@ -82,7 +82,7 @@ return -1; } -static int +static int ATTR_NULL(3) uri_parse_pct_encoded(struct uri_parser *parser, const unsigned char **p, const unsigned char *pend, unsigned char *ch_r) {
--- a/src/lib/uri-util.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib/uri-util.h Sun Jun 24 00:52:57 2012 +0300 @@ -29,7 +29,7 @@ int uri_parse_unreserved(struct uri_parser *parser, string_t *part); bool uri_data_decode(struct uri_parser *parser, const char *data, - const char *until, const char **decoded_r); + const char *until, const char **decoded_r) ATTR_NULL(3); int uri_cut_scheme(const char **uri_p, const char **scheme_r); int uri_parse_scheme(struct uri_parser *parser, const char **scheme_r);
--- a/src/lib/var-expand.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lib/var-expand.h Sun Jun 24 00:52:57 2012 +0300 @@ -22,7 +22,7 @@ void var_expand_with_funcs(string_t *dest, const char *str, const struct var_expand_table *table, const struct var_expand_func_table *func_table, - void *func_context); + void *func_context) ATTR_NULL(3, 4, 5); /* Returns the actual key character for given string, ie. skip any modifiers that are before it. The string should be the data after the '%' character. */
--- a/src/lmtp/client.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lmtp/client.h Sun Jun 24 00:52:57 2012 +0300 @@ -72,7 +72,7 @@ struct client *client_create(int fd_in, int fd_out, const struct master_service_connection *conn); void client_destroy(struct client *client, const char *prefix, - const char *reason); + const char *reason) ATTR_NULL(2, 3); void client_disconnect(struct client *client, const char *prefix, const char *reason); void client_io_reset(struct client *client);
--- a/src/lmtp/lmtp-proxy.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/lmtp/lmtp-proxy.h Sun Jun 24 00:52:57 2012 +0300 @@ -39,6 +39,7 @@ /* Start proxying */ void lmtp_proxy_start(struct lmtp_proxy *proxy, struct istream *data_input, const char *header, - lmtp_proxy_finish_callback_t *callback, void *context); + lmtp_proxy_finish_callback_t *callback, void *context) + ATTR_NULL(3); #endif
--- a/src/log/main.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/log/main.c Sun Jun 24 00:52:57 2012 +0300 @@ -57,7 +57,7 @@ { const char *error; - master_service = master_service_init("log", 0, &argc, &argv, NULL); + master_service = master_service_init("log", 0, &argc, &argv, ""); /* use log prefix and log to stderr until we've configured the real logging */
--- a/src/login-common/client-common-auth.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/login-common/client-common-auth.c Sun Jun 24 00:52:57 2012 +0300 @@ -324,7 +324,7 @@ return 0; } -static void +static void ATTR_NULL(3, 4) client_auth_result(struct client *client, enum client_auth_result result, const struct client_auth_reply *reply, const char *text) {
--- a/src/login-common/login-proxy.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/login-common/login-proxy.c Sun Jun 24 00:52:57 2012 +0300 @@ -59,7 +59,8 @@ static void login_proxy_ipc_cmd(struct ipc_cmd *cmd, const char *line); static void -login_proxy_free_reason(struct login_proxy **_proxy, const char *reason); +login_proxy_free_reason(struct login_proxy **_proxy, const char *reason) + ATTR_NULL(2); static void login_proxy_free_errno(struct login_proxy **proxy, int err, const char *who) @@ -316,7 +317,7 @@ return 0; } -static void +static void ATTR_NULL(2) login_proxy_free_reason(struct login_proxy **_proxy, const char *reason) { struct login_proxy *proxy = *_proxy;
--- a/src/login-common/login-settings.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/login-common/login-settings.h Sun Jun 24 00:52:57 2012 +0300 @@ -45,7 +45,7 @@ const struct ip_addr *local_ip, const struct ip_addr *remote_ip, const char *local_name, - void ***other_settings_r); + void ***other_settings_r) ATTR_NULL(2, 3, 4); void login_settings_deinit(void); #endif
--- a/src/login-common/sasl-server.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/login-common/sasl-server.c Sun Jun 24 00:52:57 2012 +0300 @@ -77,7 +77,7 @@ return auth_flags; } -static void +static void ATTR_NULL(3, 4) call_client_callback(struct client *client, enum sasl_server_reply reply, const char *data, const char *const *args) { @@ -154,7 +154,8 @@ master_auth_callback, client, &client->master_tag); } -static void anvil_lookup_callback(const char *reply, void *context) +static void ATTR_NULL(1) +anvil_lookup_callback(const char *reply, void *context) { struct anvil_request *req = context; struct client *client = req->client; @@ -333,8 +334,9 @@ authenticate_callback, client); } -static void sasl_server_auth_cancel(struct client *client, const char *reason, - enum sasl_server_reply reply) +static void ATTR_NULL(2) +sasl_server_auth_cancel(struct client *client, const char *reason, + enum sasl_server_reply reply) { i_assert(client->authenticating);
--- a/src/login-common/ssl-proxy-openssl.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/login-common/ssl-proxy-openssl.c Sun Jun 24 00:52:57 2012 +0300 @@ -1026,7 +1026,7 @@ } } -static EVP_PKEY * +static EVP_PKEY * ATTR_NULL(2) ssl_proxy_load_key(const char *key, const char *password) { EVP_PKEY *pkey;
--- a/src/master/common.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/master/common.h Sun Jun 24 00:52:57 2012 +0300 @@ -12,7 +12,8 @@ extern int null_fd, global_master_dead_pipe_fd[2]; extern struct service_list *services; -void process_exec(const char *cmd, const char *extra_args[]) ATTR_NORETURN; +void process_exec(const char *cmd, const char *extra_args[]) + ATTR_NORETURN ATTR_NULL(2); int get_uidgid(const char *user, uid_t *uid_r, gid_t *gid_r, const char **error_r);
--- a/src/plugins/acl/acl-backend-vfile-acllist.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/plugins/acl/acl-backend-vfile-acllist.c Sun Jun 24 00:52:57 2012 +0300 @@ -43,20 +43,20 @@ struct mail_storage *storage; const char *rootdir, *maildir; - rootdir = mailbox_list_get_path(backend->backend.list, NULL, - MAILBOX_LIST_PATH_TYPE_DIR); + rootdir = mailbox_list_get_root_path(backend->backend.list, + MAILBOX_LIST_PATH_TYPE_DIR); storage = mailbox_list_get_namespace(backend->backend.list)->storage; if (mail_storage_is_mailbox_file(storage)) { - maildir = mailbox_list_get_path(backend->backend.list, NULL, - MAILBOX_LIST_PATH_TYPE_MAILBOX); + maildir = mailbox_list_get_root_path(backend->backend.list, + MAILBOX_LIST_PATH_TYPE_MAILBOX); if (strcmp(maildir, rootdir) == 0) { /* dovecot-acl-list would show up as a mailbox if we created it to root dir. since we don't really have any other good alternatives, place it to control dir */ - rootdir = mailbox_list_get_path(backend->backend.list, - NULL, MAILBOX_LIST_PATH_TYPE_CONTROL); + rootdir = mailbox_list_get_root_path(backend->backend.list, + MAILBOX_LIST_PATH_TYPE_CONTROL); } } return rootdir;
--- a/src/plugins/acl/acl-plugin.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/plugins/acl/acl-plugin.h Sun Jun 24 00:52:57 2012 +0300 @@ -50,7 +50,7 @@ struct acl_backend *acl_mailbox_list_get_backend(struct mailbox_list *list); int acl_mailbox_list_have_right(struct mailbox_list *list, const char *name, bool parent, unsigned int acl_storage_right_idx, - bool *can_see_r); + bool *can_see_r) ATTR_NULL(5); void acl_plugin_init(struct module *module); void acl_plugin_deinit(void);
--- a/src/plugins/fts-lucene/fts-backend-lucene.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/plugins/fts-lucene/fts-backend-lucene.c Sun Jun 24 00:52:57 2012 +0300 @@ -144,8 +144,8 @@ return -1; } - path = mailbox_list_get_path(_backend->ns->list, NULL, - MAILBOX_LIST_PATH_TYPE_INDEX); + path = mailbox_list_get_root_path(_backend->ns->list, + MAILBOX_LIST_PATH_TYPE_INDEX); i_assert(path != NULL); /* fts already checked this */ backend->dir_path = i_strconcat(path, "/"LUCENE_INDEX_DIR_NAME, NULL);
--- a/src/plugins/fts-lucene/lucene-wrapper.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/plugins/fts-lucene/lucene-wrapper.h Sun Jun 24 00:52:57 2012 +0300 @@ -16,9 +16,10 @@ uint32_t uid; }; -struct lucene_index *lucene_index_init(const char *path, - struct mailbox_list *list, - const struct fts_lucene_settings *set); +struct lucene_index * +lucene_index_init(const char *path, struct mailbox_list *list, + const struct fts_lucene_settings *set) + ATTR_NULL(2, 3); void lucene_index_deinit(struct lucene_index *index); void lucene_index_select_mailbox(struct lucene_index *index,
--- a/src/plugins/fts-solr/solr-connection.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/plugins/fts-solr/solr-connection.c Sun Jun 24 00:52:57 2012 +0300 @@ -446,7 +446,7 @@ i_error("fts_solr: Lookup failed: %s", conn->http_failure); return -1; } - parse_ret = solr_xml_parse(conn, NULL, 0, TRUE); + parse_ret = solr_xml_parse(conn, "", 0, TRUE); hash_table_destroy(&solr_lookup_context.mailboxes); (void)array_append_space(&solr_lookup_context.results); @@ -575,7 +575,7 @@ i_assert(conn->posting); - solr_connection_post_more(post, NULL, 0); + solr_connection_post_more(post, &uchar_nul, 0); curl_easy_getinfo(conn->curl, CURLINFO_RESPONSE_CODE, &httpret); if (httpret != 200 && ret == 0) {
--- a/src/plugins/fts-squat/squat-trie.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/plugins/fts-squat/squat-trie.h Sun Jun 24 00:52:57 2012 +0300 @@ -37,7 +37,8 @@ /* if expunged_uids is non-NULL, they may be removed from the index if they still exist. */ int squat_trie_build_deinit(struct squat_trie_build_context **ctx, - const ARRAY_TYPE(seq_range) *expunged_uids); + const ARRAY_TYPE(seq_range) *expunged_uids) + ATTR_NULL(2); int squat_trie_get_last_uid(struct squat_trie *trie, uint32_t *last_uid_r); /* type specifies if we're looking at header, body or both */
--- a/src/plugins/fts/fts-storage.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/plugins/fts/fts-storage.c Sun Jun 24 00:52:57 2012 +0300 @@ -643,8 +643,7 @@ return; } - path = mailbox_list_get_path(list, NULL, - MAILBOX_LIST_PATH_TYPE_INDEX); + path = mailbox_list_get_root_path(list, MAILBOX_LIST_PATH_TYPE_INDEX); if (*path == '\0') { if (list->mail_set->mail_debug) { i_debug("fts: Indexes disabled for namespace '%s'",
--- a/src/plugins/quota/quota-dirsize.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/plugins/quota/quota-dirsize.c Sun Jun 24 00:52:57 2012 +0300 @@ -162,8 +162,8 @@ continue; is_file = mail_storage_is_mailbox_file(namespaces[i]->storage); - path = mailbox_list_get_path(namespaces[i]->list, NULL, - MAILBOX_LIST_PATH_TYPE_DIR); + path = mailbox_list_get_root_path(namespaces[i]->list, + MAILBOX_LIST_PATH_TYPE_DIR); quota_count_path_add(&paths, path, FALSE); /* INBOX may be in different path. */
--- a/src/plugins/quota/quota-fs.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/plugins/quota/quota-fs.c Sun Jun 24 00:52:57 2012 +0300 @@ -276,8 +276,7 @@ struct fs_quota_root *root; const char *dir; - dir = mailbox_list_get_path(ns->list, NULL, - MAILBOX_LIST_PATH_TYPE_MAILBOX); + dir = mailbox_list_get_root_path(ns->list, MAILBOX_LIST_PATH_TYPE_MAILBOX); mount = dir == NULL ? NULL : fs_quota_mountpoint_get(dir); if (mount != NULL) {
--- a/src/plugins/quota/quota-maildir.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/plugins/quota/quota-maildir.c Sun Jun 24 00:52:57 2012 +0300 @@ -795,8 +795,7 @@ if (root->maildirsize_path != NULL) return; - control_dir = mailbox_list_get_path(ns->list, NULL, - MAILBOX_LIST_PATH_TYPE_CONTROL); + control_dir = mailbox_list_get_root_path(ns->list, MAILBOX_LIST_PATH_TYPE_CONTROL); root->maildirsize_ns = ns; root->maildirsize_path = p_strconcat(_root->pool, control_dir,
--- a/src/plugins/quota/quota.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/plugins/quota/quota.c Sun Jun 24 00:52:57 2012 +0300 @@ -632,12 +632,11 @@ /* first check if there already exists a namespace with the exact same path. we don't want to count them twice. */ - path = mailbox_list_get_path(ns->list, NULL, - MAILBOX_LIST_PATH_TYPE_MAILBOX); + path = mailbox_list_get_root_path(ns->list, MAILBOX_LIST_PATH_TYPE_MAILBOX); if (path != NULL) { namespaces = array_get("a->namespaces, &count); for (i = 0; i < count; i++) { - path2 = mailbox_list_get_path(namespaces[i]->list, NULL, + path2 = mailbox_list_get_root_path(namespaces[i]->list, MAILBOX_LIST_PATH_TYPE_MAILBOX); if (strcmp(path, path2) == 0) { /* duplicate */
--- a/src/pop3/pop3-client.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/pop3/pop3-client.h Sun Jun 24 00:52:57 2012 +0300 @@ -104,7 +104,7 @@ struct mail_user *user, struct mail_storage_service_user *service_user, const struct pop3_settings *set); -void client_destroy(struct client *client, const char *reason); +void client_destroy(struct client *client, const char *reason) ATTR_NULL(2); /* Disconnect client connection */ void client_disconnect(struct client *client, const char *reason);
--- a/src/replication/aggregator/aggregator.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/replication/aggregator/aggregator.c Sun Jun 24 00:52:57 2012 +0300 @@ -50,8 +50,7 @@ }; const char *error; - master_service = master_service_init("aggregator", 0, - &argc, &argv, NULL); + master_service = master_service_init("aggregator", 0, &argc, &argv, ""); if (master_getopt(master_service) > 0) return FATAL_DEFAULT;
--- a/src/replication/replicator/replicator.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/replication/replicator/replicator.c Sun Jun 24 00:52:57 2012 +0300 @@ -42,7 +42,7 @@ /* add all users into replication queue, so that we can start doing full syncs for everyone whose state can't be found */ - ctx = auth_master_user_list_init(auth_conn, NULL, &user_info); + ctx = auth_master_user_list_init(auth_conn, "", &user_info); while ((username = auth_master_user_list_next(ctx)) != NULL) { user = replicator_queue_add(queue, username, REPLICATION_PRIORITY_NONE); @@ -56,7 +56,8 @@ (void)replicator_queue_import(queue, REPLICATOR_DB_PATH); } -static void replicator_dump_timeout(void *context ATTR_UNUSED) +static void ATTR_NULL(1) +replicator_dump_timeout(void *context ATTR_UNUSED) { (void)replicator_queue_export(queue, REPLICATOR_DB_PATH); } @@ -95,7 +96,7 @@ const char *error; master_service = master_service_init("replicator", service_flags, - &argc, &argv, NULL); + &argc, &argv, ""); if (master_getopt(master_service) > 0) return FATAL_DEFAULT;
--- a/src/ssl-params/main.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/ssl-params/main.c Sun Jun 24 00:52:57 2012 +0300 @@ -132,8 +132,7 @@ { const struct ssl_params_settings *set; - master_service = master_service_init("ssl-params", 0, - &argc, &argv, NULL); + master_service = master_service_init("ssl-params", 0, &argc, &argv, ""); master_service_init_log(master_service, "ssl-params: "); if (master_getopt(master_service) > 0)
--- a/src/stats/mail-domain.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/stats/mail-domain.h Sun Jun 24 00:52:57 2012 +0300 @@ -8,7 +8,7 @@ struct mail_domain *mail_domain_login(const char *name); struct mail_domain *mail_domain_lookup(const char *name); void mail_domain_refresh(struct mail_domain *domain, - const struct mail_stats *diff_stats); + const struct mail_stats *diff_stats) ATTR_NULL(2); void mail_domain_ref(struct mail_domain *domain); void mail_domain_unref(struct mail_domain **domain);
--- a/src/stats/mail-ip.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/stats/mail-ip.h Sun Jun 24 00:52:57 2012 +0300 @@ -5,7 +5,8 @@ struct mail_ip *mail_ip_login(const struct ip_addr *ip_addr); struct mail_ip *mail_ip_lookup(const struct ip_addr *ip_addr); -void mail_ip_refresh(struct mail_ip *ip, const struct mail_stats *diff_stats); +void mail_ip_refresh(struct mail_ip *ip, const struct mail_stats *diff_stats) + ATTR_NULL(2); void mail_ip_ref(struct mail_ip *ip); void mail_ip_unref(struct mail_ip **ip);
--- a/src/stats/mail-session.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/stats/mail-session.h Sun Jun 24 00:52:57 2012 +0300 @@ -19,7 +19,7 @@ int mail_session_get(const char *guid, struct mail_session **session_r, const char **error_r); void mail_session_refresh(struct mail_session *session, - const struct mail_stats *diff_stats); + const struct mail_stats *diff_stats) ATTR_NULL(2); void mail_sessions_free_memory(void); void mail_sessions_init(void);
--- a/src/stats/mail-user.h Fri Jun 22 21:59:01 2012 +0300 +++ b/src/stats/mail-user.h Sun Jun 24 00:52:57 2012 +0300 @@ -9,7 +9,7 @@ struct mail_user *mail_user_lookup(const char *username); void mail_user_refresh(struct mail_user *user, - const struct mail_stats *diff_stats); + const struct mail_stats *diff_stats) ATTR_NULL(2); void mail_user_ref(struct mail_user *user); void mail_user_unref(struct mail_user **user);
--- a/src/stats/main.c Fri Jun 22 21:59:01 2012 +0300 +++ b/src/stats/main.c Sun Jun 24 00:52:57 2012 +0300 @@ -44,7 +44,7 @@ void **sets; master_service = master_service_init("stats", service_flags, - &argc, &argv, NULL); + &argc, &argv, ""); if (master_getopt(master_service) > 0) return FATAL_DEFAULT; if (master_service_settings_read_simple(master_service, set_roots,