diff options
Diffstat (limited to 'maildir/maildirrequota.c')
| -rw-r--r-- | maildir/maildirrequota.c | 42 | 
1 files changed, 42 insertions, 0 deletions
| diff --git a/maildir/maildirrequota.c b/maildir/maildirrequota.c new file mode 100644 index 0000000..f4dd284 --- /dev/null +++ b/maildir/maildirrequota.c @@ -0,0 +1,42 @@ +/* +** Copyright 1998 - 2002 Double Precision, Inc. +** See COPYING for distribution information. +*/ + +#include	"config.h" +#include	<stdlib.h> +#include	<string.h> +#include	<stdio.h> +#include	<ctype.h> +#include	"maildirrequota.h" + + +char *maildir_requota(const char *oldname, unsigned long s) +{ +char	buf[40]; +char	*p; +const char *q; + +	sprintf(buf, ",S=%lu", s); + +	if ((p=malloc(strlen(oldname)+strlen(buf)+1)) == 0)	return (0); + +	if ((q=strrchr(oldname, '/')) == 0)	q=oldname; +	while (*q) +	{ +		if ((*q == ',' && q[1] == 'S' && q[2] == '=') || *q == MDIRSEP[0]) +		{ +			memcpy(p, oldname, q-oldname); +			strcpy(p + (q-oldname), buf); + +			if (*q == ',')	q += 3; + +			for ( ; isdigit((int)(unsigned char)*q); q++) +				; +			strcat(p, q); +			return (p); +		} +		++q; +	} +	return (strcat(strcpy(p, oldname), buf)); +} | 
