commit eadcd91b463fdf61c3b1fefb1640ac6cd2a4b0ae Author: Oswald Buddenhagen <o...@users.sf.net> Date: Sun Jul 28 21:02:57 2019 +0200
fix lots of sign conversion warnings ... by making a lot of objects unsigned, and some signed. casts which lose precision and change the sign in one go (ssize_t and time_t to uint on LP64) are made explicit as well. src/common.h | 28 ++++----- src/config.c | 21 +++---- src/config.h | 2 +- src/driver.c | 4 +- src/driver.h | 16 +++--- src/drv_imap.c | 124 ++++++++++++++++++++-------------------- src/drv_maildir.c | 142 +++++++++++++++++++++++----------------------- src/drv_proxy.c | 18 +++--- src/main.c | 30 +++++----- src/socket.c | 58 ++++++++++--------- src/socket.h | 18 +++--- src/sync.c | 61 ++++++++++---------- src/sync.h | 2 +- src/util.c | 61 ++++++++++---------- 14 files changed, 297 insertions(+), 288 deletions(-) diff --git a/src/common.h b/src/common.h index 4946306..1189de1 100644 --- a/src/common.h +++ b/src/common.h @@ -41,7 +41,7 @@ typedef unsigned long ulong; #define stringify(x) stringify__(x) #define shifted_bit(in, from, to) \ - (((uint)(in) / (from > to ? from / to : 1) * (to > from ? to / from : 1)) & to) + ((int)(((uint)(in) / (from > to ? from / to : 1) * (to > from ? to / from : 1)) & to)) #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4) # define ATTR_UNUSED __attribute__((unused)) @@ -112,7 +112,7 @@ extern int Pid; extern char Hostname[256]; extern const char *Home; -extern int BufferLimit; +extern uint BufferLimit; extern int new_total[2], new_done[2]; extern int flags_total[2], flags_done[2]; @@ -138,7 +138,7 @@ typedef struct string_list { char string[1]; } ATTR_PACKED(void *) string_list_t; -void add_string_list_n( string_list_t **list, const char *str, int len ); +void add_string_list_n( string_list_t **list, const char *str, uint len ); void add_string_list( string_list_t **list, const char *str ); void free_string_list( string_list_t *list ); @@ -149,9 +149,9 @@ void *memrchr( const void *s, int c, size_t n ); size_t strnlen( const char *str, size_t maxlen ); #endif -int starts_with( const char *str, int strl, const char *cmp, int cmpl ); -int starts_with_upper( const char *str, int strl, const char *cmp, int cmpl ); -int equals( const char *str, int strl, const char *cmp, int cmpl ); +int starts_with( const char *str, uint strl, const char *cmp, uint cmpl ); +int starts_with_upper( const char *str, uint strl, const char *cmp, uint cmpl ); +int equals( const char *str, uint strl, const char *cmp, uint cmpl ); #ifndef HAVE_TIMEGM time_t timegm( struct tm *tm ); @@ -162,23 +162,23 @@ void *nfcalloc( size_t sz ); void *nfrealloc( void *mem, size_t sz ); char *nfstrndup( const char *str, size_t nchars ); char *nfstrdup( const char *str ); -int ATTR_PRINTFLIKE(2, 0) nfvasprintf( char **str, const char *fmt, va_list va ); -int ATTR_PRINTFLIKE(2, 3) nfasprintf( char **str, const char *fmt, ... ); -int ATTR_PRINTFLIKE(3, 4) nfsnprintf( char *buf, int blen, const char *fmt, ... ); +uint ATTR_PRINTFLIKE(2, 0) nfvasprintf( char **str, const char *fmt, va_list va ); +uint ATTR_PRINTFLIKE(2, 3) nfasprintf( char **str, const char *fmt, ... ); +uint ATTR_PRINTFLIKE(3, 4) nfsnprintf( char *buf, int blen, const char *fmt, ... ); void ATTR_NORETURN oob( void ); char *expand_strdup( const char *s ); -int map_name( const char *arg, char **result, int reserve, const char *in, const char *out ); +int map_name( const char *arg, char **result, uint reserve, const char *in, const char *out ); #define DEFINE_ARRAY_TYPE(T) \ typedef struct { \ T *data; \ - int size; \ + uint size; \ } ATTR_PACKED(T *) T##_array_t; \ typedef struct { \ T##_array_t array; \ - int alloc; \ + uint alloc; \ } ATTR_PACKED(T *) T##_array_alloc_t; \ static INLINE T *T##_array_append( T##_array_alloc_t *arr ) \ { \ @@ -204,7 +204,7 @@ int find_uint_array( const uint_array_t array, uint value ); void arc4_init( void ); uchar arc4_getbyte( void ); -int bucketsForSize( int size ); +uint bucketsForSize( uint size ); typedef struct list_head { struct list_head *next, *prev; @@ -215,7 +215,7 @@ typedef struct notifier { void (*cb)( int what, void *aux ); void *aux; #ifdef HAVE_SYS_POLL_H - int index; + uint index; #else int fd; short events; diff --git a/src/config.c b/src/config.c index f22e259..8cb56c6 100644 --- a/src/config.c +++ b/src/config.c @@ -121,13 +121,13 @@ parse_int( conffile_t *cfile ) return ret; } -int +uint parse_size( conffile_t *cfile ) { char *p; - int ret; + uint ret; - ret = strtol (cfile->val, &p, 10); + ret = strtoul( cfile->val, &p, 10 ); if (*p == 'k' || *p == 'K') ret *= 1024, p++; else if (*p == 'm' || *p == 'M') @@ -319,7 +319,8 @@ load_config( const char *where, int pseudo ) group_conf_t *group, **groupapp = &groups; string_list_t *chanlist, **chanlistapp; char *arg, *p; - int len, cops, gcops, max_size, ms, i; + uint len, max_size; + int cops, gcops, ms, i; char path[_POSIX_PATH_MAX]; char buf[1024]; @@ -354,7 +355,7 @@ load_config( const char *where, int pseudo ) if (drivers[i]->parse_store( &cfile, &store )) { if (store) { if (!store->max_size) - store->max_size = INT_MAX; + store->max_size = UINT_MAX; if (!store->flat_delim) store->flat_delim = ""; *storeapp = store; @@ -371,7 +372,7 @@ load_config( const char *where, int pseudo ) channel->expire_unread = global_conf.expire_unread; channel->use_internal_date = global_conf.use_internal_date; cops = 0; - max_size = -1; + max_size = UINT_MAX; while (getcline( &cfile ) && cfile.cmd) { if (!strcasecmp( "MaxSize", cfile.cmd )) max_size = parse_size( &cfile ); @@ -422,9 +423,9 @@ load_config( const char *where, int pseudo ) } else if (merge_ops( cops, channel->ops )) cfile.err = 1; else { - if (max_size >= 0) { + if (max_size != UINT_MAX) { if (!max_size) - max_size = INT_MAX; + max_size = UINT_MAX; channel->stores[M]->max_size = channel->stores[S]->max_size = max_size; } *channelapp = channel; @@ -487,8 +488,8 @@ load_config( const char *where, int pseudo ) else if (!strcasecmp( "BufferLimit", cfile.cmd )) { BufferLimit = parse_size( &cfile ); - if (BufferLimit <= 0) { - error( "%s:%d: BufferLimit must be positive\n", cfile.file, cfile.line ); + if (!BufferLimit) { + error( "%s:%d: BufferLimit cannot be zero\n", cfile.file, cfile.line ); cfile.err = 1; } } diff --git a/src/config.h b/src/config.h index 779c3ee..a8d6089 100644 --- a/src/config.h +++ b/src/config.h @@ -42,7 +42,7 @@ char *get_arg( conffile_t *cfile, int required, int *comment ); char parse_bool( conffile_t *cfile ); int parse_int( conffile_t *cfile ); -int parse_size( conffile_t *cfile ); +uint parse_size( conffile_t *cfile ); int getcline( conffile_t *cfile ); int merge_ops( int cops, int ops[] ); int load_config( const char *filename, int pseudo ); diff --git a/src/driver.c b/src/driver.c index e28d817..b86c117 100644 --- a/src/driver.c +++ b/src/driver.c @@ -27,10 +27,10 @@ driver_t *drivers[N_DRIVERS] = { &maildir_driver, &imap_driver }; -int +uint count_generic_messages( message_t *msgs ) { - int count = 0; + uint count = 0; for (; msgs; msgs = msgs->next) count++; return count; diff --git a/src/driver.h b/src/driver.h index 18f8bfd..0a9144a 100644 --- a/src/driver.h +++ b/src/driver.h @@ -39,7 +39,7 @@ typedef struct store_conf { const char *flat_delim; const char *map_inbox; const char *trash; - int max_size; /* off_t is overkill */ + uint max_size; /* off_t is overkill */ char trash_remote_new, trash_only_new; } store_conf_t; @@ -65,7 +65,7 @@ typedef struct message { struct sync_rec *srec; char *msgid; /* owned */ /* string_list_t *keywords; */ - int size; /* zero implies "not fetched" */ + uint size; /* zero implies "not fetched" */ uint uid; uchar flags, status; char tuid[TUIDL]; @@ -93,7 +93,7 @@ typedef struct store { typedef struct { char *data; - int len; + uint len; time_t date; uchar flags; } msg_data_t; @@ -125,7 +125,7 @@ typedef struct { #define LIST_PATH 2 #define LIST_PATH_MAYBE 4 -#define xint int // For auto-generation of appropriate printf() formats. +#define xint uint // For auto-generation of appropriate printf() formats. struct driver { /* Return driver capabilities. */ @@ -174,10 +174,10 @@ struct driver { /* Open the selected mailbox. * Note that this should not directly complain about failure to open. */ void (*open_box)( store_t *ctx, - void (*cb)( int sts, int uidvalidity, void *aux ), void *aux ); + void (*cb)( int sts, uint uidvalidity, void *aux ), void *aux ); /* Return the minimal UID the next stored message will have. */ - int (*get_uidnext)( store_t *ctx ); + uint (*get_uidnext)( store_t *ctx ); /* Confirm that the open mailbox is empty. */ int (*confirm_box_empty)( store_t *ctx ); @@ -253,13 +253,13 @@ struct driver { void (*commit_cmds)( store_t *ctx ); /* Get approximate amount of memory occupied by the driver. */ - int (*get_memory_usage)( store_t *ctx ); + uint (*get_memory_usage)( store_t *ctx ); /* Get the FAIL_* state of the driver. */ int (*get_fail_state)( store_conf_t *conf ); }; -int count_generic_messages( message_t * ); +uint count_generic_messages( message_t * ); void free_generic_messages( message_t * ); void parse_generic_store( store_conf_t *store, conffile_t *cfg ); diff --git a/src/drv_imap.c b/src/drv_imap.c index 7024a08..0ab8a1e 100644 --- a/src/drv_imap.c +++ b/src/drv_imap.c @@ -53,7 +53,7 @@ typedef struct imap_server_conf { char *pass; char *pass_cmd; int max_in_progress; - int cap_mask; + uint cap_mask; string_list_t *auth_mechs; #ifdef HAVE_LIBSSL char ssl_type; @@ -79,7 +79,7 @@ typedef struct { typedef struct _list { struct _list *next, *child; char *val; - int len; + uint len; } list_t; #define MAX_LIST_DEPTH 5 @@ -99,7 +99,7 @@ struct imap_store { const char *label; /* foreign */ const char *prefix; const char *name; - int ref_count; + uint ref_count; uint opts; enum { SST_BAD, SST_HALF, SST_GOOD } state; /* trash folder's existence is not confirmed yet */ @@ -122,7 +122,7 @@ struct imap_store { int nexttag, num_in_progress; imap_cmd_t *pending, **pending_append; imap_cmd_t *in_progress, **in_progress_append; - int buffer_mem; /* memory currently occupied by buffers in the queue */ + uint buffer_mem; /* memory currently occupied by buffers in the queue */ /* Used during sequential operations like connect */ enum { GreetingPending = 0, GreetingBad, GreetingOk, GreetingPreauth } greeting; @@ -156,7 +156,7 @@ struct imap_cmd { int (*cont)( imap_store_t *ctx, imap_cmd_t *cmd, const char *prompt ); void (*done)( imap_store_t *ctx, imap_cmd_t *cmd, int response ); char *data; - int data_len; + uint data_len; uint uid; /* to identify fetch responses */ char high_prio; /* if command is queued, put it at the front of the queue. */ char to_trash; /* we are storing to trash, not current. */ @@ -193,7 +193,7 @@ typedef struct { } imap_cmd_find_new_t; typedef struct { - int ref_count; + uint ref_count; int ret_val; } imap_cmd_refcounted_state_t; @@ -252,7 +252,7 @@ static const char *Flags[] = { }; static imap_cmd_t * -new_imap_cmd( int size ) +new_imap_cmd( uint size ) { imap_cmd_t *cmd = nfmalloc( size ); memset( &cmd->param, 0, sizeof(cmd->param) ); @@ -284,7 +284,8 @@ done_imap_cmd( imap_store_t *ctx, imap_cmd_t *cmd, int response ) static void send_imap_cmd( imap_store_t *ctx, imap_cmd_t *cmd ) { - int bufl, litplus, iovcnt = 1; + int litplus, iovcnt = 1; + uint bufl; const char *buffmt; conn_iovec_t iov[3]; char buf[4096]; @@ -308,9 +309,9 @@ DIAG_POP if (DFlags & DEBUG_NET) { if (ctx->num_in_progress) printf( "(%d in progress) ", ctx->num_in_progress ); - if (starts_with( cmd->cmd, -1, "LOGIN", 5 )) + if (starts_with( cmd->cmd, UINT_MAX, "LOGIN", 5 )) printf( "%s>>> %d LOGIN <user> <pass>\n", ctx->label, cmd->tag ); - else if (starts_with( cmd->cmd, -1, "AUTHENTICATE PLAIN", 18 )) + else if (starts_with( cmd->cmd, UINT_MAX, "AUTHENTICATE PLAIN", 18 )) printf( "%s>>> %d AUTHENTICATE PLAIN <authdata>\n", ctx->label, cmd->tag ); else printf( "%s>>> %s", ctx->label, buf ); @@ -445,7 +446,7 @@ imap_vprintf( const char *fmt, va_list ap ) { const char *s; char *d, *ed; - int maxlen; + uint maxlen; char c; char buf[4096]; @@ -455,14 +456,14 @@ imap_vprintf( const char *fmt, va_list ap ) for (;;) { c = *fmt; if (!c || c == '%') { - int l = fmt - s; + uint l = (uint)(fmt - s); if (d + l > ed) oob(); memcpy( d, s, l ); d += l; if (!c) - return nfstrndup( buf, d - buf ); - maxlen = INT_MAX; + return nfstrndup( buf, (uint)(d - buf) ); + maxlen = UINT_MAX; c = *++fmt; if (c == '\\') { c = *++fmt; @@ -485,7 +486,7 @@ imap_vprintf( const char *fmt, va_list ap ) fputs( "Fatal: unsupported string length specification. Please report a bug.\n", stderr ); abort(); } - maxlen = va_arg( ap , int ); + maxlen = va_arg( ap , uint ); c = *++fmt; } if (c == 'c') { @@ -572,7 +573,7 @@ imap_done_simple_msg( imap_store_t *ctx ATTR_UNUSED, } static imap_cmd_refcounted_state_t * -imap_refcounted_new_state( int sz ) +imap_refcounted_new_state( uint sz ) { imap_cmd_refcounted_state_t *sts = nfmalloc( sz ); sts->ref_count = 1; /* so forced sync does not cause an early exit */ @@ -781,7 +782,7 @@ parse_imap_list( imap_store_t *ctx, char **sp, parse_list_state_t *sts ) goto next2; } else if (ctx && *s == '{') { /* literal */ - bytes = cur->len = strtol( s + 1, &s, 10 ); + bytes = (int)(cur->len = strtoul( s + 1, &s, 10 )); if (*s != '}' || *++s) goto bail; @@ -789,7 +790,7 @@ parse_imap_list( imap_store_t *ctx, char **sp, parse_list_state_t *sts ) s[cur->len] = 0; getbytes: - n = socket_read( &ctx->conn, s, bytes ); + n = socket_read( &ctx->conn, s, (uint)bytes ); if (n < 0) { badeof: error( "IMAP error: unexpected EOF from %s\n", ctx->conn.name ); @@ -826,7 +827,7 @@ parse_imap_list( imap_store_t *ctx, char **sp, parse_list_state_t *sts ) goto bail; *d++ = c; } - cur->len = d - p; + cur->len = (uint)(d - p); cur->val = nfstrndup( p, cur->len ); } else { /* atom */ @@ -834,7 +835,7 @@ parse_imap_list( imap_store_t *ctx, char **sp, parse_list_state_t *sts ) for (; *s && !isspace( (uchar)*s ); s++) if (sts->level && *s == ')') break; - cur->len = s - p; + cur->len = (uint)(s - p); if (equals( p, cur->len, "NIL", 3 )) cur->val = NIL; else @@ -969,8 +970,8 @@ parse_fetch_rsp( imap_store_t *ctx, list_t *list, char *s ATTR_UNUSED ) imap_message_t *cur; msg_data_t *msgdata; imap_cmd_t *cmdp; - int mask = 0, status = 0, size = 0; - uint i, uid = 0; + uchar mask = 0, status = 0; + uint i, uid = 0, size = 0; time_t date = 0; if (!is_list( list )) { @@ -1039,9 +1040,9 @@ parse_fetch_rsp( imap_store_t *ctx, list_t *list, char *s ATTR_UNUSED ) tmp = tmp->next; if (!is_atom( tmp )) goto bfail; - int off, in_msgid = 0; + uint off, in_msgid = 0; for (char *val = tmp->val, *end; (end = strchr( val, '\n' )); val = end + 1) { - int len = (int)(end - val); + uint len = (uint)(end - val); if (len && end[-1] == '\r') len--; if (!len) @@ -1136,7 +1137,7 @@ parse_capability( imap_store_t *ctx, char *cmd ) ctx->auth_mechs = 0; ctx->caps = 0x80000000; while ((arg = next_arg( &cmd ))) { - if (starts_with( arg, -1, "AUTH=", 5 )) { + if (starts_with( arg, UINT_MAX, "AUTH=", 5 )) { add_string_list( &ctx->auth_mechs, arg + 5 ); } else { for (i = 0; i < as(cap_list); i++) @@ -1237,7 +1238,7 @@ parse_list_rsp_p1( imap_store_t *ctx, list_t *list, char *cmd ATTR_UNUSED ) // Use this to check whether a full path refers to the actual IMAP INBOX. static int -is_inbox( imap_store_t *ctx, const char *arg, int argl ) +is_inbox( imap_store_t *ctx, const char *arg, uint argl ) { if (!starts_with_upper( arg, argl, "INBOX", 5 )) return 0; @@ -1248,7 +1249,7 @@ is_inbox( imap_store_t *ctx, const char *arg, int argl ) // Use this to check whether a path fragment collides with the canonical INBOX. static int -is_INBOX( imap_store_t *ctx, const char *arg, int argl ) +is_INBOX( imap_store_t *ctx, const char *arg, uint argl ) { if (!starts_with( arg, argl, "INBOX", 5 )) return 0; @@ -1262,7 +1263,7 @@ parse_list_rsp_p2( imap_store_t *ctx, list_t *list, char *cmd ATTR_UNUSED ) { string_list_t *narg; char *arg; - int argl, l; + uint argl, l; if (!is_atom( list )) { error( "IMAP error: malformed LIST response\n" ); @@ -1306,7 +1307,7 @@ parse_list_rsp_p2( imap_store_t *ctx, list_t *list, char *cmd ATTR_UNUSED ) static int prepare_name( char **buf, const imap_store_t *ctx, const char *prefix, const char *name ) { - int pl = strlen( prefix ); + uint pl = strlen( prefix ); switch (map_name( name, buf, pl, "/", ctx->delimiter )) { case -1: @@ -1327,7 +1328,7 @@ prepare_box( char **buf, const imap_store_t *ctx ) const char *name = ctx->name; return prepare_name( buf, ctx, - (starts_with( name, -1, "INBOX", 5 ) && (!name[5] || name[5] == '/')) ? "" : ctx->prefix, name ); + (starts_with( name, UINT_MAX, "INBOX", 5 ) && (!name[5] || name[5] == '/')) ? "" : ctx->prefix, name ); } static int @@ -1498,7 +1499,7 @@ imap_socket_read( void *aux ) resp = RESP_OK; } else { if (!strcmp( "NO", arg )) { - if (cmdp->param.create && cmd && starts_with( cmd, -1, "[TRYCREATE]", 11 )) { /* APPEND or UID COPY */ + if (cmdp->param.create && cmd && starts_with( cmd, UINT_MAX, "[TRYCREATE]", 11 )) { /* APPEND or UID COPY */ imap_cmd_trycreate_t *cmd2 = (imap_cmd_trycreate_t *)new_imap_cmd( sizeof(*cmd2) ); cmd2->orig_cmd = cmdp; @@ -1514,9 +1515,9 @@ imap_socket_read( void *aux ) } else /*if (!strcmp( "BAD", arg ))*/ resp = RESP_CANCEL; error( "IMAP command '%s' returned an error: %s %s\n", - starts_with( cmdp->cmd, -1, "LOGIN", 5 ) ? + starts_with( cmdp->cmd, UINT_MAX, "LOGIN", 5 ) ? "LOGIN <user> <pass>" : - starts_with( cmdp->cmd, -1, "AUTHENTICATE PLAIN", 18 ) ? + starts_with( cmdp->cmd, UINT_MAX, "AUTHENTICATE PLAIN", 18 ) ? "AUTHENTICATE PLAIN <authdata>" : cmdp->cmd, arg, cmd ? cmd : "" ); @@ -2140,7 +2141,7 @@ imap_open_store_authenticate2( imap_store_t *ctx ) skipped_login = 1; #ifdef HAVE_LIBSASL } else { - int len = strlen( cmech->string ); + uint len = strlen( cmech->string ); if (saslend + len + 2 > saslmechs + sizeof(saslmechs)) oob(); *saslend++ = ' '; @@ -2372,7 +2373,7 @@ imap_get_box_path( store_t *gctx ATTR_UNUSED ) typedef struct { imap_cmd_t gen; - void (*callback)( int sts, int uidvalidity, void *aux ); + void (*callback)( int sts, uint uidvalidity, void *aux ); void *callback_aux; } imap_cmd_open_box_t; @@ -2382,7 +2383,7 @@ static void imap_open_box_p4( imap_store_t *, imap_cmd_open_box_t *, int ); static void imap_open_box( store_t *gctx, - void (*cb)( int sts, int uidvalidity, void *aux ), void *aux ) + void (*cb)( int sts, uint uidvalidity, void *aux ), void *aux ) { imap_store_t *ctx = (imap_store_t *)gctx; imap_cmd_open_box_t *cmd; @@ -2439,7 +2440,7 @@ imap_open_box_p4( imap_store_t *ctx, imap_cmd_open_box_t *cmdp, int response ) cmdp->callback( response, ctx->uidvalidity, cmdp->callback_aux ); } -static int +static uint imap_get_uidnext( store_t *gctx ) { imap_store_t *ctx = (imap_store_t *)gctx; @@ -2521,8 +2522,8 @@ imap_finish_delete_box( store_t *gctx ATTR_UNUSED ) /******************* imap_load_box *******************/ -static int -imap_prepare_load_box( store_t *gctx, int opts ) +static uint +imap_prepare_load_box( store_t *gctx, uint opts ) { imap_store_t *ctx = (imap_store_t *)gctx; @@ -2532,14 +2533,15 @@ imap_prepare_load_box( store_t *gctx, int opts ) enum { WantSize = 1, WantTuids = 2, WantMsgids = 4 }; typedef struct { - int first, last, flags; + uint first, last; + int flags; } imap_range_t; static void -imap_set_range( imap_range_t *ranges, int *nranges, int low_flags, int high_flags, int maxlow ) +imap_set_range( imap_range_t *ranges, uint *nranges, int low_flags, int high_flags, uint maxlow ) { if (low_flags != high_flags) { - for (int r = 0; r < *nranges; r++) { + for (uint r = 0; r < *nranges; r++) { if (ranges[r].first > maxlow) break; /* Range starts above split point; so do all subsequent ranges. */ if (ranges[r].last < maxlow) @@ -2553,7 +2555,7 @@ imap_set_range( imap_range_t *ranges, int *nranges, int low_flags, int high_flag break; } } - for (int r = 0; r < *nranges; r++) + for (uint r = 0; r < *nranges; r++) ranges[r].flags |= (ranges[r].last <= maxlow) ? low_flags : high_flags; } @@ -2571,7 +2573,7 @@ imap_load_box( store_t *gctx, uint minuid, uint maxuid, uint newuid, uint seenui void (*cb)( int sts, message_t *msgs, int total_msgs, int recent_msgs, void *aux ), void *aux ) { imap_store_t *ctx = (imap_store_t *)gctx; - int i, j, bl; + uint i, j, bl; char buf[1000]; if (!ctx->total_msgs) { @@ -2583,11 +2585,11 @@ imap_load_box( store_t *gctx, uint minuid, uint maxuid, uint newuid, uint seenui for (bl = 0; i < excs.size && bl < 960; i++) { if (bl) buf[bl++] = ','; - bl += sprintf( buf + bl, "%u", excs.data[i] ); + bl += (uint)sprintf( buf + bl, "%u", excs.data[i] ); j = i; for (; i + 1 < excs.size && excs.data[i + 1] == excs.data[i] + 1; i++) {} if (i != j) - bl += sprintf( buf + bl, ":%u", excs.data[i] ); + bl += (uint)sprintf( buf + bl, ":%u", excs.data[i] ); } imap_submit_load( ctx, buf, shifted_bit( ctx->opts, OPEN_OLD_IDS, WantMsgids ), sts ); } @@ -2598,7 +2600,7 @@ imap_load_box( store_t *gctx, uint minuid, uint maxuid, uint newuid, uint seenui ranges[0].first = minuid; ranges[0].last = maxuid; ranges[0].flags = 0; - int nranges = 1; + uint nranges = 1; if (ctx->opts & (OPEN_OLD_SIZE | OPEN_NEW_SIZE)) imap_set_range( ranges, &nranges, shifted_bit( ctx->opts, OPEN_OLD_SIZE, WantSize), shifted_bit( ctx->opts, OPEN_NEW_SIZE, WantSize), seenuid ); @@ -2606,7 +2608,7 @@ imap_load_box( store_t *gctx, uint minuid, uint maxuid, uint newuid, uint seenui imap_set_range( ranges, &nranges, 0, WantTuids, newuid - 1 ); if (ctx->opts & OPEN_OLD_IDS) imap_set_range( ranges, &nranges, WantMsgids, 0, seenuid ); - for (int r = 0; r < nranges; r++) { + for (uint r = 0; r < nranges; r++) { sprintf( buf, "%u:%u", ranges[r].first, ranges[r].last ); imap_submit_load( ctx, buf, ranges[r].flags, sts ); } @@ -2632,14 +2634,14 @@ imap_sort_msgs_comp( const void *a_, const void *b_ ) static void imap_sort_msgs( imap_store_t *ctx ) { - int count = count_generic_messages( ctx->msgs ); + uint count = count_generic_messages( ctx->msgs ); if (count <= 1) return; message_t **t = nfmalloc( sizeof(*t) * count ); message_t *m = ctx->msgs; - for (int i = 0; i < count; i++) { + for (uint i = 0; i < count; i++) { t[i] = m; m = m->next; } @@ -2648,7 +2650,7 @@ imap_sort_msgs( imap_store_t *ctx ) ctx->msgs = t[0]; - int j; + uint j; for (j = 0; j < count - 1; j++) t[j]->next = t[j + 1]; ctx->msgapp = &t[j]->next; @@ -2725,7 +2727,7 @@ imap_fetch_msg_p2( imap_store_t *ctx, imap_cmd_t *gcmd, int response ) /******************* imap_set_msg_flags *******************/ -static int +static uint imap_make_flags( int flags, char *buf ) { const char *s; @@ -2901,7 +2903,7 @@ imap_store_msg( store_t *gctx, msg_data_t *data, int to_trash, imap_store_t *ctx = (imap_store_t *)gctx; imap_cmd_out_uid_t *cmd; char *buf; - int d; + uint d; char flagstr[128], datestr[64]; d = 0; @@ -2921,12 +2923,12 @@ imap_store_msg( store_t *gctx, msg_data_t *data, int to_trash, cmd->gen.param.create = 1; cmd->gen.param.to_trash = 1; if (prepare_trash( &buf, ctx ) < 0) { - cb( DRV_BOX_BAD, -1, aux ); + cb( DRV_BOX_BAD, 0, aux ); return; } } else { if (prepare_box( &buf, ctx ) < 0) { - cb( DRV_BOX_BAD, -1, aux ); + cb( DRV_BOX_BAD, 0, aux ); return; } } @@ -3054,7 +3056,7 @@ imap_list_store( store_t *gctx, int flags, // path | P [i] | i [P] | P // int pfx_is_empty = !*ctx->prefix; - int pfx_is_inbox = !pfx_is_empty && is_inbox( ctx, ctx->prefix, -1 ); + int pfx_is_inbox = !pfx_is_empty && is_inbox( ctx, ctx->prefix, UINT_MAX ); if (((flags & (LIST_PATH | LIST_PATH_MAYBE)) || pfx_is_empty) && !pfx_is_inbox && !(ctx->listed & LIST_PATH)) { ctx->listed |= LIST_PATH; if (pfx_is_empty) @@ -3115,7 +3117,7 @@ imap_commit_cmds( store_t *gctx ) /******************* imap_get_memory_usage *******************/ -static int +static uint imap_get_memory_usage( store_t *gctx ) { imap_store_t *ctx = (imap_store_t *)gctx; @@ -3182,16 +3184,16 @@ imap_parse_store( conffile_t *cfg, store_conf_t **storep ) /* The imap[s]: syntax is just a backwards compat hack. */ arg = cfg->val; #ifdef HAVE_LIBSSL - if (starts_with( arg, -1, "imaps:", 6 )) { + if (starts_with( arg, UINT_MAX, "imaps:", 6 )) { arg += 6; server->ssl_type = SSL_IMAPS; if (server->sconf.ssl_versions == -1) server->sconf.ssl_versions = SSLv3 | TLSv1 | TLSv1_1 | TLSv1_2; } else #endif - if (starts_with( arg, -1, "imap:", 5 )) + if (starts_with( arg, UINT_MAX, "imap:", 5 )) arg += 5; - if (starts_with( arg, -1, "//", 2 )) + if (starts_with( arg, UINT_MAX, "//", 2 )) arg += 2; if (arg != cfg->val) warn( "%s:%d: Notice: URL notation is deprecated; use a plain host name and possibly 'SSLType IMAPS' instead\n", cfg->file, cfg->line ); @@ -3426,7 +3428,7 @@ imap_parse_store( conffile_t *cfg, store_conf_t **storep ) return 1; } -static int +static uint imap_get_caps( store_t *gctx ATTR_UNUSED ) { return DRV_CRLF | DRV_VERBOSE; diff --git a/src/drv_maildir.c b/src/drv_maildir.c index 239eaae..8578d91 100644 --- a/src/drv_maildir.c +++ b/src/drv_maildir.c @@ -69,9 +69,8 @@ typedef struct { typedef struct { store_t gen; - uint opts; int uvfd, uvok, is_inbox, fresh[3]; - uint minuid, maxuid, newuid, seenuid, uidvalidity, nuid; + uint opts, minuid, maxuid, newuid, seenuid, uidvalidity, nuid; uint_array_t excs; char *path; /* own */ char *trash; @@ -143,7 +142,7 @@ maildir_join_path( maildir_store_conf_t *conf, int in_inbox, const char *box ) { char *out, *p; const char *prefix; - int pl, bl, n; + uint pl, bl, n; char c; if (in_inbox || conf->sub_style == SUB_MAILDIRPP) { @@ -328,7 +327,7 @@ maildir_list_maildirpp( maildir_store_t *ctx, int flags, const char *inbox ) add_string_list( &ctx->boxes, "INBOX" ); char path[_POSIX_PATH_MAX]; - int pathLen = nfsnprintf( path, _POSIX_PATH_MAX, "%s/", inbox ); + uint pathLen = nfsnprintf( path, _POSIX_PATH_MAX, "%s/", inbox ); if (!(dir = opendir( path ))) { if (errno == ENOENT || errno == ENOTDIR) return 0; @@ -353,7 +352,7 @@ maildir_list_maildirpp( maildir_store_t *ctx, int flags, const char *inbox ) if (!(flags & (LIST_PATH | LIST_PATH_MAYBE))) continue; // Explained in maildir_list_recurse(). - if (starts_with( ent, -1, "INBOX", 5 ) && (!ent[5] || ent[5] == '.')) { + if (starts_with( ent, UINT_MAX, "INBOX", 5 ) && (!ent[5] || ent[5] == '.')) { if (!warned) { warned = 1; path[pathLen] = 0; @@ -363,10 +362,10 @@ maildir_list_maildirpp( maildir_store_t *ctx, int flags, const char *inbox ) } effName += 6; } - nfsnprintf( path + pathLen, _POSIX_PATH_MAX - pathLen, "%s/cur", de->d_name ); + nfsnprintf( path + pathLen, _POSIX_PATH_MAX - (int)pathLen, "%s/cur", de->d_name ); if (!stat( path, &st ) && S_ISDIR(st.st_mode)) { - int nl = nfsnprintf( name, _POSIX_PATH_MAX, "INBOX/%s", ent ); - for (int i = 6; i < nl; i++) { + uint nl = nfsnprintf( name, _POSIX_PATH_MAX, "INBOX/%s", ent ); + for (uint i = 6; i < nl; i++) { if (name[i] == '.') name[i] = '/'; } @@ -386,12 +385,12 @@ static int maildir_list_path( maildir_store_t *ctx, int flags, const char *inbox static int maildir_list_recurse( maildir_store_t *ctx, int isBox, int flags, - const char *inbox, int inboxLen, const char *basePath, int basePathLen, - char *path, int pathLen, char *name, int nameLen ) + const char *inbox, uint inboxLen, const char *basePath, uint basePathLen, + char *path, uint pathLen, char *name, uint nameLen ) { DIR *dir; int style = ((maildir_store_conf_t *)ctx->gen.conf)->sub_style; - int pl, nl; + uint pl, nl; struct dirent *de; struct stat st; @@ -403,7 +402,7 @@ maildir_list_recurse( maildir_store_t *ctx, int isBox, int flags, } if (isBox > 1 && style == SUB_UNSET) { error( "Maildir error: found subfolder '%.*s', but store '%s' does not specify SubFolders style\n", - nameLen - 1, name, ctx->gen.conf->name ); + (int)(nameLen - 1), name, ctx->gen.conf->name ); closedir( dir ); return -1; } @@ -411,7 +410,7 @@ maildir_list_recurse( maildir_store_t *ctx, int isBox, int flags, const char *ent = de->d_name; if (ent[0] == '.' && (!ent[1] || (ent[1] == '.' && !ent[2]))) continue; - pl = nfsnprintf( path + pathLen, _POSIX_PATH_MAX - pathLen, "%s", ent ); + pl = nfsnprintf( path + pathLen, _POSIX_PATH_MAX - (int)pathLen, "%s", ent ); if (pl == 3 && (!memcmp( ent, "cur", 3 ) || !memcmp( ent, "new", 3 ) || !memcmp( ent, "tmp", 3 ))) continue; pl += pathLen; @@ -442,14 +441,14 @@ maildir_list_recurse( maildir_store_t *ctx, int isBox, int flags, // actual INBOX after prefix stripping, so drop it. This applies // only to the fully uppercased spelling, as our canonical box // names are case-sensitive (unlike IMAP's INBOX). - if (!nameLen && equals( ent, -1, "INBOX", 5 )) { + if (!nameLen && equals( ent, UINT_MAX, "INBOX", 5 )) { path[pathLen] = 0; warn( "Maildir warning: ignoring INBOX in %s\n", path ); continue; } - nl = nameLen + nfsnprintf( name + nameLen, _POSIX_PATH_MAX - nameLen, "%s", ent ); + nl = nameLen + nfsnprintf( name + nameLen, _POSIX_PATH_MAX - (int)nameLen, "%s", ent ); path[pl++] = '/'; - nfsnprintf( path + pl, _POSIX_PATH_MAX - pl, "cur" ); + nfsnprintf( path + pl, _POSIX_PATH_MAX - (int)pl, "cur" ); if (!stat( path, &st ) && S_ISDIR(st.st_mode)) add_string_list( &ctx->boxes, name ); path[pl] = 0; @@ -522,7 +521,7 @@ static const char *subdirs[] = { "cur", "new", "tmp" }; typedef struct { char *base; char *msgid; - int size; + uint size; uint uid; uchar recent; char tuid[TUIDL]; @@ -533,7 +532,7 @@ DEFINE_ARRAY_TYPE(msg_t) static void maildir_free_scan( msg_t_array_alloc_t *msglist ) { - int i; + uint i; if (msglist->array.data) { for (i = 0; i < msglist->array.size; i++) @@ -545,7 +544,7 @@ maildir_free_scan( msg_t_array_alloc_t *msglist ) #define _24_HOURS (3600 * 24) static int -maildir_clear_tmp( char *buf, int bufsz, int bl ) +maildir_clear_tmp( char *buf, uint bufsz, uint bl ) { DIR *dirp; struct dirent *entry; @@ -560,7 +559,7 @@ maildir_clear_tmp( char *buf, int bufsz, int bl ) } time( &now ); while ((entry = readdir( dirp ))) { - nfsnprintf( buf + bl, bufsz - bl, "%s", entry->d_name ); + nfsnprintf( buf + bl, (int)bufsz - (int)bl, "%s", entry->d_name ); if (stat( buf, &st )) { if (errno != ENOENT) sys_error( "Maildir error: cannot access %s", buf ); @@ -578,7 +577,7 @@ maildir_clear_tmp( char *buf, int bufsz, int bl ) } static int -make_box_dir( char *buf, int bl ) +make_box_dir( char *buf, uint bl ) { char *p; @@ -586,7 +585,7 @@ make_box_dir( char *buf, int bl ) return 0; p = memrchr( buf, '/', bl - 1 ); *p = 0; - if (make_box_dir( buf, (int)(p - buf) )) + if (make_box_dir( buf, (uint)(p - buf) )) return -1; *p = '/'; return mkdir( buf, 0700 ); @@ -595,11 +594,11 @@ make_box_dir( char *buf, int bl ) static int maildir_validate( const char *box, int create, maildir_store_t *ctx ) { - int i, bl, ret; + int i, ret; struct stat st; char buf[_POSIX_PATH_MAX]; - bl = nfsnprintf( buf, sizeof(buf) - 4, "%s/", box ); + uint bl = nfsnprintf( buf, sizeof(buf) - 4, "%s/", box ); if (stat( buf, &st )) { if (errno != ENOENT) { sys_error( "Maildir error: cannot access mailbox '%s'", box ); @@ -685,7 +684,7 @@ maildir_store_uidval( maildir_store_t *ctx ) { n = sprintf( buf, "%u\n%u\n", ctx->uidvalidity, ctx->nuid ); lseek( ctx->uvfd, 0, SEEK_SET ); - if (write( ctx->uvfd, buf, n ) != n || ftruncate( ctx->uvfd, n ) || (UseFSync && fdatasync( ctx->uvfd ))) { + if (write( ctx->uvfd, buf, (uint)n ) != n || ftruncate( ctx->uvfd, n ) || (UseFSync && fdatasync( ctx->uvfd ))) { error( "Maildir error: cannot write UIDVALIDITY.\n" ); return DRV_BOX_BAD; } @@ -697,7 +696,7 @@ maildir_store_uidval( maildir_store_t *ctx ) static int maildir_init_uidval( maildir_store_t *ctx ) { - ctx->uidvalidity = time( 0 ); + ctx->uidvalidity = (uint)time( 0 ); ctx->nuid = 0; ctx->uvok = 0; #ifdef USE_DB @@ -846,7 +845,8 @@ maildir_compare( const void *l, const void *r ) { const msg_t *lm = (const msg_t *)l, *rm = (const msg_t *)r; char *ldot, *rdot, *ldot2, *rdot2, *lseq, *rseq; - int ret, llen, rlen; + uint llen, rlen; + int ret; if (lm->uid != rm->uid) // Can't subtract, the result might not fit into signed int. return lm->uid > rm->uid ? 1 : -1; @@ -857,21 +857,21 @@ maildir_compare( const void *l, const void *r ) faster than numeric. */ if (!(ldot = strchr( lm->base, '.' )) || !(rdot = strchr( rm->base, '.' ))) goto stronly; /* Should never happen ... */ - llen = ldot - lm->base, rlen = rdot - rm->base; + llen = (uint)(ldot - lm->base), rlen = (uint)(rdot - rm->base); /* The shorter number is smaller. Really. This won't trigger with any mail created after Sep 9 2001 anyway. */ - if ((ret = llen - rlen)) + if ((ret = (int)llen - (int)rlen)) return ret; if ((ret = memcmp( lm->base, rm->base, llen ))) return ret; ldot++, rdot++; - if ((llen = strtol( ldot, &ldot2, 10 ))) { - if (!(rlen = strtol( rdot, &rdot2, 10 ))) + if ((llen = strtoul( ldot, &ldot2, 10 ))) { + if (!(rlen = strtoul( rdot, &rdot2, 10 ))) goto stronly; /* Comparing apples to oranges ... */ /* Classical PID specs */ - if ((ret = llen - rlen)) { + if ((ret = (int)llen - (int)rlen)) { retpid: /* Handle PID wraparound. This works only on systems where PIDs are not reused too fast */ @@ -885,7 +885,7 @@ maildir_compare( const void *l, const void *r ) if (!(ldot2 = strchr( ldot, '.' )) || !(rdot2 = strchr( rdot, '.' ))) goto stronly; /* Should never happen ... */ - llen = ldot2 - ldot, rlen = rdot2 - rdot; + llen = (uint)(ldot2 - ldot), rlen = (uint)(rdot2 - rdot); if (((lseq = memchr( ldot, '#', llen )) && (rseq = memchr( rdot, '#', rlen ))) || ((lseq = memchr( ldot, 'M', llen )) && (rseq = memchr( rdot, 'M', rlen )))) @@ -916,8 +916,8 @@ maildir_scan( maildir_store_t *ctx, msg_t_array_alloc_t *msglist ) DBC *dbc; #endif /* USE_DB */ msg_t *entry; - int i, bl, fnl, ret; - uint uid; + int ret; + uint i, bl, fnl, uid; time_t now, stamps[2]; struct stat st; char buf[_POSIX_PATH_MAX], nbuf[_POSIX_PATH_MAX]; @@ -1116,11 +1116,11 @@ maildir_scan( maildir_store_t *ctx, msg_t_array_alloc_t *msglist ) else u = ru = strchr( entry->base, conf->info_delimiter ); fnl = (u ? - nfsnprintf( buf + bl, sizeof(buf) - bl, "%s/%.*s,U=%u%s", subdirs[entry->recent], (int)(u - entry->base), entry->base, uid, ru ) : - nfsnprintf( buf + bl, sizeof(buf) - bl, "%s/%s,U=%u", subdirs[entry->recent], entry->base, uid )) + nfsnprintf( buf + bl, _POSIX_PATH_MAX - (int)bl, "%s/%.*s,U=%u%s", subdirs[entry->recent], (int)(u - entry->base), entry->base, uid, ru ) : + nfsnprintf( buf + bl, _POSIX_PATH_MAX - (int)bl, "%s/%s,U=%u", subdirs[entry->recent], entry->base, uid )) - 4; memcpy( nbuf, buf, bl + 4 ); - nfsnprintf( nbuf + bl + 4, sizeof(nbuf) - bl - 4, "%s", entry->base ); + nfsnprintf( nbuf + bl + 4, _POSIX_PATH_MAX - (int)bl - 4, "%s", entry->base ); if (rename( nbuf, buf )) { if (errno != ENOENT) { sys_error( "Maildir error: cannot rename %s to %s", nbuf, buf ); @@ -1141,7 +1141,7 @@ maildir_scan( maildir_store_t *ctx, msg_t_array_alloc_t *msglist ) if (!want_size && !want_tuid && !want_msgid) continue; if (!fnl) - nfsnprintf( buf + bl, sizeof(buf) - bl, "%s/%s", subdirs[entry->recent], entry->base ); + nfsnprintf( buf + bl, _POSIX_PATH_MAX - (int)bl, "%s/%s", subdirs[entry->recent], entry->base ); if (want_size) { if (stat( buf, &st )) { if (errno != ENOENT) { @@ -1150,7 +1150,7 @@ maildir_scan( maildir_store_t *ctx, msg_t_array_alloc_t *msglist ) } goto retry; } - entry->size = st.st_size; + entry->size = (uint)st.st_size; } if (want_tuid || want_msgid) { if (!(f = fopen( buf, "r" ))) { @@ -1160,10 +1160,10 @@ maildir_scan( maildir_store_t *ctx, msg_t_array_alloc_t *msglist ) } goto retry; } - int off, in_msgid = 0; + uint off, in_msgid = 0; char lnbuf[1000]; // Says RFC2822 while ((want_tuid || want_msgid) && fgets( lnbuf, sizeof(lnbuf), f )) { - int bufl = strlen( lnbuf ); + uint bufl = strlen( lnbuf ); if (bufl && lnbuf[bufl - 1] == '\n') --bufl; if (bufl && lnbuf[bufl - 1] == '\r') @@ -1255,7 +1255,7 @@ maildir_select_box( store_t *gctx, const char *name ) ctx->usedb = 0; #endif /* USE_DB */ ctx->fresh[0] = ctx->fresh[1] = 0; - if (starts_with( name, -1, "INBOX", 5 ) && (!name[5] || name[5] == '/')) { + if (starts_with( name, UINT_MAX, "INBOX", 5 ) && (!name[5] || name[5] == '/')) { if (!name[5]) { ctx->path = nfstrdup( conf->inbox ); ctx->is_inbox = 1; @@ -1279,7 +1279,7 @@ maildir_get_box_path( store_t *gctx ) static void maildir_open_box( store_t *gctx, - void (*cb)( int sts, int uidvalidity, void *aux ), void *aux ) + void (*cb)( int sts, uint uidvalidity, void *aux ), void *aux ) { maildir_store_t *ctx = (maildir_store_t *)gctx; int ret; @@ -1324,7 +1324,7 @@ maildir_open_box( store_t *gctx, cb( ret, ctx->uidvalidity, aux ); } -static int +static uint maildir_get_uidnext( store_t *gctx ATTR_UNUSED ) { return 0; @@ -1358,11 +1358,11 @@ maildir_delete_box( store_t *gctx, void (*cb)( int sts, void *aux ), void *aux ) { maildir_store_t *ctx = (maildir_store_t *)gctx; - int i, bl, ret = DRV_OK; + int i, ret = DRV_OK; struct stat st; char buf[_POSIX_PATH_MAX]; - bl = nfsnprintf( buf, sizeof(buf) - 4, "%s/", ctx->path ); + uint bl = nfsnprintf( buf, sizeof(buf) - 4, "%s/", ctx->path ); if (stat( buf, &st )) { if (errno != ENOENT) { sys_error( "Maildir error: cannot access mailbox '%s'", ctx->path ); @@ -1372,11 +1372,11 @@ maildir_delete_box( store_t *gctx, error( "Maildir error: '%s' is no valid mailbox\n", ctx->path ); ret = DRV_BOX_BAD; } else if ((ret = maildir_clear_tmp( buf, sizeof(buf), bl )) == DRV_OK) { - nfsnprintf( buf + bl, sizeof(buf) - bl, ".uidvalidity" ); + nfsnprintf( buf + bl, _POSIX_PATH_MAX - (int)bl, ".uidvalidity" ); if (unlink( buf ) && errno != ENOENT) goto badrm; #ifdef USE_DB - nfsnprintf( buf + bl, sizeof(buf) - bl, ".isyncuidmap.db" ); + nfsnprintf( buf + bl, _POSIX_PATH_MAX - (int)bl, ".isyncuidmap.db" ); if (unlink( buf ) && errno != ENOENT) goto badrm; #endif @@ -1409,8 +1409,8 @@ maildir_finish_delete_box( store_t *gctx ) return DRV_OK; } -static int -maildir_prepare_load_box( store_t *gctx, int opts ) +static uint +maildir_prepare_load_box( store_t *gctx, uint opts ) { maildir_store_t *ctx = (maildir_store_t *)gctx; @@ -1429,7 +1429,7 @@ maildir_load_box( store_t *gctx, uint minuid, uint maxuid, uint newuid, uint see maildir_store_t *ctx = (maildir_store_t *)gctx; message_t **msgapp; msg_t_array_alloc_t msglist; - int i; + uint i; ctx->minuid = minuid; ctx->maxuid = maxuid; @@ -1456,7 +1456,7 @@ maildir_rescan( maildir_store_t *ctx ) message_t **msgapp; maildir_message_t *msg; msg_t_array_alloc_t msglist; - int i; + uint i; ctx->fresh[0] = ctx->fresh[1] = 0; if (maildir_scan( ctx, &msglist ) != DRV_OK) @@ -1556,8 +1556,8 @@ maildir_fetch_msg( store_t *gctx, message_t *gmsg, msg_data_t *data, cb( DRV_OK, aux ); } -static int -maildir_make_flags( char info_delimiter, int flags, char *buf ) +static uint +maildir_make_flags( char info_delimiter, uchar flags, char *buf ) { uint i, d; @@ -1577,11 +1577,11 @@ maildir_store_msg( store_t *gctx, msg_data_t *data, int to_trash, { maildir_store_t *ctx = (maildir_store_t *)gctx; const char *box; - int ret, fd, bl; + int ret, fd; uint uid; char buf[_POSIX_PATH_MAX], nbuf[_POSIX_PATH_MAX], fbuf[NUM_FLAGS + 3], base[128]; - bl = nfsnprintf( base, sizeof(base), "%lld.%d_%d.%s", (long long)time( 0 ), Pid, ++MaildirCount, Hostname ); + uint bl = nfsnprintf( base, sizeof(base), "%lld.%d_%d.%s", (long long)time( 0 ), Pid, ++MaildirCount, Hostname ); if (!to_trash) { #ifdef USE_DB if (ctx->usedb) { @@ -1598,7 +1598,7 @@ maildir_store_msg( store_t *gctx, msg_data_t *data, int to_trash, cb( ret, 0, aux ); return; } - nfsnprintf( base + bl, sizeof(base) - bl, ",U=%u", uid ); + nfsnprintf( base + bl, (int)sizeof(base) - (int)bl, ",U=%u", uid ); } box = ctx->path; } else { @@ -1629,7 +1629,7 @@ maildir_store_msg( store_t *gctx, msg_data_t *data, int to_trash, } ret = write( fd, data->data, data->len ); free( data->data ); - if (ret != data->len || (UseFSync && (ret = fsync( fd )))) { + if (ret != (int)data->len || (UseFSync && (ret = fsync( fd )))) { if (ret < 0) sys_error( "Maildir error: cannot write %s", buf ); else @@ -1681,27 +1681,27 @@ maildir_set_msg_flags( store_t *gctx, message_t *gmsg, uint uid ATTR_UNUSED, int maildir_store_t *ctx = (maildir_store_t *)gctx; maildir_message_t *msg = (maildir_message_t *)gmsg; char *s, *p; - uint i; - int j, ret, ol, fl, bbl, bl, tl; + uint i, j, ol, fl, bbl, bl, tl; + int ret; char buf[_POSIX_PATH_MAX], nbuf[_POSIX_PATH_MAX]; - bbl = nfsnprintf( buf, sizeof(buf), "%s/", ctx->path ); + bbl = nfsnprintf( buf, _POSIX_PATH_MAX, "%s/", ctx->path ); memcpy( nbuf, ctx->path, bbl - 1 ); memcpy( nbuf + bbl - 1, "/cur/", 5 ); for (;;) { - bl = bbl + nfsnprintf( buf + bbl, sizeof(buf) - bbl, "%s/", subdirs[gmsg->status & M_RECENT] ); + bl = bbl + nfsnprintf( buf + bbl, _POSIX_PATH_MAX - (int)bbl, "%s/", subdirs[gmsg->status & M_RECENT] ); ol = strlen( msg->base ); - if ((int)sizeof(buf) - bl < ol + 3 + NUM_FLAGS) + if (_POSIX_PATH_MAX - bl < ol + 3 + NUM_FLAGS) oob(); memcpy( buf + bl, msg->base, ol + 1 ); memcpy( nbuf + bl, msg->base, ol + 1 ); if ((s = strstr( nbuf + bl, conf->info_prefix ))) { s += 3; - fl = ol - (s - (nbuf + bl)); + fl = ol - (uint)(s - (nbuf + bl)); for (i = 0; i < as(Flags); i++) { if ((p = strchr( s, Flags[i] ))) { if (del & (1 << i)) { - memmove( p, p + 1, fl - (p - s) ); + memmove( p, p + 1, fl - (uint)(p - s) ); fl--; } } else if (add & (1 << i)) { @@ -1802,15 +1802,15 @@ maildir_close_box( store_t *gctx, { maildir_store_t *ctx = (maildir_store_t *)gctx; message_t *msg; - int basel, retry, ret; + int retry, ret; char buf[_POSIX_PATH_MAX]; for (;;) { retry = 0; - basel = nfsnprintf( buf, sizeof(buf), "%s/", ctx->path ); + uint basel = nfsnprintf( buf, sizeof(buf), "%s/", ctx->path ); for (msg = ctx->msgs; msg; msg = msg->next) if (!(msg->status & M_DEAD) && (msg->flags & F_DELETED)) { - nfsnprintf( buf + basel, sizeof(buf) - basel, "%s/%s", subdirs[msg->status & M_RECENT], ((maildir_message_t *)msg)->base ); + nfsnprintf( buf + basel, _POSIX_PATH_MAX - (int)basel, "%s/%s", subdirs[msg->status & M_RECENT], ((maildir_message_t *)msg)->base ); if (unlink( buf )) { if (errno == ENOENT) retry = 1; @@ -1851,7 +1851,7 @@ maildir_commit_cmds( store_t *gctx ) (void) gctx; } -static int +static uint maildir_get_memory_usage( store_t *gctx ATTR_UNUSED ) { return 0; @@ -1921,7 +1921,7 @@ maildir_parse_store( conffile_t *cfg, store_conf_t **storep ) return 1; } -static int +static uint maildir_get_caps( store_t *gctx ATTR_UNUSED ) { return 0; /* XXX DRV_CRLF? */ diff --git a/src/drv_proxy.c b/src/drv_proxy.c index 6a62f22..add74d3 100644 --- a/src/drv_proxy.c +++ b/src/drv_proxy.c @@ -27,7 +27,7 @@ typedef struct { store_t gen; const char *label; // foreign - int ref_count; + uint ref_count; driver_t *real_driver; store_t *real_store; @@ -58,7 +58,7 @@ debugn( const char *msg, ... ) static const char Flags[] = { 'D', 'F', 'R', 'S', 'T' }; static char * -proxy_make_flags( int flags, char *buf ) +proxy_make_flags( uchar flags, char *buf ) { uint i, d; @@ -79,13 +79,13 @@ proxy_store_deref( proxy_store_t *ctx ) static int curr_tag; typedef struct { - int ref_count; + uint ref_count; int tag; proxy_store_t *ctx; } gen_cmd_t; static gen_cmd_t * -proxy_cmd_new( proxy_store_t *ctx, int sz ) +proxy_cmd_new( proxy_store_t *ctx, uint sz ) { gen_cmd_t *cmd = nfmalloc( sz ); cmd->ref_count = 2; @@ -200,8 +200,8 @@ proxy_@name@( store_t *gctx@decl_args@, void (*cb)( @decl_cb_args@void *aux ), v //# DEFINE load_box_print_args if (excs.size) { debugn( " excs:" ); - for (int t = 0; t < excs.size; t++) - debugn( " %d", excs.data[t] ); + for (uint t = 0; t < excs.size; t++) + debugn( " %u", excs.data[t] ); debug( "\n" ); } //# END @@ -213,7 +213,7 @@ proxy_@name@( store_t *gctx@decl_args@, void (*cb)( @decl_cb_args@void *aux ), v //# DEFINE load_box_print_cb_args if (sts == DRV_OK) { for (message_t *msg = msgs; msg; msg = msg->next) - debug( " uid=%5u, flags=%4s, size=%6d, tuid=%." stringify(TUIDL) "s\n", + debug( " uid=%5u, flags=%4s, size=%6u, tuid=%." stringify(TUIDL) "s\n", msg->uid, (msg->status & M_FLAGS) ? (proxy_make_flags( msg->flags, fbuf ), fbuf) : "?", msg->size, *msg->tuid ? msg->tuid : "?" ); } //# END @@ -239,7 +239,7 @@ proxy_@name@( store_t *gctx@decl_args@, void (*cb)( @decl_cb_args@void *aux ), v static char fbuf[as(Flags) + 1]; proxy_make_flags( cmd->data->flags, fbuf ); //# END -//# DEFINE fetch_msg_print_fmt_cb_args , flags=%s, date=%lld, size=%d +//# DEFINE fetch_msg_print_fmt_cb_args , flags=%s, date=%lld, size=%u //# DEFINE fetch_msg_print_pass_cb_args , fbuf, (long long)cmd->data->date, cmd->data->len //# DEFINE fetch_msg_print_cb_args if (sts == DRV_OK && (DFlags & DEBUG_DRV_ALL)) { @@ -254,7 +254,7 @@ proxy_@name@( store_t *gctx@decl_args@, void (*cb)( @decl_cb_args@void *aux ), v static char fbuf[as(Flags) + 1]; proxy_make_flags( data->flags, fbuf ); //# END -//# DEFINE store_msg_print_fmt_args , flags=%s, date=%lld, size=%d, to_trash=%s +//# DEFINE store_msg_print_fmt_args , flags=%s, date=%lld, size=%u, to_trash=%s //# DEFINE store_msg_print_pass_args , fbuf, (long long)data->date, data->len, to_trash ? "yes" : "no" //# DEFINE store_msg_print_args if (DFlags & DEBUG_DRV_ALL) { diff --git a/src/main.c b/src/main.c index 58d5910..517e9e0 100644 --- a/src/main.c +++ b/src/main.c @@ -25,6 +25,7 @@ #include <stdlib.h> #include <stddef.h> #include <unistd.h> +#include <limits.h> #include <string.h> #include <fcntl.h> #include <signal.h> @@ -44,7 +45,7 @@ int Pid; /* for maildir and imap */ char Hostname[256]; /* for maildir */ const char *Home; /* for config */ -int BufferLimit = 10 * 1024 * 1024; +uint BufferLimit = 10 * 1024 * 1024; static int chans_total, chans_done; static int boxes_total, boxes_done; @@ -220,7 +221,7 @@ matches( const char *t, const char *p ) static int is_inbox( const char *name ) { - return starts_with( name, -1, "INBOX", 5 ) && (!name[5] || name[5] == '/'); + return starts_with( name, UINT_MAX, "INBOX", 5 ) && (!name[5] || name[5] == '/'); } static int @@ -242,11 +243,11 @@ filter_boxes( string_list_t *boxes, const char *prefix, string_list_t *patterns string_list_t *cpat; char **boxarr = 0; const char *ps; - int not, fnot, pfxl, num = 0, rnum = 0; + uint not, fnot, pfxl, num = 0, rnum = 0; pfxl = prefix ? strlen( prefix ) : 0; for (; boxes; boxes = boxes->next) { - if (!starts_with( boxes->string, -1, prefix, pfxl )) + if (!starts_with( boxes->string, UINT_MAX, prefix, pfxl )) continue; fnot = 1; for (cpat = patterns; cpat; cpat = cpat->next) { @@ -328,7 +329,8 @@ add_named_channel( chan_ent_t ***chanapp, char *channame, int ops[] ) chan_ent_t *ce; box_ent_t *boxes = 0, **mboxapp = &boxes, *mbox; char *boxp, *nboxp; - int boxl, boxlist = 0; + size_t boxl; + char boxlist = 0; if ((boxp = strchr( channame, ':' ))) *boxp++ = 0; @@ -347,7 +349,7 @@ add_named_channel( chan_ent_t ***chanapp, char *channame, int ops[] ) do { nboxp = strpbrk( boxp, ",\n" ); if (nboxp) { - boxl = nboxp - boxp; + boxl = (uint)(nboxp - boxp); *nboxp++ = 0; } else { boxl = strlen( boxp ); @@ -440,7 +442,7 @@ main( int argc, char **argv ) return 1; } config = argv[oind++]; - } else if (starts_with( opt, -1, "config=", 7 )) + } else if (starts_with( opt, UINT_MAX, "config=", 7 )) config = opt + 7; else if (!strcmp( opt, "all" )) mvars->all = 1; @@ -457,7 +459,7 @@ main( int argc, char **argv ) DFlags |= QUIET; } else if (!strcmp( opt, "verbose" )) { DFlags |= VERBOSE; - } else if (starts_with( opt, -1, "debug", 5 )) { + } else if (starts_with( opt, UINT_MAX, "debug", 5 )) { opt += 5; if (!*opt) op = VERBOSE | DEBUG_ALL; @@ -484,7 +486,7 @@ main( int argc, char **argv ) cops |= XOP_PULL, ops[M] |= XOP_HAVE_TYPE; else if (!strcmp( opt, "push" )) cops |= XOP_PUSH, ops[M] |= XOP_HAVE_TYPE; - else if (starts_with( opt, -1, "create", 6 )) { + else if (starts_with( opt, UINT_MAX, "create", 6 )) { opt += 6; op = OP_CREATE|XOP_HAVE_CREATE; lcop: @@ -497,11 +499,11 @@ main( int argc, char **argv ) else goto badopt; ops[M] |= op & (XOP_HAVE_CREATE|XOP_HAVE_REMOVE|XOP_HAVE_EXPUNGE); - } else if (starts_with( opt, -1, "remove", 6 )) { + } else if (starts_with( opt, UINT_MAX, "remove", 6 )) { opt += 6; op = OP_REMOVE|XOP_HAVE_REMOVE; goto lcop; - } else if (starts_with( opt, -1, "expunge", 7 )) { + } else if (starts_with( opt, UINT_MAX, "expunge", 7 )) { opt += 7; op = OP_EXPUNGE|XOP_HAVE_EXPUNGE; goto lcop; @@ -515,7 +517,7 @@ main( int argc, char **argv ) ops[M] |= XOP_HAVE_TYPE|XOP_PULL|XOP_PUSH; else if (!strcmp( opt, "noop" )) ops[M] |= XOP_HAVE_TYPE; - else if (starts_with( opt, -1, "pull", 4 )) { + else if (starts_with( opt, UINT_MAX, "pull", 4 )) { op = XOP_PULL; lcac: opt += 4; @@ -526,7 +528,7 @@ main( int argc, char **argv ) goto rlcac; } else goto badopt; - } else if (starts_with( opt, -1, "push", 4 )) { + } else if (starts_with( opt, UINT_MAX, "push", 4 )) { op = XOP_PUSH; goto lcac; } else { @@ -972,7 +974,7 @@ store_connected( int sts, void *aux ) const char *pat = cpat->string; if (*pat != '!') { char buf[8]; - int bufl = snprintf( buf, sizeof(buf), "%s%s", nz( mvars->chan->boxes[t], "" ), pat ); + uint bufl = nfsnprintf( buf, sizeof(buf), "%s%s", nz( mvars->chan->boxes[t], "" ), pat ); int flags = 0; /* Partial matches like "INB*" or even "*" are not considered, * except implicity when the INBOX lives under Path. */ diff --git a/src/socket.c b/src/socket.c index 406e7d4..d7a2173 100644 --- a/src/socket.c +++ b/src/socket.c @@ -236,7 +236,6 @@ DIAG_PUSH DIAG_DISABLE("-Wcast-qual") // C has no 'mutable' or const_cast<> ... server_conf_t *mconf = (server_conf_t *)conf; DIAG_POP - int options = 0; if (conf->SSLContext) return conf->ssl_ctx_valid; @@ -251,6 +250,7 @@ DIAG_POP return 0; } + uint options = 0; if (!(conf->ssl_versions & SSLv3)) options |= SSL_OP_NO_SSLv3; if (!(conf->ssl_versions & TLSv1)) @@ -665,9 +665,9 @@ socket_close( conn_t *sock ) } static int -prepare_read( conn_t *sock, char **buf, int *len ) +prepare_read( conn_t *sock, char **buf, uint *len ) { - int n = sock->offset + sock->bytes; + uint n = sock->offset + sock->bytes; if (!(*len = sizeof(sock->buf) - n)) { error( "Socket error: receive buffer full. Probably protocol error.\n" ); socket_fail( sock ); @@ -678,7 +678,7 @@ prepare_read( conn_t *sock, char **buf, int *len ) } static int -do_read( conn_t *sock, char *buf, int len ) +do_read( conn_t *sock, char *buf, uint len ) { int n; @@ -687,10 +687,10 @@ do_read( conn_t *sock, char *buf, int len ) conf_wakeup( &sock->fd_timeout, sock->conf->timeout ); #ifdef HAVE_LIBSSL if (sock->ssl) { - if ((n = ssl_return( "read from", sock, SSL_read( sock->ssl, buf, len ) )) <= 0) + if ((n = ssl_return( "read from", sock, SSL_read( sock->ssl, buf, (int)len ) )) <= 0) return n; - if (n == len && SSL_pending( sock->ssl )) + if (n == (int)len && SSL_pending( sock->ssl )) conf_wakeup( &sock->ssl_fake, 0 ); } else #endif @@ -713,7 +713,8 @@ static void socket_fill_z( conn_t *sock ) { char *buf; - int len, ret; + uint len; + int ret; if (prepare_read( sock, &buf, &len ) < 0) return; @@ -733,7 +734,7 @@ socket_fill_z( conn_t *sock ) if (!sock->in_z->avail_out) conf_wakeup( &sock->z_fake, 0 ); - if ((len = (char *)sock->in_z->next_out - buf)) { + if ((len = (uint)((char *)sock->in_z->next_out - buf))) { sock->bytes += len; sock->read_callback( sock->callback_aux ); } @@ -751,21 +752,22 @@ socket_fill( conn_t *sock ) sock->in_z->next_in = (uchar *)sock->z_buf; if ((ret = do_read( sock, sock->z_buf, sizeof(sock->z_buf) )) <= 0) return; - sock->in_z->avail_in = ret; + sock->in_z->avail_in = (uint)ret; socket_fill_z( sock ); } else #endif { char *buf; - int len; + uint len; if (prepare_read( sock, &buf, &len ) < 0) return; - if ((len = do_read( sock, buf, len )) <= 0) + int n; + if ((n = do_read( sock, buf, len )) <= 0) return; - sock->bytes += len; + sock->bytes += (uint)n; sock->read_callback( sock->callback_aux ); } } @@ -778,9 +780,9 @@ socket_expect_read( conn_t *conn, int expect ) } int -socket_read( conn_t *conn, char *buf, int len ) +socket_read( conn_t *conn, char *buf, uint len ) { - int n = conn->bytes; + uint n = conn->bytes; if (!n && conn->state == SCK_EOF) return -1; if (n > len) @@ -790,14 +792,14 @@ socket_read( conn_t *conn, char *buf, int len ) conn->offset = 0; else conn->offset += n; - return n; + return (int)n; } char * socket_read_line( conn_t *b ) { char *p, *s; - int n; + uint n; s = b->buf + b->offset; p = memchr( s + b->scanoff, '\n', b->bytes - b->scanoff ); @@ -811,7 +813,7 @@ socket_read_line( conn_t *b ) return (void *)~0; return 0; } - n = p + 1 - s; + n = (uint)(p + 1 - s); b->offset += n; b->bytes -= n; b->scanoff = 0; @@ -822,14 +824,14 @@ socket_read_line( conn_t *b ) } static int -do_write( conn_t *sock, char *buf, int len ) +do_write( conn_t *sock, char *buf, uint len ) { int n; assert( sock->fd >= 0 ); #ifdef HAVE_LIBSSL if (sock->ssl) - return ssl_return( "write to", sock, SSL_write( sock->ssl, buf, len ) ); + return ssl_return( "write to", sock, SSL_write( sock->ssl, buf, (int)len ) ); #endif n = write( sock->fd, buf, len ); if (n < 0) { @@ -840,7 +842,7 @@ do_write( conn_t *sock, char *buf, int len ) n = 0; conf_notifier( &sock->notify, POLLIN, POLLOUT ); } - } else if (n != len) { + } else if (n != (int)len) { conf_notifier( &sock->notify, POLLIN, POLLOUT ); } return n; @@ -865,11 +867,12 @@ do_queued_write( conn_t *conn ) return 0; while ((bc = conn->write_buf)) { - int n, len = bc->len - conn->write_offset; + int n; + uint len = bc->len - conn->write_offset; if ((n = do_write( conn, bc->data + conn->write_offset, len )) < 0) return -1; - if (n != len) { - conn->write_offset += n; + if (n != (int)len) { + conn->write_offset += (uint)n; conn->writing = 1; return 0; } @@ -904,7 +907,7 @@ do_flush( conn_t *conn ) buff_chunk_t *bc = conn->append_buf; #ifdef HAVE_LIBZ if (conn->out_z) { - int buf_avail = conn->append_avail; + uint buf_avail = conn->append_avail; if (!conn->z_written) return; do { @@ -925,7 +928,7 @@ do_flush( conn_t *conn ) error( "Fatal: Compression error: %s\n", z_err_msg( ret, conn->out_z ) ); abort(); } - bc->len = (char *)conn->out_z->next_out - bc->data; + bc->len = (uint)((char *)conn->out_z->next_out - bc->data); if (bc->len) { do_append( conn, bc ); bc = 0; @@ -951,7 +954,8 @@ do_flush( conn_t *conn ) void socket_write( conn_t *conn, conn_iovec_t *iov, int iovcnt ) { - int i, buf_avail, len, offset = 0, total = 0; + int i; + uint buf_avail, len, offset = 0, total = 0; buff_chunk_t *bc; for (i = 0; i < iovcnt; i++) @@ -995,7 +999,7 @@ socket_write( conn_t *conn, conn_iovec_t *iov, int iovcnt ) error( "Fatal: Compression error: %s\n", z_err_msg( ret, conn->out_z ) ); abort(); } - bc->len = (char *)conn->out_z->next_out - bc->data; + bc->len = (uint)((char *)conn->out_z->next_out - bc->data); buf_avail = conn->out_z->avail_out; len -= conn->out_z->avail_in; conn->z_written = 1; diff --git a/src/socket.h b/src/socket.h index f80c2ef..82dea29 100644 --- a/src/socket.h +++ b/src/socket.h @@ -61,7 +61,7 @@ typedef struct { typedef struct buff_chunk { struct buff_chunk *next; - int len; + uint len; char data[1]; } buff_chunk_t; @@ -104,15 +104,15 @@ typedef struct { buff_chunk_t *write_buf, **write_buf_append; /* buffer head & tail */ int writing; #ifdef HAVE_LIBZ - int append_avail; /* space left in accumulating buffer */ + uint append_avail; /* space left in accumulating buffer */ #endif - int write_offset; /* offset into buffer head */ - int buffer_mem; /* memory currently occupied by buffers in the queue */ + uint write_offset; /* offset into buffer head */ + uint buffer_mem; /* memory currently occupied by buffers in the queue */ /* reading */ - int offset; /* start of filled bytes in buffer */ - int bytes; /* number of filled bytes in buffer */ - int scanoff; /* offset to continue scanning for newline at, relative to 'offset' */ + uint offset; /* start of filled bytes in buffer */ + uint bytes; /* number of filled bytes in buffer */ + uint scanoff; /* offset to continue scanning for newline at, relative to 'offset' */ char buf[100000]; #ifdef HAVE_LIBZ char z_buf[100000]; @@ -141,12 +141,12 @@ void socket_start_tls(conn_t *conn, void (*cb)( int ok, void *aux ) ); void socket_start_deflate( conn_t *conn ); void socket_close( conn_t *sock ); void socket_expect_read( conn_t *sock, int expect ); -int socket_read( conn_t *sock, char *buf, int len ); /* never waits */ +int socket_read( conn_t *sock, char *buf, uint len ); /* never waits */ char *socket_read_line( conn_t *sock ); /* don't free return value; never waits */ typedef enum { KeepOwn = 0, GiveOwn } ownership_t; typedef struct { char *buf; - int len; + uint len; ownership_t takeOwn; } conn_iovec_t; void socket_write( conn_t *sock, conn_iovec_t *iov, int iovcnt ); diff --git a/src/sync.c b/src/sync.c index 3beed27..d353bf3 100644 --- a/src/sync.c +++ b/src/sync.c @@ -99,10 +99,11 @@ Fprintf( FILE *f, const char *msg, ... ) static const char Flags[] = { 'D', 'F', 'R', 'S', 'T' }; -static int +static uchar parse_flags( const char *buf ) { - uint flags, i, d; + uint i, d; + uchar flags; for (flags = i = d = 0; i < as(Flags); i++) if (buf[d] == Flags[i]) { @@ -112,8 +113,8 @@ parse_flags( const char *buf ) return flags; } -static int -make_flags( int flags, char *buf ) +static uint +make_flags( uchar flags, char *buf ) { uint i, d; @@ -159,8 +160,9 @@ typedef struct { const char *orig_name[2]; message_t *msgs[2], *new_msgs[2]; uint_array_alloc_t trashed_msgs[2]; - int state[2], opts[2], ref_count, nsrecs, ret, lfd, existing, replayed; - int new_pending[2], flags_pending[2], trash_pending[2]; + int state[2], lfd, ret, existing, replayed; + uint ref_count, nsrecs, opts[2]; + uint new_pending[2], flags_pending[2], trash_pending[2]; uint maxuid[2]; // highest UID that was already propagated uint newmaxuid[2]; // highest UID that is currently being propagated uint uidval[2]; // UID validity value @@ -303,10 +305,10 @@ copy_msg( copy_vars_t *vars ) static void msg_stored( int sts, uint uid, void *aux ); static void -copy_msg_bytes( char **out_ptr, const char *in_buf, int *in_idx, int in_len, int in_cr, int out_cr ) +copy_msg_bytes( char **out_ptr, const char *in_buf, uint *in_idx, uint in_len, int in_cr, int out_cr ) { char *out = *out_ptr; - int idx = *in_idx; + uint idx = *in_idx; if (out_cr != in_cr) { char c; if (out_cr) { @@ -336,13 +338,13 @@ static int copy_msg_convert( int in_cr, int out_cr, copy_vars_t *vars ) { char *in_buf = vars->data.data; - int in_len = vars->data.len; - int idx = 0, sbreak = 0, ebreak = 0; - int lines = 0, hdr_crs = 0, bdy_crs = 0, app_cr = 0, extra = 0; + uint in_len = vars->data.len; + uint idx = 0, sbreak = 0, ebreak = 0; + uint lines = 0, hdr_crs = 0, bdy_crs = 0, app_cr = 0, extra = 0; if (vars->srec) { nloop: ; - int start = idx; - int line_crs = 0; + uint start = idx; + uint line_crs = 0; while (idx < in_len) { char c = in_buf[idx++]; if (c == '\r') { @@ -570,7 +572,7 @@ static char * clean_strdup( const char *s ) { char *cs; - int i; + uint i; cs = nfstrdup( s ); for (i = 0; cs[i]; i++) @@ -690,7 +692,7 @@ load_state( sync_vars_t *svars ) sync_rec_t *srec, *nsrec; char *s; FILE *jfp; - int ll; + uint ll; uint smaxxuid = 0; char c; struct stat st; @@ -864,7 +866,7 @@ load_state( sync_vars_t *svars ) int tn; uint t1, t2, t3; if ((c = buf[0]) == '#' ? - (tn = 0, (sscanf( buf + 2, "%u %u %n", &t1, &t2, &tn ) < 2) || !tn || (ll - tn != TUIDL + 2)) : + (tn = 0, (sscanf( buf + 2, "%u %u %n", &t1, &t2, &tn ) < 2) || !tn || (ll - (uint)tn != TUIDL + 2)) : c == 'S' || c == '!' ? (sscanf( buf + 2, "%u", &t1 ) != 1) : c == 'F' || c == 'T' || c == '+' || c == '&' || c == '-' || c == '=' || c == '|' ? @@ -983,11 +985,11 @@ delete_state( sync_vars_t *svars ) } } -static void box_confirmed( int sts, int uidvalidity, void *aux ); +static void box_confirmed( int sts, uint uidvalidity, void *aux ); static void box_confirmed2( sync_vars_t *svars, int t ); static void box_deleted( int sts, void *aux ); static void box_created( int sts, void *aux ); -static void box_opened( int sts, int uidvalidity, void *aux ); +static void box_opened( int sts, uint uidvalidity, void *aux ); static void box_opened2( sync_vars_t *svars, int t ); static void load_box( sync_vars_t *svars, int t, uint minwuid, uint_array_t mexcs ); @@ -1063,7 +1065,7 @@ sync_boxes( store_t *ctx[], const char * const names[], int present[], channel_c } static void -box_confirmed( int sts, int uidvalidity, void *aux ) +box_confirmed( int sts, uint uidvalidity, void *aux ) { DECL_SVARS; @@ -1164,7 +1166,7 @@ box_created( int sts, void *aux ) } static void -box_opened( int sts, int uidvalidity, void *aux ) +box_opened( int sts, uint uidvalidity, void *aux ) { DECL_SVARS; @@ -1192,8 +1194,7 @@ box_opened2( sync_vars_t *svars, int t ) channel_conf_t *chan; sync_rec_t *srec; uint_array_alloc_t mexcs; - uint minwuid; - int opts[2], fails; + uint opts[2], fails, minwuid; svars->state[t] |= ST_SELECTED; if (!(svars->state[1-t] & ST_SELECTED)) @@ -1252,7 +1253,7 @@ box_opened2( sync_vars_t *svars, int t ) opts[1-t] |= OPEN_NEW; if (chan->ops[t] & OP_EXPUNGE) // Don't propagate doomed msgs opts[1-t] |= OPEN_FLAGS; - if (chan->stores[t]->max_size != INT_MAX) { // Propagate previously too big msgs + if (chan->stores[t]->max_size != UINT_MAX) { // Propagate previously too big msgs if (chan->ops[t] & OP_RENEW) opts[1-t] |= OPEN_OLD_SIZE; if (chan->ops[t] & OP_NEW) @@ -1281,7 +1282,7 @@ box_opened2( sync_vars_t *svars, int t ) else if (!srec->uid[S]) opts[S] |= OPEN_NEW|OPEN_FIND, svars->state[S] |= ST_FIND_OLD; else - warn( "Warning: sync record (%d,%d) has stray TUID. Ignoring.\n", srec->uid[M], srec->uid[S] ); + warn( "Warning: sync record (%u,%u) has stray TUID. Ignoring.\n", srec->uid[M], srec->uid[S] ); } } svars->opts[M] = svars->drv[M]->prepare_load_box( ctx[M], opts[M] ); @@ -1323,7 +1324,7 @@ box_opened2( sync_vars_t *svars, int t ) sync_deref( svars ); } -static int +static uint get_seenuid( sync_vars_t *svars, int t ) { uint seenuid = 0; @@ -1624,7 +1625,7 @@ box_loaded( int sts, message_t *msgs, int total_msgs, int recent_msgs, void *aux if (srec->status != S_PENDING) { debug( " -> not too big any more\n" ); srec->status = S_PENDING; - jFprintf( svars, "~ %d %d %u\n", srec->uid[M], srec->uid[S], srec->status ); + jFprintf( svars, "~ %u %u %u\n", srec->uid[M], srec->uid[S], srec->status ); } } else { if (srec->status == S_SKIPPED) { @@ -1632,7 +1633,7 @@ box_loaded( int sts, message_t *msgs, int total_msgs, int recent_msgs, void *aux } else { debug( " -> not %sing - too big\n", str_hl[t] ); srec->status = S_SKIPPED; - jFprintf( svars, "~ %d %d %u\n", srec->uid[M], srec->uid[S], srec->status ); + jFprintf( svars, "~ %u %u %u\n", srec->uid[M], srec->uid[S], srec->status ); } } } @@ -1709,7 +1710,7 @@ box_loaded( int sts, message_t *msgs, int total_msgs, int recent_msgs, void *aux } } debug( "%d excess messages remain\n", todel ); - if (svars->chan->expire_unread < 0 && (uint)alive * 2 > svars->chan->max_messages) { + if (svars->chan->expire_unread < 0 && alive * 2 > svars->chan->max_messages) { error( "%s: %d unread messages in excess of MaxMessages (%d).\n" "Please set ExpireUnread to decide outcome. Skipping mailbox.\n", svars->orig_name[S], alive, svars->chan->max_messages ); @@ -2187,8 +2188,8 @@ box_closed_p2( sync_vars_t *svars, int t ) // This is just an optimization, so it needs no journaling of intermediate states. // However, doing it before the entry purge would require ensuring that the // exception list includes all relevant messages. - debug( "max expired uid on master is now %d\n", svars->mmaxxuid ); - jFprintf( svars, "! %d\n", svars->mmaxxuid ); + debug( "max expired uid on master is now %u\n", svars->mmaxxuid ); + jFprintf( svars, "! %u\n", svars->mmaxxuid ); save_state( svars ); diff --git a/src/sync.h b/src/sync.h index 9b904c3..b98d186 100644 --- a/src/sync.h +++ b/src/sync.h @@ -52,7 +52,7 @@ typedef struct channel_conf { char *sync_state; string_list_t *patterns; int ops[2]; - uint max_messages; /* for slave only */ + int max_messages; /* for slave only */ signed char expire_unread; char use_internal_date; } channel_conf_t; diff --git a/src/util.c b/src/util.c index de94cb9..2c22db3 100644 --- a/src/util.c +++ b/src/util.c @@ -23,6 +23,7 @@ #include "common.h" #include <assert.h> +#include <limits.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> @@ -163,7 +164,7 @@ sys_error( const char *msg, ... ) } void -add_string_list_n( string_list_t **list, const char *str, int len ) +add_string_list_n( string_list_t **list, const char *str, uint len ) { string_list_t *elem; @@ -232,32 +233,30 @@ strnlen( const char *str, size_t maxlen ) #endif int -starts_with( const char *str, int strl, const char *cmp, int cmpl ) +starts_with( const char *str, uint strl, const char *cmp, uint cmpl ) { - if (strl < 0) + if (strl == UINT_MAX) strl = strnlen( str, cmpl + 1 ); return (strl >= cmpl) && !memcmp( str, cmp, cmpl ); } int -starts_with_upper( const char *str, int strl, const char *cmp, int cmpl ) +starts_with_upper( const char *str, uint strl, const char *cmp, uint cmpl ) { - int i; - - if (strl < 0) + if (strl == UINT_MAX) strl = strnlen( str, cmpl + 1 ); if (strl < cmpl) return 0; - for (i = 0; i < cmpl; i++) + for (uint i = 0; i < cmpl; i++) if (str[i] != cmp[i] && toupper( str[i] ) != cmp[i]) return 0; return 1; } int -equals( const char *str, int strl, const char *cmp, int cmpl ) +equals( const char *str, uint strl, const char *cmp, uint cmpl ) { - if (strl < 0) + if (strl == UINT_MAX) strl = strnlen( str, cmpl + 1 ); return (strl == cmpl) && !memcmp( str, cmp, cmpl ); } @@ -334,14 +333,14 @@ oob( void ) abort(); } -int +uint nfsnprintf( char *buf, int blen, const char *fmt, ... ) { - int ret; + uint ret; va_list va; va_start( va, fmt ); - if (blen <= 0 || (uint)(ret = vsnprintf( buf, blen, fmt, va )) >= (uint)blen) + if (blen <= 0 || (ret = (uint)vsnprintf( buf, (uint)blen, fmt, va )) >= (uint)blen) oob(); va_end( va ); return ret; @@ -399,19 +398,19 @@ nfstrdup( const char *str ) return nfstrndup( str, strlen( str ) ); } -int +uint nfvasprintf( char **str, const char *fmt, va_list va ) { int ret = vasprintf( str, fmt, va ); if (ret < 0) oom(); - return ret; + return (uint)ret; } -int +uint nfasprintf( char **str, const char *fmt, ... ) { - int ret; + uint ret; va_list va; va_start( va, fmt ); @@ -457,7 +456,7 @@ expand_strdup( const char *s ) q = Home; } else { if ((p = strchr( s, '/' ))) { - r = nfstrndup( s, (int)(p - s) ); + r = nfstrndup( s, (uint)(p - s) ); pw = getpwnam( r ); free( r ); } else @@ -474,10 +473,10 @@ expand_strdup( const char *s ) /* Return value: 0 = ok, -1 = out found in arg, -2 = in found in arg but no out specified */ int -map_name( const char *arg, char **result, int reserve, const char *in, const char *out ) +map_name( const char *arg, char **result, uint reserve, const char *in, const char *out ) { char *p; - int i, l, ll, num, inl, outl; + uint i, l, ll, num, inl, outl; assert( arg ); l = strlen( arg ); @@ -549,9 +548,9 @@ sort_uint_array( uint_array_t array ) int find_uint_array( uint_array_t array, uint value ) { - int bot = 0, top = array.size; + uint bot = 0, top = array.size; while (bot < top) { - int i = (bot + top) / 2; + uint i = (bot + top) / 2; uint elt = array.data[i]; if (elt == value) return 1; @@ -617,13 +616,13 @@ static const uchar prime_deltas[] = { 1, 29, 3, 21, 7, 17, 15, 9, 43, 35, 15, 0, 0, 0, 0, 0 }; -int -bucketsForSize( int size ) +uint +bucketsForSize( uint size ) { - int base = 4, bits = 2; + uint base = 4, bits = 2; for (;;) { - int prime = base + prime_deltas[bits]; + uint prime = base + prime_deltas[bits]; if (prime >= size) return prime; base <<= 1; @@ -658,7 +657,7 @@ static notifier_t *notifiers; static int changed; /* Iterator may be invalid now. */ #ifdef HAVE_SYS_POLL_H static struct pollfd *pollfds; -static int npolls, rpolls; +static uint npolls, rpolls; #else # ifdef HAVE_SYS_SELECT_H # include <sys/select.h> @@ -669,7 +668,7 @@ void init_notifier( notifier_t *sn, int fd, void (*cb)( int, void * ), void *aux ) { #ifdef HAVE_SYS_POLL_H - int idx = npolls++; + uint idx = npolls++; if (rpolls < npolls) { rpolls = npolls; pollfds = nfrealloc( pollfds, npolls * sizeof(*pollfds) ); @@ -691,7 +690,7 @@ void conf_notifier( notifier_t *sn, short and_events, short or_events ) { #ifdef HAVE_SYS_POLL_H - int idx = sn->index; + uint idx = sn->index; pollfds[idx].events = (pollfds[idx].events & and_events) | or_events; #else sn->events = (sn->events & and_events) | or_events; @@ -703,7 +702,7 @@ wipe_notifier( notifier_t *sn ) { notifier_t **snp; #ifdef HAVE_SYS_POLL_H - int idx; + uint idx; #endif for (snp = ¬ifiers; *snp != sn; snp = &(*snp)->next) @@ -806,7 +805,7 @@ event_wait( void ) break; } for (sn = notifiers; sn; sn = sn->next) { - int n = sn->index; + uint n = sn->index; if ((m = pollfds[n].revents)) { assert( !(m & POLLNVAL) ); sn->cb( m | shifted_bit( m, POLLHUP, POLLIN ), sn->aux ); _______________________________________________ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel