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

Reply via email to