CVS commit by ossi:
"fprintf( stderr," => "error(". new functions debugn() and infon()
for messages with missing newline; warn() and error() act upon this.
M +26 -29 config.c 1.30
M +56 -60 drv_imap.c 1.18
M +20 -20 drv_maildir.c 1.13
M +4 -1 isync.h 1.55
M +8 -7 main.c 1.54
M +25 -25 sync.c 1.77
M +51 -3 util.c 1.8
--- isync/src/config.c #1.29:1.30
@@ -51,5 +51,5 @@ parse_bool( conffile_t *cfile )
strcasecmp( cfile->val, "off" ) &&
strcmp( cfile->val, "0" ))
- fprintf( stderr, "%s:%d: invalid boolean value '%s'\n",
+ error( "%s:%d: invalid boolean value '%s'\n",
cfile->file, cfile->line, cfile->val );
return 0;
@@ -64,5 +64,5 @@ parse_int( conffile_t *cfile )
ret = strtol( cfile->val, &p, 10 );
if (*p) {
- fprintf( stderr, "%s:%d: invalid integer value '%s'\n",
+ error( "%s:%d: invalid integer value '%s'\n",
cfile->file, cfile->line, cfile->val );
return 0;
@@ -131,5 +131,5 @@ getopt_helper( conffile_t *cfile, int *c
*cops |= XOP_PULL|XOP_PUSH;
else if (strcasecmp( "None", arg ) && strcasecmp(
"Noop", arg ))
- fprintf( stderr, "%s:%d: invalid Sync arg
'%s'\n",
+ error( "%s:%d: invalid Sync arg '%s'\n",
cfile->file, cfile->line, arg );
while ((arg = next_arg( &cfile->rest )));
@@ -145,5 +145,5 @@ getopt_helper( conffile_t *cfile, int *c
ops[S] |= OP_EXPUNGE;
else if (strcasecmp( "None", arg ))
- fprintf( stderr, "%s:%d: invalid Expunge arg
'%s'\n",
+ error( "%s:%d: invalid Expunge arg '%s'\n",
cfile->file, cfile->line, arg );
while ((arg = next_arg( &cfile->rest )));
@@ -159,5 +159,5 @@ getopt_helper( conffile_t *cfile, int *c
ops[S] |= OP_CREATE;
else if (strcasecmp( "None", arg ))
- fprintf( stderr, "%s:%d: invalid Create arg
'%s'\n",
+ error( "%s:%d: invalid Create arg '%s'\n",
cfile->file, cfile->line, arg );
while ((arg = next_arg( &cfile->rest )));
@@ -183,6 +183,5 @@ getcline( conffile_t *cfile )
continue;
if (!(cfile->val = next_arg( &p ))) {
- fprintf( stderr, "%s:%d: parameter missing\n",
- cfile->file, cfile->line );
+ error( "%s:%d: parameter missing\n", cfile->file,
cfile->line );
continue;
}
@@ -204,5 +203,5 @@ merge_ops( int cops, int ops[] )
if (aops & cops & OP_MASK_TYPE) {
cfl:
- fprintf( stderr, "Conflicting Sync args
specified.\n" );
+ error( "Conflicting Sync args specified.\n" );
return 1;
}
@@ -232,5 +231,5 @@ merge_ops( int cops, int ops[] )
if (ops[M] & XOP_HAVE_EXPUNGE) {
if (aops & cops & OP_EXPUNGE) {
- fprintf( stderr, "Conflicting Expunge args
specified.\n" );
+ error( "Conflicting Expunge args specified.\n" );
return 1;
}
@@ -240,5 +239,5 @@ merge_ops( int cops, int ops[] )
if (ops[M] & XOP_HAVE_CREATE) {
if (aops & cops & OP_CREATE) {
- fprintf( stderr, "Conflicting Create args specified.\n"
);
+ error( "Conflicting Create args specified.\n" );
return 1;
}
@@ -322,5 +321,5 @@ load_config( const char *where, int pseu
linkst:
if (*cfile.val != ':' || !(p = strchr(
cfile.val + 1, ':' ))) {
- fprintf( stderr, "%s:%d:
malformed mailbox spec\n",
+ error( "%s:%d: malformed
mailbox spec\n",
cfile.file, cfile.line
);
err = 1;
@@ -333,5 +332,5 @@ load_config( const char *where, int pseu
goto stpcom;
}
- fprintf( stderr, "%s:%d: unknown store
'%s'\n",
+ error( "%s:%d: unknown store '%s'\n",
cfile.file, cfile.line,
cfile.val + 1 );
err = 1;
@@ -341,14 +340,13 @@ load_config( const char *where, int pseu
channel->boxes[ms] = nfstrdup(
p );
} else if (!getopt_helper( &cfile, &cops,
channel->ops, &channel->sync_state )) {
- fprintf( stderr, "%s:%d: unknown
keyword '%s'\n",
- cfile.file, cfile.line,
cfile.cmd );
+ error( "%s:%d: unknown keyword '%s'\n",
cfile.file, cfile.line, cfile.cmd );
err = 1;
}
}
if (!channel->stores[M]) {
- fprintf( stderr, "channel '%s' refers to no
master store\n", channel->name );
+ error( "channel '%s' refers to no master
store\n", channel->name );
err = 1;
} else if (!channel->stores[S]) {
- fprintf( stderr, "channel '%s' refers to no
slave store\n", channel->name );
+ error( "channel '%s' refers to no slave
store\n", channel->name );
err = 1;
} else if (merge_ops( cops, channel->ops ))
@@ -392,5 +390,5 @@ load_config( const char *where, int pseu
else
{
- fprintf( stderr, "%s:%d: unknown
keyword '%s'\n",
+ error( "%s:%d: unknown keyword '%s'\n",
cfile.file, cfile.line,
cfile.cmd );
err = 1;
@@ -401,5 +399,5 @@ load_config( const char *where, int pseu
else if (!getopt_helper( &cfile, &gcops, global_ops,
&global_sync_state ))
{
- fprintf( stderr, "%s:%d: unknown section keyword
'%s'\n",
+ error( "%s:%d: unknown section keyword '%s'\n",
cfile.file, cfile.line, cfile.cmd );
err = 1;
@@ -433,6 +431,5 @@ parse_generic_store( store_conf_t *store
store->map_inbox = nfstrdup( cfg->val );
else {
- fprintf( stderr, "%s:%d: unknown keyword '%s'\n",
- cfg->file, cfg->line, cfg->cmd );
+ error( "%s:%d: unknown keyword '%s'\n", cfg->file, cfg->line,
cfg->cmd );
*err = 1;
}
--- isync/src/drv_imap.c #1.17:1.18
@@ -195,10 +195,9 @@ verify_cert( SSL *ssl )
int err;
char buf[256];
- int ret = -1;
BIO *bio;
cert = SSL_get_peer_certificate( ssl );
if (!cert) {
- fprintf( stderr, "Error, no server certificate\n" );
+ error( "Error, no server certificate\n" );
return -1;
}
@@ -208,5 +207,5 @@ verify_cert( SSL *ssl )
return 0;
- fprintf( stderr, "Error, can't verify certificate: %s (%d)\n",
+ error( "Error, can't verify certificate: %s (%d)\n",
X509_verify_cert_error_string(err), err );
@@ -231,8 +230,8 @@ verify_cert( SSL *ssl )
"\nAccept this certificate anyway? [no]: ", stderr );
if (fgets( buf, sizeof(buf), stdin ) && (buf[0] == 'y' || buf[0] ==
'Y')) {
- ret = 0;
- fprintf( stderr, "\n*** Fine, but don't say I didn't warn
you!\n\n" );
+ error( "\n*** Fine, but don't say I didn't warn you!\n\n" );
+ return 0;
}
- return ret;
+ return -1;
}
@@ -253,8 +252,8 @@ init_ssl_ctx( imap_store_t *ctx )
if (!srvc->cert_file) {
- fprintf( stderr, "Error, CertificateFile not defined\n" );
+ error( "Error, CertificateFile not defined\n" );
return -1;
} else if (!SSL_CTX_load_verify_locations( imap->SSLContext,
srvc->cert_file, NULL )) {
- fprintf( stderr, "Error while loading certificate file '%s':
%s\n",
+ error( "Error while loading certificate file '%s': %s\n",
srvc->cert_file, ERR_error_string( ERR_get_error(), 0
) );
return -1;
@@ -288,12 +287,12 @@ socket_perror( const char *func, Socket_
if ((err = ERR_get_error()) == 0) {
if (ret == 0)
- fprintf( stderr, "SSL_%s:got EOF\n",
func );
+ error( "SSL_%s:got EOF\n", func );
else
- fprintf( stderr, "SSL_%s:%d:%s\n",
func, errno, strerror(errno) );
+ error( "SSL_%s:%d:%s\n", func, errno,
strerror(errno) );
} else
- fprintf( stderr, "SSL_%s:%d:%s\n", func, err,
ERR_error_string( err, 0 ) );
+ error( "SSL_%s:%d:%s\n", func, err,
ERR_error_string( err, 0 ) );
return;
default:
- fprintf( stderr, "SSL_%s:%d:unhandled SSL error\n",
func, err );
+ error( "SSL_%s:%d:unhandled SSL error\n", func, err );
break;
}
@@ -306,5 +305,5 @@ socket_perror( const char *func, Socket_
perror( func );
else
- fprintf( stderr, "%s: unexpected EOF\n", func );
+ error( "%s: unexpected EOF\n", func );
}
@@ -715,5 +714,5 @@ parse_fetch( imap_t *imap, char *cmd ) /
if (!is_list( list )) {
- fprintf( stderr, "IMAP error: bogus FETCH response\n" );
+ error( "IMAP error: bogus FETCH response\n" );
free_list( list );
return -1;
@@ -727,5 +726,5 @@ parse_fetch( imap_t *imap, char *cmd ) /
uid = atoi( tmp->val );
else
- fprintf( stderr, "IMAP error: unable to
parse UID\n" );
+ error( "IMAP error: unable to parse
UID\n" );
} else if (!strcmp( "FLAGS", tmp->val )) {
tmp = tmp->next;
@@ -743,13 +742,13 @@ parse_fetch( imap_t *imap, char *cmd ) /
goto flagok;
}
- fprintf(
stderr, "IMAP warning: unknown system flag %s\n", flags->val );
+ error( "IMAP
warning: unknown system flag %s\n", flags->val );
}
flagok: ;
} else
- fprintf( stderr, "IMAP
error: unable to parse FLAGS list\n" );
+ error( "IMAP error:
unable to parse FLAGS list\n" );
}
status |= M_FLAGS;
} else
- fprintf( stderr, "IMAP error: unable to
parse FLAGS\n" );
+ error( "IMAP error: unable to parse
FLAGS\n" );
} else if (!strcmp( "RFC822.SIZE", tmp->val )) {
tmp = tmp->next;
@@ -757,5 +756,5 @@ parse_fetch( imap_t *imap, char *cmd ) /
size = atoi( tmp->val );
else
- fprintf( stderr, "IMAP error: unable to
parse RFC822.SIZE\n" );
+ error( "IMAP error: unable to parse
RFC822.SIZE\n" );
} else if (!strcmp( "BODY[]", tmp->val )) {
tmp = tmp->next;
@@ -765,5 +764,5 @@ parse_fetch( imap_t *imap, char *cmd ) /
size = tmp->len;
} else
- fprintf( stderr, "IMAP error: unable to
parse BODY[]\n" );
+ error( "IMAP error: unable to parse
BODY[]\n" );
}
}
@@ -774,5 +773,5 @@ parse_fetch( imap_t *imap, char *cmd ) /
if (cmdp->cb.uid == uid)
goto gotuid;
- fprintf( stderr, "IMAP error: unexpected FETCH response (UID
%d)\n", uid );
+ error( "IMAP error: unexpected FETCH response (UID %d)\n", uid
);
free_list( list );
return -1;
@@ -823,5 +822,5 @@ parse_response_code( imap_store_t *ctx,
s++;
if (!(p = strchr( s, ']' ))) {
- fprintf( stderr, "IMAP error: malformed response code\n" );
+ error( "IMAP error: malformed response code\n" );
return RESP_BAD;
}
@@ -830,10 +829,10 @@ parse_response_code( imap_store_t *ctx,
if (!strcmp( "UIDVALIDITY", arg )) {
if (!(arg = next_arg( &s )) || !(ctx->gen.uidvalidity = atoi(
arg ))) {
- fprintf( stderr, "IMAP error: malformed UIDVALIDITY
status\n" );
+ error( "IMAP error: malformed UIDVALIDITY status\n" );
return RESP_BAD;
}
} else if (!strcmp( "UIDNEXT", arg )) {
if (!(arg = next_arg( &s )) || !(imap->uidnext = atoi( arg ))) {
- fprintf( stderr, "IMAP error: malformed NEXTUID
status\n" );
+ error( "IMAP error: malformed NEXTUID status\n" );
return RESP_BAD;
}
@@ -845,10 +844,10 @@ parse_response_code( imap_store_t *ctx,
*/
for (; isspace( (unsigned char)*p ); p++);
- fprintf( stderr, "*** IMAP ALERT *** %s\n", p );
+ error( "*** IMAP ALERT *** %s\n", p );
} else if (cb && cb->ctx && !strcmp( "APPENDUID", arg )) {
if (!(arg = next_arg( &s )) || !(ctx->gen.uidvalidity = atoi(
arg )) ||
!(arg = next_arg( &s )) || !(*(int *)cb->ctx = atoi( arg )))
{
- fprintf( stderr, "IMAP error: malformed APPENDUID
status\n" );
+ error( "IMAP error: malformed APPENDUID status\n" );
return RESP_BAD;
}
@@ -867,5 +866,5 @@ parse_search( imap_t *imap, char *cmd )
uid = -1;
else if (!(uid = atoi( arg ))) {
- fprintf( stderr, "IMAP error: malformed SEARCH response\n" );
+ error( "IMAP error: malformed SEARCH response\n" );
return;
} else if (next_arg( &cmd )) {
@@ -883,5 +882,5 @@ parse_search( imap_t *imap, char *cmd )
return;
}
- fprintf( stderr, "IMAP error: unexpected SEARCH response (UID %u)\n",
uid );
+ error( "IMAP error: unexpected SEARCH response (UID %u)\n", uid );
}
@@ -929,5 +928,5 @@ get_cmd_result( imap_store_t *ctx, struc
arg = next_arg( &cmd );
if (!arg) {
- fprintf( stderr, "IMAP error: unable to parse
untagged response\n" );
+ error( "IMAP error: unable to parse untagged
response\n" );
return RESP_BAD;
}
@@ -957,9 +956,9 @@ get_cmd_result( imap_store_t *ctx, struc
}
} else {
- fprintf( stderr, "IMAP error: unable to parse
untagged response\n" );
+ error( "IMAP error: unable to parse untagged
response\n" );
return RESP_BAD;
}
} else if (!imap->in_progress) {
- fprintf( stderr, "IMAP error: unexpected reply: %s
%s\n", arg, cmd ? cmd : "" );
+ error( "IMAP error: unexpected reply: %s %s\n", arg,
cmd ? cmd : "" );
return RESP_BAD;
} else if (*arg == '+') {
@@ -978,5 +977,5 @@ get_cmd_result( imap_store_t *ctx, struc
return RESP_BAD;
} else {
- fprintf( stderr, "IMAP error: unexpected
command continuation request\n" );
+ error( "IMAP error: unexpected command
continuation request\n" );
return RESP_BAD;
}
@@ -992,5 +991,5 @@ get_cmd_result( imap_store_t *ctx, struc
if (cmdp->tag == tag)
goto gottag;
- fprintf( stderr, "IMAP error: unexpected tag %s\n", arg
);
+ error( "IMAP error: unexpected tag %s\n", arg );
return RESP_BAD;
gottag:
@@ -1029,7 +1028,6 @@ get_cmd_result( imap_store_t *ctx, struc
} else /*if (!strcmp( "BAD", arg ))*/
resp = RESP_BAD;
- fprintf( stderr, "IMAP command '%s' returned an
error: %s %s\n",
- memcmp (cmdp->cmd, "LOGIN", 5) ?
- cmdp->cmd : "LOGIN
<user> <pass>",
+ error( "IMAP command '%s' returned an error: %s
%s\n",
+ memcmp( cmdp->cmd, "LOGIN", 5 ) ?
cmdp->cmd : "LOGIN <user> <pass>",
arg, cmd ? cmd : "");
}
@@ -1223,5 +1221,5 @@ imap_open_store( store_conf_t *conf, sto
if (srvc->tunnel) {
- info( "Starting tunnel '%s'... ", srvc->tunnel );
+ infon( "Starting tunnel '%s'... ", srvc->tunnel );
if (socketpair( PF_UNIX, SOCK_STREAM, 0, a )) {
@@ -1249,5 +1247,5 @@ imap_open_store( store_conf_t *conf, sto
addr.sin_family = AF_INET;
- info( "Resolving %s... ", srvc->host );
+ infon( "Resolving %s... ", srvc->host );
he = gethostbyname( srvc->host );
if (!he) {
@@ -1261,5 +1259,5 @@ imap_open_store( store_conf_t *conf, sto
s = socket( PF_INET, SOCK_STREAM, 0 );
- info( "Connecting to %s:%hu... ", inet_ntoa( addr.sin_addr ),
ntohs( addr.sin_port ) );
+ infon( "Connecting to %s:%hu... ", inet_ntoa( addr.sin_addr ),
ntohs( addr.sin_port ) );
if (connect( s, (struct sockaddr *)&addr, sizeof(addr) )) {
close( s );
@@ -1282,10 +1280,10 @@ imap_open_store( store_conf_t *conf, sto
/* read the greeting string */
if (buffer_gets( &imap->buf, &rsp )) {
- fprintf( stderr, "IMAP error: no greeting response\n" );
+ error( "IMAP error: no greeting response\n" );
goto bail;
}
arg = next_arg( &rsp );
if (!arg || *arg != '*' || (arg = next_arg( &rsp )) == NULL) {
- fprintf( stderr, "IMAP error: invalid greeting response\n" );
+ error( "IMAP error: invalid greeting response\n" );
goto bail;
}
@@ -1294,5 +1292,5 @@ imap_open_store( store_conf_t *conf, sto
preauth = 1;
else if (strcmp( "OK", arg ) != 0) {
- fprintf( stderr, "IMAP error: unknown greeting response\n" );
+ error( "IMAP error: unknown greeting response\n" );
goto bail;
}
@@ -1316,5 +1314,5 @@ imap_open_store( store_conf_t *conf, sto
} else {
if (srvc->require_ssl) {
- fprintf( stderr, "IMAP error: SSL
support not available\n" );
+ error( "IMAP error: SSL support not
available\n" );
goto bail;
} else
@@ -1326,5 +1324,5 @@ imap_open_store( store_conf_t *conf, sto
info ("Logging in...\n");
if (!srvc->user) {
- fprintf( stderr, "Skipping server %s, no user\n",
srvc->host );
+ error( "Skipping server %s, no user\n", srvc->host );
goto bail;
}
@@ -1338,5 +1336,5 @@ imap_open_store( store_conf_t *conf, sto
}
if (!*arg) {
- fprintf( stderr, "Skipping account [EMAIL
PROTECTED], no password\n", srvc->user, srvc->host );
+ error( "Skipping account [EMAIL PROTECTED], no
password\n", srvc->user, srvc->host );
goto bail;
}
@@ -1357,5 +1355,5 @@ imap_open_store( store_conf_t *conf, sto
goto bail;
} else if (srvc->require_cram) {
- fprintf( stderr, "IMAP error: CRAM-MD5 authentication
is not supported by server\n" );
+ error( "IMAP error: CRAM-MD5 authentication is not
supported by server\n" );
goto bail;
} else
@@ -1363,5 +1361,5 @@ imap_open_store( store_conf_t *conf, sto
{
if (CAP(NOLOGIN)) {
- fprintf( stderr, "Skipping account [EMAIL
PROTECTED], server forbids LOGIN\n", srvc->user, srvc->host );
+ error( "Skipping account [EMAIL PROTECTED],
server forbids LOGIN\n", srvc->user, srvc->host );
goto bail;
}
@@ -1371,5 +1369,5 @@ imap_open_store( store_conf_t *conf, sto
warn( "*** IMAP Warning *** Password is being
sent in the clear\n" );
if (imap_exec( ctx, 0, "LOGIN \"%s\" \"%s\"",
srvc->user, srvc->pass ) != RESP_OK) {
- fprintf( stderr, "IMAP error: LOGIN failed\n" );
+ error( "IMAP error: LOGIN failed\n" );
goto bail;
}
@@ -1701,5 +1699,5 @@ imap_parse_store( conffile_t *cfg, store
server->cert_file = expand_strdup( cfg->val );
if (access( server->cert_file, R_OK )) {
- fprintf( stderr, "%s:%d: CertificateFile '%s':
%s\n",
+ error( "%s:%d: CertificateFile '%s': %s\n",
cfg->file, cfg->line,
server->cert_file, strerror( errno ) );
*err = 1;
@@ -1723,6 +1721,5 @@ imap_parse_store( conffile_t *cfg, store
if (srv->name && !strcmp( srv->name,
cfg->val ))
goto gotsrv;
- fprintf( stderr, "%s:%d: unknown IMAP account
'%s'\n",
- cfg->file, cfg->line, cfg->val );
+ error( "%s:%d: unknown IMAP account '%s'\n",
cfg->file, cfg->line, cfg->val );
*err = 1;
continue;
@@ -1737,6 +1734,5 @@ imap_parse_store( conffile_t *cfg, store
continue;
} else {
- fprintf( stderr, "%s:%d: unknown/misplaced keyword
'%s'\n",
- cfg->file, cfg->line, cfg->cmd );
+ error( "%s:%d: unknown/misplaced keyword '%s'\n",
cfg->file, cfg->line, cfg->cmd );
*err = 1;
continue;
@@ -1747,7 +1743,7 @@ imap_parse_store( conffile_t *cfg, store
if (!server->tunnel && !server->host) {
if (store)
- fprintf( stderr, "IMAP store '%s' has
incomplete/missing connection details\n", store->gen.name );
+ error( "IMAP store '%s' has incomplete/missing
connection details\n", store->gen.name );
else
- fprintf( stderr, "IMAP account '%s' has
incomplete/missing connection details\n", server->name );
+ error( "IMAP account '%s' has
incomplete/missing connection details\n", server->name );
*err = 1;
return 1;
@@ -1759,5 +1755,5 @@ imap_parse_store( conffile_t *cfg, store
memcpy( store->server, &sserver, sizeof(sserver) );
} else if (acc_opt) {
- fprintf( stderr, "IMAP store '%s' has both Account and
account-specific options\n", store->gen.name );
+ error( "IMAP store '%s' has both Account and
account-specific options\n", store->gen.name );
*err = 1;
}
--- isync/src/drv_maildir.c #1.12:1.13
@@ -105,5 +105,5 @@ maildir_open_store( store_conf_t *conf,
maildir_close_store( oldctx );
if (stat( conf->path, &st ) || !S_ISDIR(st.st_mode)) {
- fprintf( stderr, "Maildir error: cannot open store %s\n",
conf->path );
+ error( "Maildir error: cannot open store %s\n", conf->path );
return 0;
}
@@ -158,5 +158,5 @@ maildir_list( store_t *gctx, string_list
if (!(dir = opendir( gctx->conf->path ))) {
- fprintf( stderr, "%s: %s\n", gctx->conf->path, strerror(errno)
);
+ error( "%s: %s\n", gctx->conf->path, strerror(errno) );
return DRV_STORE_BAD;
}
@@ -222,5 +222,5 @@ maildir_validate( const char *prefix, co
if (create) {
if (mkdir( buf, 0700 )) {
- fprintf( stderr, "Maildir error: mkdir
%s: %s (errno %d)\n",
+ error( "Maildir error: mkdir %s: %s
(errno %d)\n",
buf, strerror(errno), errno );
return DRV_STORE_BAD;
@@ -230,5 +230,5 @@ maildir_validate( const char *prefix, co
memcpy( buf + bl, subdirs[i], 4 );
if (mkdir( buf, 0700 )) {
- fprintf( stderr, "Maildir
error: mkdir %s: %s (errno %d)\n",
+ error( "Maildir error: mkdir
%s: %s (errno %d)\n",
buf, strerror(errno),
errno );
return DRV_BOX_BAD;
@@ -236,9 +236,9 @@ maildir_validate( const char *prefix, co
}
} else {
- fprintf( stderr, "Maildir error: mailbox '%s'
does not exist\n", buf );
+ error( "Maildir error: mailbox '%s' does not
exist\n", buf );
return DRV_BOX_BAD;
}
} else {
- fprintf( stderr, "Maildir error: stat %s: %s (errno
%d)\n",
+ error( "Maildir error: stat %s: %s (errno %d)\n",
buf, strerror(errno), errno );
return DRV_BOX_BAD;
@@ -253,5 +253,5 @@ maildir_validate( const char *prefix, co
goto mkdirs;
if (j != 3) {
- fprintf( stderr, "Maildir error: '%.*s' is no valid
mailbox\n", bl, buf );
+ error( "Maildir error: '%.*s' is no valid mailbox\n",
bl, buf );
return DRV_BOX_BAD;
}
@@ -259,5 +259,5 @@ maildir_validate( const char *prefix, co
bl += 4;
if (!(dirp = opendir( buf ))) {
- fprintf( stderr, "Maildir error: opendir: %s: %s (errno
%d)\n",
+ error( "Maildir error: opendir: %s: %s (errno %d)\n",
buf, strerror(errno), errno );
return DRV_BOX_BAD;
@@ -267,5 +267,5 @@ maildir_validate( const char *prefix, co
nfsnprintf( buf + bl, sizeof(buf) - bl, "%s",
entry->d_name );
if (stat( buf, &st ))
- fprintf( stderr, "Maildir error: stat: %s: %s
(errno %d)\n",
+ error( "Maildir error: stat: %s: %s (errno
%d)\n",
buf, strerror(errno), errno );
else if (S_ISREG(st.st_mode) && now - st.st_ctime >=
_24_HOURS) {
@@ -275,5 +275,5 @@ maildir_validate( const char *prefix, co
info( "Maildir notice: removing stale file
%s\n", buf );
if (unlink( buf ))
- fprintf( stderr, "Maildir error:
unlink: %s: %s (errno %d)\n",
+ error( "Maildir error: unlink: %s: %s
(errno %d)\n",
buf, strerror(errno), errno );
}
@@ -338,5 +338,5 @@ maildir_store_uid( maildir_store_t *ctx
lseek( ctx->uvfd, 0, SEEK_SET );
if (write( ctx->uvfd, buf, n ) != n || ftruncate( ctx->uvfd, n )) {
- fprintf( stderr, "Maildir error: cannot write UIDVALIDITY.\n" );
+ error( "Maildir error: cannot write UIDVALIDITY.\n" );
return DRV_BOX_BAD;
}
@@ -369,5 +369,5 @@ maildir_uidval_lock( maildir_store_t *ct
/* This is legacy only */
if (flock( ctx->uvfd, LOCK_EX ) < 0) {
- fprintf( stderr, "Maildir error: cannot flock UIDVALIDITY.\n" );
+ error( "Maildir error: cannot flock UIDVALIDITY.\n" );
return DRV_BOX_BAD;
}
@@ -380,5 +380,5 @@ maildir_uidval_lock( maildir_store_t *ct
lck.l_type = F_WRLCK;
if (fcntl( ctx->uvfd, F_SETLKW, &lck )) {
- fprintf( stderr, "Maildir error: cannot fcntl lock
UIDVALIDITY.\n" );
+ error( "Maildir error: cannot fcntl lock UIDVALIDITY.\n" );
return DRV_BOX_BAD;
}
@@ -1009,5 +1009,5 @@ maildir_store_msg( store_t *gctx, msg_da
perror( buf );
else
- fprintf( stderr, "Maildir error: %s: partial write\n",
buf );
+ error( "Maildir error: %s: partial write\n", buf );
close( fd );
return DRV_BOX_BAD;
--- isync/src/isync.h #1.54:1.55
@@ -206,10 +206,13 @@ extern const char *Home;
#define KEEPJOURNAL 16
-extern int DFlags;
+extern int DFlags, Ontty;
void debug( const char *, ... );
+void debugn( const char *, ... );
void info( const char *, ... );
+void infon( const char *, ... );
void infoc( char );
void warn( const char *, ... );
+void error( const char *, ... );
char *next_arg( char ** );
--- isync/src/main.c #1.53:1.54
@@ -93,5 +93,5 @@ crashHandler( int n )
dup2( 0, 1 );
dup2( 0, 2 );
- fprintf( stderr, "*** " EXE " caught signal %d. Starting debugger
...\n", n );
+ error( "*** " EXE " caught signal %d. Starting debugger ...\n", n );
switch ((dpid = fork ())) {
case -1:
@@ -209,4 +209,5 @@ main( int argc, char **argv )
return 1;
}
+ Ontty = isatty( 1 ) && isatty( 2 );
arc4_init();
@@ -221,5 +222,5 @@ main( int argc, char **argv )
if (!strcmp( opt, "config" )) {
if (oind >= argc) {
- fprintf( stderr, "--config
requires an argument.\n" );
+ error( "--config requires an
argument.\n" );
return 1;
}
@@ -300,5 +301,5 @@ main( int argc, char **argv )
else {
badopt:
- fprintf( stderr, "Unknown
option '%s'\n", argv[oind - 1] );
+ error( "Unknown option '%s'\n",
argv[oind - 1] );
return 1;
}
@@ -314,5 +315,5 @@ main( int argc, char **argv )
ochar = argv[oind++] + 1;
if (!*ochar) {
- fprintf( stderr, "Invalid option '-'\n" );
+ error( "Invalid option '-'\n" );
return 1;
}
@@ -331,5 +332,5 @@ main( int argc, char **argv )
}
if (oind >= argc) {
- fprintf( stderr, "-c requires an argument.\n" );
+ error( "-c requires an argument.\n" );
return 1;
}
@@ -412,5 +413,5 @@ main( int argc, char **argv )
usage( 0 );
default:
- fprintf( stderr, "Unknown option '-%c'\n", *(ochar - 1)
);
+ error( "Unknown option '-%c'\n", *(ochar - 1) );
return 1;
}
@@ -478,5 +479,5 @@ main( int argc, char **argv )
if (!strcmp( chan->name, channame ))
goto gotchan;
- fprintf( stderr, "No channel or group named '%s'
defined.\n", channame );
+ error( "No channel or group named '%s' defined.\n",
channame );
ret = 1;
goto gotnone;
--- isync/src/sync.c #1.76:1.77
@@ -127,5 +127,5 @@ select_box( sync_rec_t *srecs, store_t *
} else
maxwuid = 0;
- info( "Selecting %s %s... ", str_ms[t], ctx[t]->name );
+ infon( "Selecting %s %s... ", str_ms[t], ctx[t]->name );
debug( maxwuid == INT_MAX ? "selecting %s [%d,inf]\n" : "selecting %s
[%d,%d]\n", str_ms[t], minwuid, maxwuid );
switch (ctx[t]->conf->driver->select( ctx[t], minwuid, maxwuid, mexcs,
nmexcs )) {
@@ -134,5 +134,5 @@ select_box( sync_rec_t *srecs, store_t *
}
if (uidval[t] && uidval[t] != ctx[t]->uidvalidity) {
- fprintf( stderr, "Error: UIDVALIDITY of %s changed (got %d,
expected %d)\n", str_ms[t], ctx[t]->uidvalidity, uidval[t] );
+ error( "Error: UIDVALIDITY of %s changed (got %d, expected
%d)\n", str_ms[t], ctx[t]->uidvalidity, uidval[t] );
return SYNC_FAIL;
}
@@ -402,5 +402,5 @@ sync_boxes( store_t *ctx[], const char *
if (!strcmp( chan->sync_state ? chan->sync_state : global_sync_state,
"*" )) {
if (!ctx[S]->path) {
- fprintf( stderr, "Error: store '%s' does not support
in-box sync state\n", chan->stores[S]->name );
+ error( "Error: store '%s' does not support in-box sync
state\n", chan->stores[S]->name );
return SYNC_BAD(S);
}
@@ -419,5 +419,5 @@ sync_boxes( store_t *ctx[], const char *
}
if (!(s = strrchr( dname, '/' ))) {
- fprintf( stderr, "Error: invalid SyncState '%s'\n", dname );
+ error( "Error: invalid SyncState '%s'\n", dname );
free( dname );
return SYNC_BAD(S);
@@ -425,5 +425,5 @@ sync_boxes( store_t *ctx[], const char *
*s = 0;
if (mkdir( dname, 0700 ) && errno != EEXIST) {
- fprintf( stderr, "Error: cannot create SyncState directory
'%s': %s\n", dname, strerror(errno) );
+ error( "Error: cannot create SyncState directory '%s': %s\n",
dname, strerror(errno) );
free( dname );
return SYNC_BAD(S);
@@ -442,10 +442,10 @@ sync_boxes( store_t *ctx[], const char *
#endif
if ((lfd = open( lname, O_WRONLY|O_CREAT, 0666 )) < 0) {
- fprintf( stderr, "Error: cannot create lock file %s: %s\n",
lname, strerror(errno) );
+ error( "Error: cannot create lock file %s: %s\n", lname,
strerror(errno) );
ret = SYNC_FAIL;
goto bail2;
}
if (fcntl( lfd, F_SETLK, &lck )) {
- fprintf( stderr, "Error: channel :%s:%s-:%s:%s is locked\n",
+ error( "Error: channel :%s:%s-:%s:%s is locked\n",
chan->stores[M]->name, ctx[M]->name,
chan->stores[S]->name, ctx[S]->name );
ret = SYNC_FAIL;
@@ -455,5 +455,5 @@ sync_boxes( store_t *ctx[], const char *
debug( "reading sync state %s ...\n", dname );
if (!fgets( buf, sizeof(buf), dfp ) || !(t = strlen( buf )) ||
buf[t - 1] != '\n') {
- fprintf( stderr, "Error: incomplete sync state header
in %s\n", dname );
+ error( "Error: incomplete sync state header in %s\n",
dname );
fclose( dfp );
ret = SYNC_FAIL;
@@ -461,5 +461,5 @@ sync_boxes( store_t *ctx[], const char *
}
if (sscanf( buf, "%d:%d %d:%d:%d", &uidval[M], &maxuid[M],
&uidval[S], &smaxxuid, &maxuid[S]) != 5) {
- fprintf( stderr, "Error: invalid sync state header in
%s\n", dname );
+ error( "Error: invalid sync state header in %s\n",
dname );
fclose( dfp );
ret = SYNC_FAIL;
@@ -470,5 +470,5 @@ sync_boxes( store_t *ctx[], const char *
sline++;
if (!(t = strlen( buf )) || buf[t - 1] != '\n') {
- fprintf( stderr, "Error: incomplete sync state
entry at %s:%d\n", dname, sline );
+ error( "Error: incomplete sync state entry at
%s:%d\n", dname, sline );
fclose( dfp );
ret = SYNC_FAIL;
@@ -477,5 +477,5 @@ sync_boxes( store_t *ctx[], const char *
fbuf[0] = 0;
if (sscanf( buf, "%d %d %15s", &t1, &t2, fbuf ) < 2) {
- fprintf( stderr, "Error: invalid sync state
entry at %s:%d\n", dname, sline );
+ error( "Error: invalid sync state entry at
%s:%d\n", dname, sline );
fclose( dfp );
ret = SYNC_FAIL;
@@ -502,5 +502,5 @@ sync_boxes( store_t *ctx[], const char *
} else {
if (errno != ENOENT) {
- fprintf( stderr, "Error: cannot read sync state %s\n",
dname );
+ error( "Error: cannot read sync state %s\n", dname );
ret = SYNC_FAIL;
goto bail;
@@ -512,5 +512,5 @@ sync_boxes( store_t *ctx[], const char *
debug( "recovering journal ...\n" );
if (!(t = strlen( buf )) || buf[t - 1] != '\n') {
- fprintf( stderr, "Error: incomplete journal
header in %s\n", jname );
+ error( "Error: incomplete journal header in
%s\n", jname );
fclose( jfp );
ret = SYNC_FAIL;
@@ -518,5 +518,5 @@ sync_boxes( store_t *ctx[], const char *
}
if (memcmp( buf, JOURNAL_VERSION "\n",
strlen(JOURNAL_VERSION) + 1 )) {
- fprintf( stderr, "Error: incompatible journal
version "
+ error( "Error: incompatible journal version "
"(got %.*s, expected "
JOURNAL_VERSION ")\n", t - 1, buf );
fclose( jfp );
@@ -529,5 +529,5 @@ sync_boxes( store_t *ctx[], const char *
line++;
if (!(t = strlen( buf )) || buf[t - 1] != '\n')
{
- fprintf( stderr, "Error: incomplete
journal entry at %s:%d\n", jname, line );
+ error( "Error: incomplete journal entry
at %s:%d\n", jname, line );
fclose( jfp );
ret = SYNC_FAIL;
@@ -542,5 +542,5 @@ sync_boxes( store_t *ctx[], const char *
(sscanf( buf + 2, "%d %d %d", &t1,
&t2, &t3 ) != 3))
{
- fprintf( stderr, "Error: malformed
journal entry at %s:%d\n", jname, line );
+ error( "Error: malformed journal entry
at %s:%d\n", jname, line );
fclose( jfp );
ret = SYNC_FAIL;
@@ -573,10 +573,10 @@ sync_boxes( store_t *ctx[], const char *
if (srec->uid[M] == t1 &&
srec->uid[S] == t2)
goto syncfnd;
- fprintf( stderr, "Error: journal entry
at %s:%d refers to non-existing sync state entry\n", jname, line );
+ error( "Error: journal entry at %s:%d
refers to non-existing sync state entry\n", jname, line );
fclose( jfp );
ret = SYNC_FAIL;
goto bail;
syncfnd:
- debug( " entry(%d,%d,%u) ",
srec->uid[M], srec->uid[S], srec->flags );
+ debugn( " entry(%d,%d,%u) ",
srec->uid[M], srec->uid[S], srec->flags );
switch (buf[0]) {
case '-':
@@ -633,5 +633,5 @@ sync_boxes( store_t *ctx[], const char *
break;
default:
- fprintf( stderr, "Error:
unrecognized journal entry at %s:%d\n", jname, line );
+ error( "Error: unrecognized
journal entry at %s:%d\n", jname, line );
fclose( jfp );
ret = SYNC_FAIL;
@@ -644,5 +644,5 @@ sync_boxes( store_t *ctx[], const char *
} else {
if (errno != ENOENT) {
- fprintf( stderr, "Error: cannot read journal %s\n",
jname );
+ error( "Error: cannot read journal %s\n", jname );
ret = SYNC_FAIL;
goto bail;
@@ -650,10 +650,10 @@ sync_boxes( store_t *ctx[], const char *
}
if (!(nfp = fopen( nname, "w" ))) {
- fprintf( stderr, "Error: cannot write new sync state %s\n",
nname );
+ error( "Error: cannot write new sync state %s\n", nname );
ret = SYNC_FAIL;
goto bail;
}
if (!(jfp = fopen( jname, "a" ))) {
- fprintf( stderr, "Error: cannot write journal %s\n", jname );
+ error( "Error: cannot write journal %s\n", jname );
fclose( nfp );
ret = SYNC_FAIL;
@@ -767,7 +767,7 @@ sync_boxes( store_t *ctx[], const char *
}
}
- debug( " exception list is:" );
+ debugn( " exception list is:" );
for (t = 0; t < nmexcs; t++)
- debug( " %d", mexcs[t] );
+ debugn( " %d", mexcs[t] );
debug( "\n" );
} else if (ctx[M]->opts & OPEN_OLD)
@@ -812,5 +812,5 @@ sync_boxes( store_t *ctx[], const char *
if ((tmsg->flags & F_FLAGGED) ||
!chan->stores[t]->max_size || tmsg->size <= chan->stores[t]->max_size) {
if (!nmsgs)
- info( t ? "Pulling new
messages..." : "Pushing new messages..." );
+ infon( t ? "Pulling new
messages..." : "Pushing new messages..." );
else
infoc( '.' );
--- isync/src/util.c #1.7:1.8
@@ -31,5 +31,6 @@
#include <ctype.h>
-int DFlags;
+int DFlags, Ontty;
+static int need_nl;
void
@@ -47,4 +48,18 @@ debug( const char *msg, ... )
void
+debugn( const char *msg, ... )
+{
+ va_list va;
+
+ if (DFlags & DEBUG) {
+ va_start( va, msg );
+ vprintf( msg, va );
+ va_end( va );
+ fflush( stdout );
+ need_nl = Ontty;
+ }
+}
+
+void
info( const char *msg, ... )
{
@@ -60,4 +75,18 @@ info( const char *msg, ... )
void
+infon( const char *msg, ... )
+{
+ va_list va;
+
+ if (!(DFlags & QUIET)) {
+ va_start( va, msg );
+ vprintf( msg, va );
+ va_end( va );
+ fflush( stdout );
+ need_nl = Ontty;
+ }
+}
+
+void
infoc( char c )
{
@@ -65,4 +94,5 @@ infoc( char c )
putchar( c );
fflush( stdout );
+ need_nl = Ontty;
}
}
@@ -74,4 +104,8 @@ warn( const char *msg, ... )
if (!(DFlags & VERYQUIET)) {
+ if (need_nl) {
+ putchar( '\n' );
+ need_nl = 0;
+ }
va_start( va, msg );
vfprintf( stderr, msg, va );
@@ -80,4 +114,18 @@ warn( const char *msg, ... )
}
+void
+error( const char *msg, ... )
+{
+ va_list va;
+
+ if (need_nl) {
+ putchar( '\n' );
+ need_nl = 0;
+ }
+ va_start( va, msg );
+ vfprintf( stderr, msg, va );
+ va_end( va );
+}
+
char *
next_arg( char **s )
@@ -336,9 +384,9 @@ arc4_init( void )
if ((fd = open( "/dev/urandom", O_RDONLY )) < 0 && (fd = open(
"/dev/random", O_RDONLY )) < 0) {
- fprintf( stderr, "Fatal: no random number source available.\n"
);
+ error( "Fatal: no random number source available.\n" );
exit( 3 );
}
if (read( fd, dat, 128 ) != 128) {
- fprintf( stderr, "Fatal: cannot read random number source.\n" );
+ error( "Fatal: cannot read random number source.\n" );
exit( 3 );
}
-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
isync-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/isync-devel