reshuffle sources a bit
split header and move some code to more logical places.
This commit is contained in:
parent
92b892d247
commit
03b3b566f1
4
.gitignore
vendored
4
.gitignore
vendored
|
@ -5,10 +5,10 @@ Makefile
|
||||||
Makefile.in
|
Makefile.in
|
||||||
autom4te.cache
|
autom4te.cache
|
||||||
aclocal.m4
|
aclocal.m4
|
||||||
|
autodefs.h
|
||||||
|
autodefs.h.in
|
||||||
build-stamp
|
build-stamp
|
||||||
compile
|
compile
|
||||||
config.h
|
|
||||||
config.h.in
|
|
||||||
config.cache
|
config.cache
|
||||||
config.guess
|
config.guess
|
||||||
config.log
|
config.log
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
AC_INIT([isync], [1.1.0])
|
AC_INIT([isync], [1.1.0])
|
||||||
AC_CONFIG_HEADERS([config.h])
|
AC_CONFIG_HEADERS([autodefs.h])
|
||||||
AM_INIT_AUTOMAKE
|
AM_INIT_AUTOMAKE
|
||||||
|
|
||||||
AM_MAINTAINER_MODE
|
AM_MAINTAINER_MODE
|
||||||
|
|
|
@ -5,9 +5,9 @@ SUBDIRS = $(compat_dir)
|
||||||
|
|
||||||
bin_PROGRAMS = mbsync mdconvert
|
bin_PROGRAMS = mbsync mdconvert
|
||||||
|
|
||||||
mbsync_SOURCES = main.c sync.c config.c util.c socket.c drv_imap.c drv_maildir.c
|
mbsync_SOURCES = main.c sync.c config.c util.c socket.c driver.c drv_imap.c drv_maildir.c
|
||||||
mbsync_LDADD = -ldb $(SSL_LIBS) $(SOCK_LIBS)
|
mbsync_LDADD = -ldb $(SSL_LIBS) $(SOCK_LIBS)
|
||||||
noinst_HEADERS = isync.h
|
noinst_HEADERS = common.h config.h driver.h sync.h socket.h
|
||||||
|
|
||||||
mdconvert_SOURCES = mdconvert.c
|
mdconvert_SOURCES = mdconvert.c
|
||||||
mdconvert_LDADD = -ldb
|
mdconvert_LDADD = -ldb
|
||||||
|
|
131
src/common.h
Normal file
131
src/common.h
Normal file
|
@ -0,0 +1,131 @@
|
||||||
|
/*
|
||||||
|
* mbsync - mailbox synchronizer
|
||||||
|
* Copyright (C) 2000-2002 Michael R. Elkins <me@mutt.org>
|
||||||
|
* Copyright (C) 2002-2006,2010-2012 Oswald Buddenhagen <ossi@users.sf.net>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* As a special exception, mbsync may be linked with the OpenSSL library,
|
||||||
|
* despite that library's more restrictive license.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef COMMON_H
|
||||||
|
#define COMMON_H
|
||||||
|
|
||||||
|
#include <autodefs.h>
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#define as(ar) (sizeof(ar)/sizeof(ar[0]))
|
||||||
|
|
||||||
|
#define __stringify(x) #x
|
||||||
|
#define stringify(x) __stringify(x)
|
||||||
|
|
||||||
|
#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4)
|
||||||
|
# define ATTR_UNUSED __attribute__((unused))
|
||||||
|
# define ATTR_NORETURN __attribute__((noreturn))
|
||||||
|
# define ATTR_PRINTFLIKE(fmt,var) __attribute__((format(printf,fmt,var)))
|
||||||
|
#else
|
||||||
|
# define ATTR_UNUSED
|
||||||
|
# define ATTR_NORETURN
|
||||||
|
# define ATTR_PRINTFLIKE(fmt,var)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
# define INLINE __inline__
|
||||||
|
#else
|
||||||
|
# define INLINE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define EXE "mbsync"
|
||||||
|
|
||||||
|
/* main.c */
|
||||||
|
|
||||||
|
#define DEBUG 1
|
||||||
|
#define VERBOSE 2
|
||||||
|
#define XVERBOSE 4
|
||||||
|
#define QUIET 8
|
||||||
|
#define VERYQUIET 16
|
||||||
|
#define KEEPJOURNAL 32
|
||||||
|
#define ZERODELAY 64
|
||||||
|
#define CRASHDEBUG 128
|
||||||
|
|
||||||
|
extern int DFlags;
|
||||||
|
extern int UseFSync;
|
||||||
|
|
||||||
|
extern int Pid;
|
||||||
|
extern char Hostname[256];
|
||||||
|
extern const char *Home;
|
||||||
|
|
||||||
|
/* util.c */
|
||||||
|
|
||||||
|
void ATTR_PRINTFLIKE(1, 2) debug( const char *, ... );
|
||||||
|
void ATTR_PRINTFLIKE(1, 2) debugn( const char *, ... );
|
||||||
|
void ATTR_PRINTFLIKE(1, 2) info( const char *, ... );
|
||||||
|
void ATTR_PRINTFLIKE(1, 2) infon( const char *, ... );
|
||||||
|
void ATTR_PRINTFLIKE(1, 2) warn( const char *, ... );
|
||||||
|
void ATTR_PRINTFLIKE(1, 2) error( const char *, ... );
|
||||||
|
void ATTR_PRINTFLIKE(1, 2) sys_error( const char *, ... );
|
||||||
|
void flushn( void );
|
||||||
|
|
||||||
|
typedef struct string_list {
|
||||||
|
struct string_list *next;
|
||||||
|
char string[1];
|
||||||
|
} string_list_t;
|
||||||
|
|
||||||
|
void add_string_list_n( string_list_t **list, const char *str, int len );
|
||||||
|
void add_string_list( string_list_t **list, const char *str );
|
||||||
|
void free_string_list( string_list_t *list );
|
||||||
|
|
||||||
|
#ifndef HAVE_MEMRCHR
|
||||||
|
void *memrchr( const void *s, int c, size_t n );
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void *nfmalloc( size_t sz );
|
||||||
|
void *nfcalloc( size_t sz );
|
||||||
|
void *nfrealloc( void *mem, size_t sz );
|
||||||
|
char *nfstrdup( const char *str );
|
||||||
|
int 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, ... );
|
||||||
|
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 );
|
||||||
|
|
||||||
|
void sort_ints( int *arr, int len );
|
||||||
|
|
||||||
|
void arc4_init( void );
|
||||||
|
unsigned char arc4_getbyte( void );
|
||||||
|
|
||||||
|
int bucketsForSize( int size );
|
||||||
|
|
||||||
|
#ifdef HAVE_SYS_POLL_H
|
||||||
|
# include <sys/poll.h>
|
||||||
|
#else
|
||||||
|
# define POLLIN 1
|
||||||
|
# define POLLOUT 4
|
||||||
|
# define POLLERR 8
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void add_fd( int fd, void (*cb)( int events, void *aux ), void *aux );
|
||||||
|
void conf_fd( int fd, int and_events, int or_events );
|
||||||
|
void fake_fd( int fd, int events );
|
||||||
|
void del_fd( int fd );
|
||||||
|
void main_loop( void );
|
||||||
|
|
||||||
|
#endif
|
|
@ -17,7 +17,7 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <config.h>
|
#include <autodefs.h>
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
|
38
src/config.c
38
src/config.c
|
@ -20,7 +20,9 @@
|
||||||
* despite that library's more restrictive license.
|
* despite that library's more restrictive license.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "isync.h"
|
#include "config.h"
|
||||||
|
|
||||||
|
#include "sync.h"
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
@ -32,13 +34,7 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
driver_t *drivers[N_DRIVERS] = { &maildir_driver, &imap_driver };
|
|
||||||
|
|
||||||
channel_conf_t global_conf;
|
|
||||||
store_conf_t *stores;
|
store_conf_t *stores;
|
||||||
channel_conf_t *channels;
|
|
||||||
group_conf_t *groups;
|
|
||||||
int UseFSync = 1;
|
|
||||||
|
|
||||||
#define ARG_OPTIONAL 0
|
#define ARG_OPTIONAL 0
|
||||||
#define ARG_REQUIRED 1
|
#define ARG_REQUIRED 1
|
||||||
|
@ -491,31 +487,3 @@ load_config( const char *where, int pseudo )
|
||||||
unlink( where );
|
unlink( where );
|
||||||
return cfile.err;
|
return cfile.err;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
parse_generic_store( store_conf_t *store, conffile_t *cfg )
|
|
||||||
{
|
|
||||||
if (!strcasecmp( "Trash", cfg->cmd ))
|
|
||||||
store->trash = nfstrdup( cfg->val );
|
|
||||||
else if (!strcasecmp( "TrashRemoteNew", cfg->cmd ))
|
|
||||||
store->trash_remote_new = parse_bool( cfg );
|
|
||||||
else if (!strcasecmp( "TrashNewOnly", cfg->cmd ))
|
|
||||||
store->trash_only_new = parse_bool( cfg );
|
|
||||||
else if (!strcasecmp( "MaxSize", cfg->cmd ))
|
|
||||||
store->max_size = parse_size( cfg );
|
|
||||||
else if (!strcasecmp( "MapInbox", cfg->cmd ))
|
|
||||||
store->map_inbox = nfstrdup( cfg->val );
|
|
||||||
else if (!strcasecmp( "Flatten", cfg->cmd )) {
|
|
||||||
const char *p;
|
|
||||||
for (p = cfg->val; *p; p++)
|
|
||||||
if (*p == '/') {
|
|
||||||
error( "%s:%d: flattened hierarchy delimiter cannot contain the canonical delimiter '/'\n", cfg->file, cfg->line );
|
|
||||||
cfg->err = 1;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
store->flat_delim = nfstrdup( cfg->val );
|
|
||||||
} else {
|
|
||||||
error( "%s:%d: unknown keyword '%s'\n", cfg->file, cfg->line, cfg->cmd );
|
|
||||||
cfg->err = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
45
src/config.h
Normal file
45
src/config.h
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
/*
|
||||||
|
* mbsync - mailbox synchronizer
|
||||||
|
* Copyright (C) 2000-2002 Michael R. Elkins <me@mutt.org>
|
||||||
|
* Copyright (C) 2002-2006,2010-2012 Oswald Buddenhagen <ossi@users.sf.net>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* As a special exception, mbsync may be linked with the OpenSSL library,
|
||||||
|
* despite that library's more restrictive license.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CONFIG_H
|
||||||
|
#define CONFIG_H
|
||||||
|
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
|
typedef struct conffile {
|
||||||
|
const char *file;
|
||||||
|
FILE *fp;
|
||||||
|
char *buf;
|
||||||
|
int bufl;
|
||||||
|
int line;
|
||||||
|
int err;
|
||||||
|
char *cmd, *val, *rest;
|
||||||
|
} conffile_t;
|
||||||
|
|
||||||
|
int parse_bool( conffile_t *cfile );
|
||||||
|
int parse_int( conffile_t *cfile );
|
||||||
|
int 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 );
|
||||||
|
|
||||||
|
#endif
|
68
src/driver.c
Normal file
68
src/driver.c
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
/*
|
||||||
|
* mbsync - mailbox synchronizer
|
||||||
|
* Copyright (C) 2000-2002 Michael R. Elkins <me@mutt.org>
|
||||||
|
* Copyright (C) 2002-2006,2010-2012 Oswald Buddenhagen <ossi@users.sf.net>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* As a special exception, mbsync may be linked with the OpenSSL library,
|
||||||
|
* despite that library's more restrictive license.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "driver.h"
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
driver_t *drivers[N_DRIVERS] = { &maildir_driver, &imap_driver };
|
||||||
|
|
||||||
|
void
|
||||||
|
free_generic_messages( message_t *msgs )
|
||||||
|
{
|
||||||
|
message_t *tmsg;
|
||||||
|
|
||||||
|
for (; msgs; msgs = tmsg) {
|
||||||
|
tmsg = msgs->next;
|
||||||
|
free( msgs );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
parse_generic_store( store_conf_t *store, conffile_t *cfg )
|
||||||
|
{
|
||||||
|
if (!strcasecmp( "Trash", cfg->cmd )) {
|
||||||
|
store->trash = nfstrdup( cfg->val );
|
||||||
|
} else if (!strcasecmp( "TrashRemoteNew", cfg->cmd )) {
|
||||||
|
store->trash_remote_new = parse_bool( cfg );
|
||||||
|
} else if (!strcasecmp( "TrashNewOnly", cfg->cmd )) {
|
||||||
|
store->trash_only_new = parse_bool( cfg );
|
||||||
|
} else if (!strcasecmp( "MaxSize", cfg->cmd )) {
|
||||||
|
store->max_size = parse_size( cfg );
|
||||||
|
} else if (!strcasecmp( "MapInbox", cfg->cmd )) {
|
||||||
|
store->map_inbox = nfstrdup( cfg->val );
|
||||||
|
} else if (!strcasecmp( "Flatten", cfg->cmd )) {
|
||||||
|
const char *p;
|
||||||
|
for (p = cfg->val; *p; p++) {
|
||||||
|
if (*p == '/') {
|
||||||
|
error( "%s:%d: flattened hierarchy delimiter cannot contain the canonical delimiter '/'\n", cfg->file, cfg->line );
|
||||||
|
cfg->err = 1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
store->flat_delim = nfstrdup( cfg->val );
|
||||||
|
} else {
|
||||||
|
error( "%s:%d: unknown keyword '%s'\n", cfg->file, cfg->line, cfg->cmd );
|
||||||
|
cfg->err = 1;
|
||||||
|
}
|
||||||
|
}
|
|
@ -20,121 +20,10 @@
|
||||||
* despite that library's more restrictive license.
|
* despite that library's more restrictive license.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <config.h>
|
#ifndef DRIVER_H
|
||||||
|
#define DRIVER_H
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include "config.h"
|
||||||
#include <stdarg.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define as(ar) (sizeof(ar)/sizeof(ar[0]))
|
|
||||||
|
|
||||||
#define __stringify(x) #x
|
|
||||||
#define stringify(x) __stringify(x)
|
|
||||||
|
|
||||||
#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4)
|
|
||||||
# define ATTR_UNUSED __attribute__((unused))
|
|
||||||
# define ATTR_NORETURN __attribute__((noreturn))
|
|
||||||
# define ATTR_PRINTFLIKE(fmt,var) __attribute__((format(printf,fmt,var)))
|
|
||||||
#else
|
|
||||||
# define ATTR_UNUSED
|
|
||||||
# define ATTR_NORETURN
|
|
||||||
# define ATTR_PRINTFLIKE(fmt,var)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __GNUC__
|
|
||||||
# define INLINE __inline__
|
|
||||||
#else
|
|
||||||
# define INLINE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define EXE "mbsync"
|
|
||||||
|
|
||||||
typedef struct ssl_st SSL;
|
|
||||||
typedef struct ssl_ctx_st SSL_CTX;
|
|
||||||
typedef struct x509_store_st X509_STORE;
|
|
||||||
|
|
||||||
typedef struct server_conf {
|
|
||||||
char *tunnel;
|
|
||||||
char *host;
|
|
||||||
int port;
|
|
||||||
#ifdef HAVE_LIBSSL
|
|
||||||
char *cert_file;
|
|
||||||
char use_imaps;
|
|
||||||
char use_sslv2, use_sslv3, use_tlsv1, use_tlsv11, use_tlsv12;
|
|
||||||
|
|
||||||
/* these are actually variables and are leaked at the end */
|
|
||||||
char ssl_ctx_valid;
|
|
||||||
unsigned num_trusted;
|
|
||||||
SSL_CTX *SSLContext;
|
|
||||||
#endif
|
|
||||||
} server_conf_t;
|
|
||||||
|
|
||||||
typedef struct buff_chunk {
|
|
||||||
struct buff_chunk *next;
|
|
||||||
char *data;
|
|
||||||
int len;
|
|
||||||
char buf[1];
|
|
||||||
} buff_chunk_t;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
/* connection */
|
|
||||||
int fd;
|
|
||||||
int state;
|
|
||||||
const server_conf_t *conf; /* needed during connect */
|
|
||||||
#ifdef HAVE_IPV6
|
|
||||||
struct addrinfo *addrs, *curr_addr; /* needed during connect */
|
|
||||||
#else
|
|
||||||
char **curr_addr; /* needed during connect */
|
|
||||||
#endif
|
|
||||||
char *name;
|
|
||||||
#ifdef HAVE_LIBSSL
|
|
||||||
SSL *ssl;
|
|
||||||
int force_trusted;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void (*bad_callback)( void *aux ); /* async fail while sending or listening */
|
|
||||||
void (*read_callback)( void *aux ); /* data available for reading */
|
|
||||||
int (*write_callback)( void *aux ); /* all *queued* data was sent */
|
|
||||||
union {
|
|
||||||
void (*connect)( int ok, void *aux );
|
|
||||||
void (*starttls)( int ok, void *aux );
|
|
||||||
} callbacks;
|
|
||||||
void *callback_aux;
|
|
||||||
|
|
||||||
/* writing */
|
|
||||||
buff_chunk_t *write_buf, **write_buf_append; /* buffer head & tail */
|
|
||||||
int write_offset; /* offset into buffer head */
|
|
||||||
|
|
||||||
/* 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' */
|
|
||||||
char buf[100000];
|
|
||||||
} conn_t;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
const char *file;
|
|
||||||
FILE *fp;
|
|
||||||
char *buf;
|
|
||||||
int bufl;
|
|
||||||
int line;
|
|
||||||
int err;
|
|
||||||
char *cmd, *val, *rest;
|
|
||||||
} conffile_t;
|
|
||||||
|
|
||||||
#define OP_NEW (1<<0)
|
|
||||||
#define OP_RENEW (1<<1)
|
|
||||||
#define OP_DELETE (1<<2)
|
|
||||||
#define OP_FLAGS (1<<3)
|
|
||||||
#define OP_MASK_TYPE (OP_NEW|OP_RENEW|OP_DELETE|OP_FLAGS) /* asserted in the target ops */
|
|
||||||
#define OP_EXPUNGE (1<<4)
|
|
||||||
#define OP_CREATE (1<<5)
|
|
||||||
#define XOP_PUSH (1<<6)
|
|
||||||
#define XOP_PULL (1<<7)
|
|
||||||
#define XOP_MASK_DIR (XOP_PUSH|XOP_PULL)
|
|
||||||
#define XOP_HAVE_TYPE (1<<8)
|
|
||||||
#define XOP_HAVE_EXPUNGE (1<<9)
|
|
||||||
#define XOP_HAVE_CREATE (1<<10)
|
|
||||||
|
|
||||||
typedef struct driver driver_t;
|
typedef struct driver driver_t;
|
||||||
|
|
||||||
|
@ -150,33 +39,6 @@ typedef struct store_conf {
|
||||||
char trash_remote_new, trash_only_new;
|
char trash_remote_new, trash_only_new;
|
||||||
} store_conf_t;
|
} store_conf_t;
|
||||||
|
|
||||||
typedef struct string_list {
|
|
||||||
struct string_list *next;
|
|
||||||
char string[1];
|
|
||||||
} string_list_t;
|
|
||||||
|
|
||||||
#define M 0 /* master */
|
|
||||||
#define S 1 /* slave */
|
|
||||||
|
|
||||||
typedef struct channel_conf {
|
|
||||||
struct channel_conf *next;
|
|
||||||
const char *name;
|
|
||||||
store_conf_t *stores[2];
|
|
||||||
const char *boxes[2];
|
|
||||||
char *sync_state;
|
|
||||||
string_list_t *patterns;
|
|
||||||
int ops[2];
|
|
||||||
unsigned max_messages; /* for slave only */
|
|
||||||
signed char expire_unread;
|
|
||||||
char use_internal_date;
|
|
||||||
} channel_conf_t;
|
|
||||||
|
|
||||||
typedef struct group_conf {
|
|
||||||
struct group_conf *next;
|
|
||||||
const char *name;
|
|
||||||
string_list_t *channels;
|
|
||||||
} group_conf_t;
|
|
||||||
|
|
||||||
/* For message->flags */
|
/* For message->flags */
|
||||||
/* Keep the mailbox driver flag definitions in sync! */
|
/* Keep the mailbox driver flag definitions in sync! */
|
||||||
/* The order is according to alphabetical maildir flag sort */
|
/* The order is according to alphabetical maildir flag sort */
|
||||||
|
@ -362,143 +224,12 @@ struct driver {
|
||||||
void (*commit)( store_t *ctx );
|
void (*commit)( store_t *ctx );
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/* main.c */
|
|
||||||
|
|
||||||
extern int Pid;
|
|
||||||
extern char Hostname[256];
|
|
||||||
extern const char *Home;
|
|
||||||
|
|
||||||
|
|
||||||
/* socket.c */
|
|
||||||
|
|
||||||
/* call this before doing anything with the socket */
|
|
||||||
static INLINE void socket_init( conn_t *conn,
|
|
||||||
const server_conf_t *conf,
|
|
||||||
void (*bad_callback)( void *aux ),
|
|
||||||
void (*read_callback)( void *aux ),
|
|
||||||
int (*write_callback)( void *aux ),
|
|
||||||
void *aux )
|
|
||||||
{
|
|
||||||
conn->conf = conf;
|
|
||||||
conn->bad_callback = bad_callback;
|
|
||||||
conn->read_callback = read_callback;
|
|
||||||
conn->write_callback = write_callback;
|
|
||||||
conn->callback_aux = aux;
|
|
||||||
conn->fd = -1;
|
|
||||||
conn->name = 0;
|
|
||||||
conn->write_buf_append = &conn->write_buf;
|
|
||||||
}
|
|
||||||
void socket_connect( conn_t *conn, void (*cb)( int ok, void *aux ) );
|
|
||||||
void socket_start_tls(conn_t *conn, void (*cb)( int ok, void *aux ) );
|
|
||||||
void socket_close( conn_t *sock );
|
|
||||||
int socket_read( conn_t *sock, char *buf, int len ); /* never waits */
|
|
||||||
char *socket_read_line( conn_t *sock ); /* don't free return value; never waits */
|
|
||||||
typedef enum { KeepOwn = 0, GiveOwn } ownership_t;
|
|
||||||
int socket_write( conn_t *sock, char *buf, int len, ownership_t takeOwn );
|
|
||||||
|
|
||||||
void cram( const char *challenge, const char *user, const char *pass,
|
|
||||||
char **_final, int *_finallen );
|
|
||||||
|
|
||||||
|
|
||||||
/* util.c */
|
|
||||||
|
|
||||||
#define DEBUG 1
|
|
||||||
#define VERBOSE 2
|
|
||||||
#define XVERBOSE 4
|
|
||||||
#define QUIET 8
|
|
||||||
#define VERYQUIET 16
|
|
||||||
#define KEEPJOURNAL 32
|
|
||||||
#define ZERODELAY 64
|
|
||||||
#define CRASHDEBUG 128
|
|
||||||
|
|
||||||
extern int DFlags;
|
|
||||||
|
|
||||||
void ATTR_PRINTFLIKE(1, 2) debug( const char *, ... );
|
|
||||||
void ATTR_PRINTFLIKE(1, 2) debugn( const char *, ... );
|
|
||||||
void ATTR_PRINTFLIKE(1, 2) info( const char *, ... );
|
|
||||||
void ATTR_PRINTFLIKE(1, 2) infon( const char *, ... );
|
|
||||||
void ATTR_PRINTFLIKE(1, 2) warn( const char *, ... );
|
|
||||||
void ATTR_PRINTFLIKE(1, 2) error( const char *, ... );
|
|
||||||
void ATTR_PRINTFLIKE(1, 2) sys_error( const char *, ... );
|
|
||||||
void flushn( void );
|
|
||||||
|
|
||||||
void add_string_list_n( string_list_t **list, const char *str, int len );
|
|
||||||
void add_string_list( string_list_t **list, const char *str );
|
|
||||||
void free_string_list( string_list_t *list );
|
|
||||||
|
|
||||||
void free_generic_messages( message_t * );
|
void free_generic_messages( message_t * );
|
||||||
|
|
||||||
#ifndef HAVE_MEMRCHR
|
void parse_generic_store( store_conf_t *store, conffile_t *cfg );
|
||||||
void *memrchr( const void *s, int c, size_t n );
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void *nfmalloc( size_t sz );
|
|
||||||
void *nfcalloc( size_t sz );
|
|
||||||
void *nfrealloc( void *mem, size_t sz );
|
|
||||||
char *nfstrdup( const char *str );
|
|
||||||
int 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, ... );
|
|
||||||
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 );
|
|
||||||
|
|
||||||
void sort_ints( int *arr, int len );
|
|
||||||
|
|
||||||
void arc4_init( void );
|
|
||||||
unsigned char arc4_getbyte( void );
|
|
||||||
|
|
||||||
int bucketsForSize( int size );
|
|
||||||
|
|
||||||
#ifdef HAVE_SYS_POLL_H
|
|
||||||
# include <sys/poll.h>
|
|
||||||
#else
|
|
||||||
# define POLLIN 1
|
|
||||||
# define POLLOUT 4
|
|
||||||
# define POLLERR 8
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void add_fd( int fd, void (*cb)( int events, void *aux ), void *aux );
|
|
||||||
void conf_fd( int fd, int and_events, int or_events );
|
|
||||||
void fake_fd( int fd, int events );
|
|
||||||
void del_fd( int fd );
|
|
||||||
void main_loop( void );
|
|
||||||
|
|
||||||
/* sync.c */
|
|
||||||
|
|
||||||
extern const char *str_ms[2], *str_hl[2];
|
|
||||||
|
|
||||||
#define SYNC_OK 0 /* assumed to be 0 */
|
|
||||||
#define SYNC_FAIL 1
|
|
||||||
#define SYNC_FAIL_ALL 2
|
|
||||||
#define SYNC_BAD(ms) (4<<(ms))
|
|
||||||
#define SYNC_NOGOOD 16 /* internal */
|
|
||||||
#define SYNC_CANCELED 32 /* internal */
|
|
||||||
|
|
||||||
/* All passed pointers must stay alive until cb is called. */
|
|
||||||
void sync_boxes( store_t *ctx[], const char *names[], channel_conf_t *chan,
|
|
||||||
void (*cb)( int sts, void *aux ), void *aux );
|
|
||||||
|
|
||||||
/* config.c */
|
|
||||||
|
|
||||||
#define N_DRIVERS 2
|
#define N_DRIVERS 2
|
||||||
extern driver_t *drivers[N_DRIVERS];
|
extern driver_t *drivers[N_DRIVERS];
|
||||||
|
|
||||||
extern channel_conf_t global_conf;
|
|
||||||
extern channel_conf_t *channels;
|
|
||||||
extern group_conf_t *groups;
|
|
||||||
extern int UseFSync;
|
|
||||||
|
|
||||||
int parse_bool( conffile_t *cfile );
|
|
||||||
int parse_int( conffile_t *cfile );
|
|
||||||
int 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 );
|
|
||||||
void parse_generic_store( store_conf_t *store, conffile_t *cfg );
|
|
||||||
|
|
||||||
/* drv_*.c */
|
|
||||||
extern driver_t maildir_driver, imap_driver;
|
extern driver_t maildir_driver, imap_driver;
|
||||||
|
|
||||||
|
#endif
|
|
@ -21,7 +21,9 @@
|
||||||
* despite that library's more restrictive license.
|
* despite that library's more restrictive license.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "isync.h"
|
#include "driver.h"
|
||||||
|
|
||||||
|
#include "socket.h"
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
* despite that library's more restrictive license.
|
* despite that library's more restrictive license.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "isync.h"
|
#include "driver.h"
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
* despite that library's more restrictive license.
|
* despite that library's more restrictive license.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "isync.h"
|
#include "sync.h"
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
@ -31,6 +31,9 @@
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <sys/wait.h>
|
#include <sys/wait.h>
|
||||||
|
|
||||||
|
int DFlags;
|
||||||
|
int UseFSync = 1;
|
||||||
|
|
||||||
int Pid; /* for maildir and imap */
|
int Pid; /* for maildir and imap */
|
||||||
char Hostname[256]; /* for maildir */
|
char Hostname[256]; /* for maildir */
|
||||||
const char *Home; /* for config */
|
const char *Home; /* for config */
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <config.h>
|
#include <autodefs.h>
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
18
src/socket.c
18
src/socket.c
|
@ -21,17 +21,7 @@
|
||||||
* despite that library's more restrictive license.
|
* despite that library's more restrictive license.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* This must come before isync.h to avoid our #define S messing up
|
#include "socket.h"
|
||||||
* blowfish.h on MacOS X. */
|
|
||||||
#include <config.h>
|
|
||||||
#ifdef HAVE_LIBSSL
|
|
||||||
# include <openssl/ssl.h>
|
|
||||||
# include <openssl/err.h>
|
|
||||||
# include <openssl/hmac.h>
|
|
||||||
# include <openssl/x509v3.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "isync.h"
|
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
@ -46,6 +36,12 @@
|
||||||
#include <netinet/tcp.h>
|
#include <netinet/tcp.h>
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
|
#ifdef HAVE_LIBSSL
|
||||||
|
# include <openssl/ssl.h>
|
||||||
|
# include <openssl/err.h>
|
||||||
|
# include <openssl/hmac.h>
|
||||||
|
# include <openssl/x509v3.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
SCK_CONNECTING,
|
SCK_CONNECTING,
|
||||||
|
|
118
src/socket.h
Normal file
118
src/socket.h
Normal file
|
@ -0,0 +1,118 @@
|
||||||
|
/*
|
||||||
|
* mbsync - mailbox synchronizer
|
||||||
|
* Copyright (C) 2000-2002 Michael R. Elkins <me@mutt.org>
|
||||||
|
* Copyright (C) 2002-2006,2010-2012 Oswald Buddenhagen <ossi@users.sf.net>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* As a special exception, mbsync may be linked with the OpenSSL library,
|
||||||
|
* despite that library's more restrictive license.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SOCKET_H
|
||||||
|
#define SOCKET_H
|
||||||
|
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
|
typedef struct ssl_st SSL;
|
||||||
|
typedef struct ssl_ctx_st SSL_CTX;
|
||||||
|
|
||||||
|
typedef struct server_conf {
|
||||||
|
char *tunnel;
|
||||||
|
char *host;
|
||||||
|
int port;
|
||||||
|
#ifdef HAVE_LIBSSL
|
||||||
|
char *cert_file;
|
||||||
|
char use_imaps;
|
||||||
|
char use_sslv2, use_sslv3, use_tlsv1, use_tlsv11, use_tlsv12;
|
||||||
|
|
||||||
|
/* these are actually variables and are leaked at the end */
|
||||||
|
char ssl_ctx_valid;
|
||||||
|
unsigned num_trusted;
|
||||||
|
SSL_CTX *SSLContext;
|
||||||
|
#endif
|
||||||
|
} server_conf_t;
|
||||||
|
|
||||||
|
typedef struct buff_chunk {
|
||||||
|
struct buff_chunk *next;
|
||||||
|
char *data;
|
||||||
|
int len;
|
||||||
|
char buf[1];
|
||||||
|
} buff_chunk_t;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
/* connection */
|
||||||
|
int fd;
|
||||||
|
int state;
|
||||||
|
const server_conf_t *conf; /* needed during connect */
|
||||||
|
#ifdef HAVE_IPV6
|
||||||
|
struct addrinfo *addrs, *curr_addr; /* needed during connect */
|
||||||
|
#else
|
||||||
|
char **curr_addr; /* needed during connect */
|
||||||
|
#endif
|
||||||
|
char *name;
|
||||||
|
#ifdef HAVE_LIBSSL
|
||||||
|
SSL *ssl;
|
||||||
|
int force_trusted;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void (*bad_callback)( void *aux ); /* async fail while sending or listening */
|
||||||
|
void (*read_callback)( void *aux ); /* data available for reading */
|
||||||
|
int (*write_callback)( void *aux ); /* all *queued* data was sent */
|
||||||
|
union {
|
||||||
|
void (*connect)( int ok, void *aux );
|
||||||
|
void (*starttls)( int ok, void *aux );
|
||||||
|
} callbacks;
|
||||||
|
void *callback_aux;
|
||||||
|
|
||||||
|
/* writing */
|
||||||
|
buff_chunk_t *write_buf, **write_buf_append; /* buffer head & tail */
|
||||||
|
int write_offset; /* offset into buffer head */
|
||||||
|
|
||||||
|
/* 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' */
|
||||||
|
char buf[100000];
|
||||||
|
} conn_t;
|
||||||
|
|
||||||
|
/* call this before doing anything with the socket */
|
||||||
|
static INLINE void socket_init( conn_t *conn,
|
||||||
|
const server_conf_t *conf,
|
||||||
|
void (*bad_callback)( void *aux ),
|
||||||
|
void (*read_callback)( void *aux ),
|
||||||
|
int (*write_callback)( void *aux ),
|
||||||
|
void *aux )
|
||||||
|
{
|
||||||
|
conn->conf = conf;
|
||||||
|
conn->bad_callback = bad_callback;
|
||||||
|
conn->read_callback = read_callback;
|
||||||
|
conn->write_callback = write_callback;
|
||||||
|
conn->callback_aux = aux;
|
||||||
|
conn->fd = -1;
|
||||||
|
conn->name = 0;
|
||||||
|
conn->write_buf_append = &conn->write_buf;
|
||||||
|
}
|
||||||
|
void socket_connect( conn_t *conn, void (*cb)( int ok, void *aux ) );
|
||||||
|
void socket_start_tls(conn_t *conn, void (*cb)( int ok, void *aux ) );
|
||||||
|
void socket_close( conn_t *sock );
|
||||||
|
int socket_read( conn_t *sock, char *buf, int len ); /* never waits */
|
||||||
|
char *socket_read_line( conn_t *sock ); /* don't free return value; never waits */
|
||||||
|
typedef enum { KeepOwn = 0, GiveOwn } ownership_t;
|
||||||
|
int socket_write( conn_t *sock, char *buf, int len, ownership_t takeOwn );
|
||||||
|
|
||||||
|
void cram( const char *challenge, const char *user, const char *pass,
|
||||||
|
char **_final, int *_finallen );
|
||||||
|
|
||||||
|
#endif
|
|
@ -20,7 +20,7 @@
|
||||||
* despite that library's more restrictive license.
|
* despite that library's more restrictive license.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "isync.h"
|
#include "sync.h"
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -39,6 +39,10 @@
|
||||||
# define fdatasync fsync
|
# define fdatasync fsync
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
channel_conf_t global_conf;
|
||||||
|
channel_conf_t *channels;
|
||||||
|
group_conf_t *groups;
|
||||||
|
|
||||||
const char *str_ms[] = { "master", "slave" }, *str_hl[] = { "push", "pull" };
|
const char *str_ms[] = { "master", "slave" }, *str_hl[] = { "push", "pull" };
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
81
src/sync.h
Normal file
81
src/sync.h
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
/*
|
||||||
|
* mbsync - mailbox synchronizer
|
||||||
|
* Copyright (C) 2000-2002 Michael R. Elkins <me@mutt.org>
|
||||||
|
* Copyright (C) 2002-2006,2010-2012 Oswald Buddenhagen <ossi@users.sf.net>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* As a special exception, mbsync may be linked with the OpenSSL library,
|
||||||
|
* despite that library's more restrictive license.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SYNC_H
|
||||||
|
#define SYNC_H
|
||||||
|
|
||||||
|
#include "driver.h"
|
||||||
|
|
||||||
|
#define M 0 /* master */
|
||||||
|
#define S 1 /* slave */
|
||||||
|
|
||||||
|
#define OP_NEW (1<<0)
|
||||||
|
#define OP_RENEW (1<<1)
|
||||||
|
#define OP_DELETE (1<<2)
|
||||||
|
#define OP_FLAGS (1<<3)
|
||||||
|
#define OP_MASK_TYPE (OP_NEW|OP_RENEW|OP_DELETE|OP_FLAGS) /* asserted in the target ops */
|
||||||
|
#define OP_EXPUNGE (1<<4)
|
||||||
|
#define OP_CREATE (1<<5)
|
||||||
|
#define XOP_PUSH (1<<6)
|
||||||
|
#define XOP_PULL (1<<7)
|
||||||
|
#define XOP_MASK_DIR (XOP_PUSH|XOP_PULL)
|
||||||
|
#define XOP_HAVE_TYPE (1<<8)
|
||||||
|
#define XOP_HAVE_EXPUNGE (1<<9)
|
||||||
|
#define XOP_HAVE_CREATE (1<<10)
|
||||||
|
|
||||||
|
typedef struct channel_conf {
|
||||||
|
struct channel_conf *next;
|
||||||
|
const char *name;
|
||||||
|
store_conf_t *stores[2];
|
||||||
|
const char *boxes[2];
|
||||||
|
char *sync_state;
|
||||||
|
string_list_t *patterns;
|
||||||
|
int ops[2];
|
||||||
|
unsigned max_messages; /* for slave only */
|
||||||
|
signed char expire_unread;
|
||||||
|
char use_internal_date;
|
||||||
|
} channel_conf_t;
|
||||||
|
|
||||||
|
typedef struct group_conf {
|
||||||
|
struct group_conf *next;
|
||||||
|
const char *name;
|
||||||
|
string_list_t *channels;
|
||||||
|
} group_conf_t;
|
||||||
|
|
||||||
|
extern channel_conf_t global_conf;
|
||||||
|
extern channel_conf_t *channels;
|
||||||
|
extern group_conf_t *groups;
|
||||||
|
|
||||||
|
extern const char *str_ms[2], *str_hl[2];
|
||||||
|
|
||||||
|
#define SYNC_OK 0 /* assumed to be 0 */
|
||||||
|
#define SYNC_FAIL 1
|
||||||
|
#define SYNC_FAIL_ALL 2
|
||||||
|
#define SYNC_BAD(ms) (4<<(ms))
|
||||||
|
#define SYNC_NOGOOD 16 /* internal */
|
||||||
|
#define SYNC_CANCELED 32 /* internal */
|
||||||
|
|
||||||
|
/* All passed pointers must stay alive until cb is called. */
|
||||||
|
void sync_boxes( store_t *ctx[], const char *names[], channel_conf_t *chan,
|
||||||
|
void (*cb)( int sts, void *aux ), void *aux );
|
||||||
|
|
||||||
|
#endif
|
14
src/util.c
14
src/util.c
|
@ -20,7 +20,7 @@
|
||||||
* despite that library's more restrictive license.
|
* despite that library's more restrictive license.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "isync.h"
|
#include "common.h"
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
@ -29,7 +29,6 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <pwd.h>
|
#include <pwd.h>
|
||||||
|
|
||||||
int DFlags;
|
|
||||||
static int need_nl;
|
static int need_nl;
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -174,17 +173,6 @@ free_string_list( string_list_t *list )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
free_generic_messages( message_t *msgs )
|
|
||||||
{
|
|
||||||
message_t *tmsg;
|
|
||||||
|
|
||||||
for (; msgs; msgs = tmsg) {
|
|
||||||
tmsg = msgs->next;
|
|
||||||
free( msgs );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef HAVE_VASPRINTF
|
#ifndef HAVE_VASPRINTF
|
||||||
static int
|
static int
|
||||||
vasprintf( char **strp, const char *fmt, va_list ap )
|
vasprintf( char **strp, const char *fmt, va_list ap )
|
||||||
|
|
Loading…
Reference in New Issue
Block a user