I believe this fixes most of my problems with weird quotas showing up in maildirsize files, as on some systems long and off_t are not the same. The "%lld" in the sprintf (bottom of the patch) may not be correct on all systems but was required in my case, as off_t is typedef'd as long long.
--- maildirquota.h.orig Sun Mar 20 09:01:43 2005 +++ maildirquota.h Wed Mar 8 10:52:32 2006 @@ -21,7 +21,7 @@ int maildir_addquota(const char *, /* Pointer to the maildir */ int, /* Must be the int pointed to by 2nd arg to checkquota */ const char *, /* The quota */ - long, /* +/- bytes */ + off_t, /* +/- bytes */ int); /* +/- files */ /* skip the rest... */ @@ -50,7 +50,7 @@ int maildir_checkquota(const char *, /* Pointer to directory */ int *, /* Initialized to -1, or opened descriptor for maildirsize */ const char *, /* The quota */ - long, /* Extra bytes planning to add/remove from maildir */ + off_t, /* Extra bytes planning to add/remove from maildir */ int); /* Extra messages planning to add/remove from maildir */ int maildir_readquota(const char *, /* Directory */ --- maildirquota.c.orig Tue Jan 17 11:08:34 2006 +++ maildirquota.c Wed Mar 8 10:52:34 2006 @@ -43,12 +43,12 @@ time_t *, off_t *, unsigned *); static int statcurnew(const char *, time_t *); static int statsubdir(const char *, const char *, time_t *); -static int doaddquota(const char *, int, const char *, long, int, int); +static int doaddquota(const char *, int, const char *, off_t, int, int); static int docheckquota(const char *dir, int *maildirsize_fdptr, - const char *quota_type, long xtra_size, int xtra_cnt, int *percentage); + const char *quota_type, off_t xtra_size, int xtra_cnt, int *percentage); static int docount(const char *, time_t *, off_t *, unsigned *); static int maildir_checkquota(const char *dir, int *maildirsize_fdptr, - const char *quota_type, long xtra_size, int xtra_cnt); + const char *quota_type, off_t xtra_size, int xtra_cnt); /* moved into maildirquota.h as non-static static int maildir_addquota(const char *dir, int maildirsize_fd, const char *quota_type, long maildirsize_size, int maildirsize_cnt); @@ -407,7 +407,7 @@ static int maildir_checkquota(const char *dir, int *maildirsize_fdptr, const char *quota_type, - long xtra_size, + off_t xtra_size, int xtra_cnt) { int dummy; @@ -430,7 +430,7 @@ static int docheckquota(const char *dir, int *maildirsize_fdptr, const char *quota_type, - long xtra_size, + off_t xtra_size, int xtra_cnt, int *percentage) { @@ -593,7 +593,7 @@ } int maildir_addquota(const char *dir, int maildirsize_fd, - const char *quota_type, long maildirsize_size, int maildirsize_cnt) + const char *quota_type, off_t maildirsize_size, int maildirsize_cnt) { if (!quota_type || !*quota_type) return (0); return (doaddquota(dir, maildirsize_fd, quota_type, maildirsize_size, @@ -601,7 +601,7 @@ } static int doaddquota(const char *dir, int maildirsize_fd, - const char *quota_type, long maildirsize_size, int maildirsize_cnt, + const char *quota_type, off_t maildirsize_size, int maildirsize_cnt, int isnew) { union { @@ -665,7 +665,7 @@ } - sprintf(u.buf, "%ld %d\n", maildirsize_size, maildirsize_cnt); + sprintf(u.buf, "%lld %d\n", maildirsize_size, maildirsize_cnt); iov[niov].iov_base=u.buf; iov[niov].iov_len=strlen(u.buf); -- Jon Simola Systems Administrator ABC Communications