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