mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-27 05:07:56 +01:00
202 lines
5.3 KiB
C
202 lines
5.3 KiB
C
|
#ifndef maildirmisc_h
|
||
|
#define maildirmisc_h
|
||
|
|
||
|
/*
|
||
|
** Copyright 2000-2003 Double Precision, Inc.
|
||
|
** See COPYING for distribution information.
|
||
|
*/
|
||
|
|
||
|
#if HAVE_CONFIG_H
|
||
|
#include "config.h"
|
||
|
#endif
|
||
|
|
||
|
#if HAVE_SYS_STAT_H
|
||
|
#include <sys/stat.h>
|
||
|
#endif
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/*
|
||
|
**
|
||
|
** Miscellaneous maildir-related code
|
||
|
**
|
||
|
*/
|
||
|
|
||
|
/* Some special folders */
|
||
|
|
||
|
#define INBOX "INBOX"
|
||
|
#define DRAFTS "Drafts"
|
||
|
#define SENT "Sent"
|
||
|
#define TRASH "Trash"
|
||
|
#define SHARED "shared"
|
||
|
|
||
|
#define SHAREDSUBDIR "shared-folders"
|
||
|
|
||
|
#define NEWSHAREDSP "#shared"
|
||
|
#define NEWSHARED "#shared."
|
||
|
|
||
|
#define PUBLIC "public" /* SMAP */
|
||
|
|
||
|
int maildir_make(const char *maildir, int perm, int subdirperm,
|
||
|
int folder);
|
||
|
|
||
|
int maildir_del(const char *maildir);
|
||
|
|
||
|
int maildir_del_content(const char *maildir);
|
||
|
|
||
|
char *maildir_name2dir(const char *maildir, /* DIR location */
|
||
|
const char *foldername); /* INBOX.name */
|
||
|
|
||
|
char *maildir_location(const char *homedir,
|
||
|
const char *maildir);
|
||
|
/*
|
||
|
** Homedir is the account's home directory, "maildir" is where the account's
|
||
|
** default Maildir is configured to be (usually "./Maildir"). Combine the
|
||
|
** two to produce an absolute pathname.
|
||
|
*/
|
||
|
|
||
|
|
||
|
char *maildir_folderdir(const char *, /* maildir */
|
||
|
const char *); /* folder name */
|
||
|
/* Returns the directory corresponding to foldername (foldername is
|
||
|
** checked to make sure that it's a valid name, else we set errno
|
||
|
** to EINVAL, and return (0).
|
||
|
*/
|
||
|
|
||
|
char *maildir_filename(const char *, /* maildir */
|
||
|
const char *, /* folder */
|
||
|
const char *); /* filename */
|
||
|
/*
|
||
|
** Builds the filename to this message, suitable for opening.
|
||
|
** If the file doesn't appear to be there, search the maildir to
|
||
|
** see if someone changed the flags, and return the current filename.
|
||
|
*/
|
||
|
|
||
|
int maildir_safeopen(const char *, /* filename */
|
||
|
int, /* mode */
|
||
|
int); /* perm */
|
||
|
|
||
|
/*
|
||
|
** Same arguments as open(). When we're accessing a shared maildir,
|
||
|
** prevent someone from playing cute and dumping a bunch of symlinks
|
||
|
** in there. This function will open the indicate file only if the
|
||
|
** last component is not a symlink.
|
||
|
** This is implemented by opening the file with O_NONBLOCK (to prevent
|
||
|
** a DOS attack of someone pointing the symlink to a pipe, causing
|
||
|
** the open to hang), clearing O_NONBLOCK, then stat-int the file
|
||
|
** descriptor, lstating the filename, and making sure that dev/ino
|
||
|
** match.
|
||
|
*/
|
||
|
|
||
|
int maildir_semisafeopen(const char *, /* filename */
|
||
|
int, /* mode */
|
||
|
int); /* perm */
|
||
|
|
||
|
/*
|
||
|
** Same thing, except that we allow ONE level of soft link indirection,
|
||
|
** because we're reading from our own maildir, which points to the
|
||
|
** message in the sharable maildir.
|
||
|
*/
|
||
|
|
||
|
int maildir_safeopen_stat(const char *path, int mode, int perm,
|
||
|
struct stat *stat1);
|
||
|
/* Sane as maildir_safeopen(), except that we also initialize a
|
||
|
** struct stat, saving an extra syscall to the caller.
|
||
|
*/
|
||
|
|
||
|
int maildir_mkdir(const char *); /* directory */
|
||
|
/*
|
||
|
** Create maildir including all subdirectories in the path (like mkdir -p)
|
||
|
*/
|
||
|
|
||
|
void maildir_purgetmp(const char *); /* maildir */
|
||
|
/* purges old stuff out of tmp */
|
||
|
|
||
|
void maildir_purge(const char *, /* directory */
|
||
|
unsigned); /* time_t to purge */
|
||
|
|
||
|
void maildir_getnew(const char *, /* maildir */
|
||
|
const char *, /* folder */
|
||
|
void (*)(const char *, void *), /* Callback function for
|
||
|
** every moved msg.
|
||
|
*/
|
||
|
void *arg); /* Passthrough callback arg */
|
||
|
|
||
|
/* move messages from new to cur */
|
||
|
|
||
|
int maildir_deletefolder(const char *, /* maildir */
|
||
|
const char *); /* folder */
|
||
|
/* deletes a folder */
|
||
|
|
||
|
void maildir_list(const char *maildir,
|
||
|
void (*func)(const char *, void *),
|
||
|
void *voidp);
|
||
|
|
||
|
void maildir_list_sharable(const char *, /* maildir */
|
||
|
void (*)(const char *, void *), /* callback function */
|
||
|
void *); /* 2nd arg to callback func */
|
||
|
/* list sharable folders */
|
||
|
|
||
|
int maildir_shared_subscribe(const char *, /* maildir */
|
||
|
const char *); /* folder */
|
||
|
/* subscribe to a shared folder */
|
||
|
|
||
|
void maildir_list_shared(const char *, /* maildir */
|
||
|
void (*)(const char *, void *), /* callback function */
|
||
|
void *); /* 2nd arg to the callback func */
|
||
|
/* list subscribed folders */
|
||
|
|
||
|
int maildir_shared_unsubscribe(const char *, /* maildir */
|
||
|
const char *); /* folder */
|
||
|
/* unsubscribe from a shared folder */
|
||
|
|
||
|
char *maildir_shareddir(const char *, /* maildir */
|
||
|
const char *); /* folder */
|
||
|
/*
|
||
|
** Validate and return a path to a shared folder. folderdir must be
|
||
|
** a name of a valid shared folder.
|
||
|
*/
|
||
|
|
||
|
void maildir_shared_sync(const char *); /* maildir */
|
||
|
/* "sync" the shared folder */
|
||
|
|
||
|
int maildir_sharedisro(const char *); /* maildir */
|
||
|
/* maildir is a shared read-only folder */
|
||
|
|
||
|
int maildir_unlinksharedmsg(const char *); /* filename */
|
||
|
/* Remove a message from a shared folder */
|
||
|
|
||
|
/* Internal function that reads a symlink */
|
||
|
|
||
|
char *maildir_getlink(const char *);
|
||
|
|
||
|
/* Determine whether the maildir filename has a certain flag */
|
||
|
|
||
|
int maildir_hasflag(const char *filename, char);
|
||
|
|
||
|
#define MAILDIR_DELETED(f) maildir_hasflag((f), 'T')
|
||
|
|
||
|
/*
|
||
|
** Hierarchical maildir rename.
|
||
|
*/
|
||
|
|
||
|
#define MAILDIR_RENAME_FOLDER 1
|
||
|
#define MAILDIR_RENAME_SUBFOLDERS 2
|
||
|
|
||
|
int maildir_rename(const char *maildir, /* Path to the maildir */
|
||
|
const char *oldname, /* .foldername */
|
||
|
const char *newname, /* .foldername */
|
||
|
int flags, /* See above */
|
||
|
void (*callback_func)(const char *old_path,
|
||
|
const char *new_path)
|
||
|
);
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif
|