commit 9bf92cb4c805874b8a7cae803329316a504cfce3
Author: Oswald Buddenhagen <[email protected]>
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 | 14 ++---
src/drv_imap.c | 120 ++++++++++++++++++++--------------------
src/drv_maildir.c | 138 +++++++++++++++++++++++-----------------------
src/drv_proxy.c | 10 ++--
src/main.c | 30 +++++-----
src/socket.c | 58 ++++++++++---------
src/socket.h | 18 +++---
src/sync.c | 50 +++++++++--------
src/sync.h | 2 +-
src/util.c | 70 +++++++++++------------
14 files changed, 289 insertions(+), 276 deletions(-)
diff --git a/src/common.h b/src/common.h
index 587f8ac..ac8426a 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))
@@ -107,7 +107,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];
@@ -133,7 +133,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 );
@@ -144,9 +144,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 );
@@ -157,23 +157,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 ) \
{ \
@@ -199,7 +199,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;
@@ -210,7 +210,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..8b8f09d 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;
@@ -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 6133da9..9da6443 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,8 +99,8 @@ struct imap_store {
const char *label; /* foreign */
const char *prefix;
const char *name;
- int ref_count;
- uint opts;
+ uint ref_count;
+ int opts;
enum { SST_BAD, SST_HALF, SST_GOOD } state;
/* trash folder's existence is not confirmed yet */
enum { TrashUnknown, TrashChecking, TrashKnown } trashnc;
@@ -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" );
@@ -1308,7 +1309,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:
@@ -1329,7 +1330,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
@@ -1500,7 +1501,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;
@@ -1516,9 +1517,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 : "" );
@@ -2142,7 +2143,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++ = ' ';
@@ -2374,7 +2375,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;
@@ -2384,7 +2385,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;
@@ -2441,7 +2442,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;
@@ -2534,14 +2535,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)
@@ -2555,7 +2557,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;
}
@@ -2573,7 +2575,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) {
@@ -2585,11 +2587,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 );
}
@@ -2600,7 +2602,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 );
@@ -2608,7 +2610,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 );
}
@@ -2634,14 +2636,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;
}
@@ -2650,7 +2652,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;
@@ -2727,7 +2729,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;
@@ -2903,7 +2905,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;
@@ -2923,12 +2925,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;
}
}
@@ -3055,7 +3057,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)
@@ -3116,7 +3118,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;
@@ -3183,16 +3185,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 );
diff --git a/src/drv_maildir.c b/src/drv_maildir.c
index 656eeb4..8108390 100644
--- a/src/drv_maildir.c
+++ b/src/drv_maildir.c
@@ -69,8 +69,7 @@ typedef struct {
typedef struct {
store_t gen;
- uint opts;
- int uvfd, uvok, is_inbox, fresh[3];
+ int opts, uvfd, uvok, is_inbox, fresh[3];
uint minuid, maxuid, newuid, seenuid, uidvalidity, nuid;
uint_array_t excs;
char *path; /* own */
@@ -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;
@@ -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 );
@@ -682,7 +681,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;
}
@@ -694,7 +693,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
@@ -843,10 +842,11 @@ 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 ((ret = lm->uid - rm->uid))
- return ret;
+ if (lm->uid != rm->uid) // Can't subtract, the result might not fit
into signed int.
+ return lm->uid > rm->uid ? 1 : -1;
/* No UID, so sort by arrival date. We should not do this, but we rely
on the suggested unique file name scheme - we have no choice. */
@@ -854,21 +854,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 */
@@ -882,7 +882,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 ))))
@@ -913,8 +913,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];
@@ -1113,11 +1113,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 );
@@ -1138,7 +1138,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) {
@@ -1147,7 +1147,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" ))) {
@@ -1157,10 +1157,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')
@@ -1252,7 +1252,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;
@@ -1276,7 +1276,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;
@@ -1321,7 +1321,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;
@@ -1355,11 +1355,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 );
@@ -1369,11 +1369,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
@@ -1426,7 +1426,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;
@@ -1453,7 +1453,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)
@@ -1550,8 +1550,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;
@@ -1571,11 +1571,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) {
@@ -1592,7 +1592,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 {
@@ -1623,7 +1623,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
@@ -1675,27 +1675,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)) {
@@ -1796,15 +1796,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;
@@ -1845,7 +1845,7 @@ maildir_commit_cmds( store_t *gctx )
(void) gctx;
}
-static int
+static uint
maildir_get_memory_usage( store_t *gctx ATTR_UNUSED )
{
return 0;
diff --git a/src/drv_proxy.c b/src/drv_proxy.c
index 6a62f22..076640f 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,7 +200,7 @@ 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++)
+ for (uint t = 0; t < excs.size; t++)
debugn( " %d", excs.data[t] );
debug( "\n" );
}
diff --git a/src/main.c b/src/main.c
index d9d9bfc..febf5a4 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 b7bffd5..e33ff53 100644
--- a/src/socket.c
+++ b/src/socket.c
@@ -233,7 +233,6 @@ static int
init_ssl_ctx( const server_conf_t *conf )
{
server_conf_t *mconf = (server_conf_t *)conf;
- int options = 0;
if (conf->SSLContext)
return conf->ssl_ctx_valid;
@@ -248,6 +247,7 @@ init_ssl_ctx( const server_conf_t *conf )
return 0;
}
+ uint options = 0;
if (!(conf->ssl_versions & SSLv3))
options |= SSL_OP_NO_SSLv3;
if (!(conf->ssl_versions & TLSv1))
@@ -662,9 +662,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 );
@@ -675,7 +675,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;
@@ -684,10 +684,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
@@ -710,7 +710,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;
@@ -730,7 +731,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 );
}
@@ -748,21 +749,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 );
}
}
@@ -775,9 +777,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)
@@ -787,14 +789,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 );
@@ -808,7 +810,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;
@@ -819,14 +821,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) {
@@ -837,7 +839,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;
@@ -862,11 +864,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;
}
@@ -901,7 +904,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 {
@@ -922,7 +925,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;
@@ -948,7 +951,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++)
@@ -992,7 +996,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 7becade..fbd2a53 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], opts[2], lfd, ret, existing;
+ uint ref_count, nsrecs, replayed;
+ 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;
@@ -836,7 +838,7 @@ load_state( sync_vars_t *svars )
svars->newmaxuid[M] = svars->maxuid[M];
svars->newmaxuid[S] = svars->maxuid[S];
- int line = 0;
+ uint line = 0;
if ((jfp = fopen( svars->jname, "r" ))) {
if (!lock_state( svars ))
goto jbail;
@@ -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 *names[], int
present[], channel_conf_t *
}
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;
@@ -1250,7 +1252,7 @@ box_opened2( sync_vars_t *svars, int t )
opts[1-t] |= OPEN_NEW;
if (chan->ops[t] & OP_EXPUNGE)
opts[1-t] |= OPEN_FLAGS;
- if (chan->stores[t]->max_size != INT_MAX) {
+ if (chan->stores[t]->max_size != UINT_MAX) {
if (chan->ops[t] & OP_RENEW)
opts[1-t] |= OPEN_OLD_SIZE;
if (chan->ops[t] & OP_NEW)
@@ -1321,7 +1323,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;
@@ -1707,7 +1709,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 );
diff --git a/src/sync.h b/src/sync.h
index be26660..cbc3e22 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 f66f564..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 );
@@ -534,7 +533,10 @@ map_name( const char *arg, char **result, int reserve,
const char *in, const cha
static int
compare_uints( const void *l, const void *r )
{
- return *(const uint *)l - *(const uint *)r;
+ uint li = *(const uint *)l, ri = *(const uint *)r;
+ if (li != ri) // Can't subtract, the result might not fit into signed
int.
+ return li > ri ? 1 : -1;
+ return 0;
}
void
@@ -546,16 +548,16 @@ sort_uint_array( uint_array_t array )
int
find_uint_array( uint_array_t array, uint value )
{
- int bot = 0, top = array.size - 1;
- while (bot <= top) {
- int i = (bot + top) / 2;
+ uint bot = 0, top = array.size;
+ while (bot < top) {
+ uint i = (bot + top) / 2;
uint elt = array.data[i];
if (elt == value)
return 1;
if (elt < value)
bot = i + 1;
else
- top = i - 1;
+ top = i;
}
return 0;
}
@@ -614,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;
@@ -655,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>
@@ -666,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) );
@@ -688,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;
@@ -700,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)
@@ -803,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
[email protected]
https://lists.sourceforge.net/lists/listinfo/isync-devel