aboutsummaryrefslogtreecommitdiffhomepage
path: root/contrib/notmuch-deliver/src/maildiropen.c
diff options
context:
space:
mode:
authorGravatar Thomas Schwinge <thomas@schwinge.name>2010-12-29 12:00:30 +0100
committerGravatar Ali Polatel <alip@exherbo.org>2011-11-05 01:12:35 +0200
commit38b245b46a51be82a5a5f798255cbbbbc0186f78 (patch)
treed4210e76396f3d45614f329f8288e10762fad407 /contrib/notmuch-deliver/src/maildiropen.c
parent5f53ce3e2b9704f4f2a4be92c91f82c697c15b9d (diff)
Move files copied from maildrop to a separate hierarchy.
Signed-off-by: Thomas Schwinge <thomas@schwinge.name>
Diffstat (limited to 'contrib/notmuch-deliver/src/maildiropen.c')
-rw-r--r--contrib/notmuch-deliver/src/maildiropen.c141
1 files changed, 0 insertions, 141 deletions
diff --git a/contrib/notmuch-deliver/src/maildiropen.c b/contrib/notmuch-deliver/src/maildiropen.c
deleted file mode 100644
index 5071df76..00000000
--- a/contrib/notmuch-deliver/src/maildiropen.c
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
-** Copyright 2000 Double Precision, Inc.
-** See COPYING for distribution information.
-*/
-
-#if HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <string.h>
-#include <stdlib.h>
-#include <time.h>
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <stdio.h>
-#include <ctype.h>
-#include <errno.h>
-#include <fcntl.h>
-
-#include "maildirmisc.h"
-
-static const char rcsid[]="$Id: maildiropen.c,v 1.8 2003/01/19 16:39:52 mrsam Exp $";
-
-char *maildir_getlink(const char *filename)
-{
-#if HAVE_READLINK
-size_t bufsiz;
-char *buf;
-
- bufsiz=0;
- buf=0;
-
- for (;;)
- {
- int n;
-
- if (buf) free(buf);
- bufsiz += 256;
- if ((buf=malloc(bufsiz)) == 0)
- {
- perror("malloc");
- return (0);
- }
- if ((n=readlink(filename, buf, bufsiz)) < 0)
- {
- free(buf);
- return (0);
- }
- if (n < bufsiz)
- {
- buf[n]=0;
- break;
- }
- }
- return (buf);
-#else
- return (0);
-#endif
-}
-
-int maildir_semisafeopen(const char *path, int mode, int perm)
-{
-
-#if HAVE_READLINK
-
-char *l=maildir_getlink(path);
-
- if (l)
- {
- int f;
-
- if (*l != '/')
- {
- char *q=malloc(strlen(path)+strlen(l)+2);
- char *s;
-
- if (!q)
- {
- free(l);
- return (-1);
- }
-
- strcpy(q, path);
- if ((s=strchr(q, '/')) != 0)
- s[1]=0;
- else *q=0;
- strcat(q, l);
- free(l);
- l=q;
- }
-
- f=maildir_safeopen(l, mode, perm);
-
- free(l);
- return (f);
- }
-#endif
-
- return (maildir_safeopen(path, mode, perm));
-}
-
-int maildir_safeopen(const char *path, int mode, int perm)
-{
- struct stat stat1;
-
- return maildir_safeopen_stat(path, mode, perm, &stat1);
-}
-
-int maildir_safeopen_stat(const char *path, int mode, int perm,
- struct stat *stat1)
-{
- struct stat stat2;
-
- int fd=open(path, mode
-#ifdef O_NONBLOCK
- | O_NONBLOCK
-#else
- | O_NDELAY
-#endif
- , perm);
-
- if (fd < 0) return (fd);
- if (fcntl(fd, F_SETFL, (mode & O_APPEND)) || fstat(fd, stat1)
- || lstat(path, &stat2))
- {
- close(fd);
- return (-1);
- }
-
- if (stat1->st_dev != stat2.st_dev || stat1->st_ino != stat2.st_ino)
- {
- close(fd);
- errno=ENOENT;
- return (-1);
- }
-
- return (fd);
-}