Back to index

courier  0.68.2
maildirshared2.c
Go to the documentation of this file.
00001 /*
00002 ** Copyright 2000 Double Precision, Inc.
00003 ** See COPYING for distribution information.
00004 */
00005 
00006 #include      "config.h"
00007 #include      "maildirmisc.h"
00008 #include      <stdio.h>
00009 #include      <string.h>
00010 #include      <stdlib.h>
00011 #include      <ctype.h>
00012 #include      <errno.h>
00013 
00014 
00015 FILE *maildir_shared_fopen(const char *maildir, const char *mode)
00016 {
00017 char   *m;
00018 FILE   *fp;
00019 
00020        m=malloc(strlen(maildir)+sizeof("/shared-maildirs"));
00021        if (!m)
00022        {
00023               perror("malloc");
00024               return (0);
00025        }
00026        strcat(strcpy(m, maildir), "/shared-maildirs");
00027 
00028        fp=fopen(m, mode);
00029        free(m);
00030        return (fp);
00031 }
00032 
00033 void maildir_shared_fparse(char *p, char **name, char **dir)
00034 {
00035 char   *q;
00036 
00037        *name=0;
00038        *dir=0;
00039 
00040        if ((q=strchr(p, '\n')) != 0)      *q=0;
00041        if ((q=strchr(p, '#')) != 0)       *q=0;
00042 
00043        for (q=p; *q; q++)
00044               if (isspace((int)(unsigned char)*q))      break;
00045        if (!*q)      return;
00046        *q++=0;
00047        while (*q && isspace((int)(unsigned char)*q))
00048               ++q;
00049        if (*q)
00050        {
00051               *name=p;
00052               *dir=q;
00053        }
00054 }
00055 
00056 char *maildir_shareddir(const char *maildir, const char *sharedname)
00057 {
00058 char    *p, *q;
00059 const char *r;
00060 
00061        if (!maildir)   maildir=".";
00062 
00063        if (strchr(sharedname, '.') == 0 || *sharedname == '.' ||
00064               strchr(sharedname, '/'))
00065        {
00066               errno=EINVAL;
00067               return (0);
00068        }
00069 
00070        for (r=sharedname; *r; r++)
00071        {
00072               if (*r == '.' && (r[1] == '.' || r[1] == '\0'))
00073               {
00074                      errno=EINVAL;
00075                      return (0);
00076               }
00077        }
00078 
00079        p=malloc(strlen(maildir)+sizeof("/" SHAREDSUBDIR "/")+strlen(sharedname));
00080        if (!p)       return (0);
00081 
00082         *p=0;
00083         if (strcmp(maildir, "."))
00084               strcat(strcpy(p, maildir), "/");
00085        strcat(p, SHAREDSUBDIR "/");
00086        q=p+strlen(p);
00087        strcpy(q, sharedname);
00088        *strchr(q, '.')='/';
00089        return (p);
00090 }