diff options
Diffstat (limited to 'maildir')
| -rw-r--r-- | maildir/maildirgetnew.c | 17 | ||||
| -rw-r--r-- | maildir/maildirmisc.h | 7 | ||||
| -rw-r--r-- | maildir/maildirshared.c | 6 | 
3 files changed, 22 insertions, 8 deletions
| diff --git a/maildir/maildirgetnew.c b/maildir/maildirgetnew.c index 940277f..0ef75db 100644 --- a/maildir/maildirgetnew.c +++ b/maildir/maildirgetnew.c @@ -38,9 +38,13 @@  #include	"maildirmisc.h" -static void do_maildir_getnew(const char *, const char *); +static void do_maildir_getnew(const char *, const char *, +			      void (*)(const char *, void *), +			      void *); -void maildir_getnew(const char *maildir, const char *folder) +void maildir_getnew(const char *maildir, const char *folder, +		    void (*callback_func)(const char *, void *), +		    void *callback_arg)  {  char	*dir=maildir_folderdir(maildir, folder);  char	*newd, *curd; @@ -54,7 +58,7 @@ char	*newd, *curd;  	{  		strcat(strcpy(newd, dir), "/new");  		strcat(strcpy(curd, dir), "/cur"); -		do_maildir_getnew(newd, curd); +		do_maildir_getnew(newd, curd, callback_func, callback_arg);  	}  	if (newd)	free(newd); @@ -62,7 +66,9 @@ char	*newd, *curd;  	free(dir);  } -static void do_maildir_getnew(const char *newd, const char *curd) +static void do_maildir_getnew(const char *newd, const char *curd, +			      void (*callback_func)(const char *, void *), +			      void *callback_arg)  {  	DIR	*dirp;  	struct dirent *de; @@ -137,6 +143,9 @@ static void do_maildir_getnew(const char *newd, const char *curd)  				/* otherwise we could have infinite loop */  			} +			if (callback_func) +				(*callback_func)(strrchr(cp, '/')+1, +						 callback_arg);  			free(np);  			free(cp);  		} diff --git a/maildir/maildirmisc.h b/maildir/maildirmisc.h index a28df9c..e1e7c19 100644 --- a/maildir/maildirmisc.h +++ b/maildir/maildirmisc.h @@ -119,7 +119,12 @@ void maildir_purge(const char *,		/* directory */  	unsigned);				/* time_t to purge */  void maildir_getnew(const char *,		/* maildir */ -		    const char *);		/* folder */ +	const char *,				/* folder */ +	void (*)(const char *, void *),		/* Callback function for +						** every moved msg. +						*/ +	void *arg);				/* Passthrough callback arg */ +  	/* move messages from new to cur */  int maildir_deletefolder(const char *,		/* maildir */ diff --git a/maildir/maildirshared.c b/maildir/maildirshared.c index 736fc39..7123ce6 100644 --- a/maildir/maildirshared.c +++ b/maildir/maildirshared.c @@ -722,10 +722,10 @@ struct	stat	stat1, stat2;  int	fd;  	maildir_purgetmp(dir);	/* clean up after myself */ -	maildir_getnew(dir, 0); +	maildir_getnew(dir, 0, NULL, NULL);  	maildir_purgetmp(shared); -	maildir_getnew(shared, 0); +	maildir_getnew(shared, 0, NULL, NULL);  	/* Figure out if we REALLY need to sync something */ @@ -851,7 +851,7 @@ char	*buf=maildir_getlink(filename);  				}  				free(cpy);  			} - +						  			free(buf);  			return (0);  		} | 
