NeoMutt  2025-12-11-980-ge38c27
Teaching an old dog new tricks
DOXYGEN
Loading...
Searching...
No Matches
path_probe()

Does this Mailbox type recognise this path? More...

+ Collaboration diagram for path_probe():

Functions

static enum MailboxType comp_path_probe (const char *path, const struct stat *st)
 Is this a compressed Mailbox?
 
enum MailboxType imap_path_probe (const char *path, const struct stat *st)
 Is this an IMAP Mailbox?
 
enum MailboxType maildir_path_probe (const char *path, const struct stat *st)
 Is this a Maildir Mailbox?
 
enum MailboxType mbox_path_probe (const char *path, const struct stat *st)
 Is this an mbox Mailbox?
 
static enum MailboxType mh_path_probe (const char *path, const struct stat *st)
 Is this an mh Mailbox?
 
enum MailboxType nntp_path_probe (const char *path, const struct stat *st)
 Is this an NNTP Mailbox?
 
enum MailboxType nm_path_probe (const char *path, const struct stat *st)
 Is this a Notmuch Mailbox?
 
enum MailboxType pop_path_probe (const char *path, const struct stat *st)
 Is this a POP Mailbox?
 

Detailed Description

Does this Mailbox type recognise this path?

Parameters
pathPath to examine
ststat buffer (for local filesystems)
Return values
enumMailboxType, e.g. MUTT_IMAP
Precondition
path is not NULL

Function Documentation

◆ comp_path_probe()

static enum MailboxType comp_path_probe ( const char * path,
const struct stat * st )
static

Is this a compressed Mailbox?

Definition at line 863 of file compress.c.

864{
865 if (!st || !S_ISREG(st->st_mode))
866 return MUTT_UNKNOWN;
867
868 if (mutt_comp_can_read(path))
869 return MUTT_COMPRESSED;
870
871 return MUTT_UNKNOWN;
872}
bool mutt_comp_can_read(const char *path)
Can we read from this file?
Definition compress.c:366
@ MUTT_COMPRESSED
Compressed file Mailbox type.
Definition mailbox.h:52
@ MUTT_UNKNOWN
Mailbox wasn't recognised.
Definition mailbox.h:43
+ Here is the call graph for this function:

◆ imap_path_probe()

enum MailboxType imap_path_probe ( const char * path,
const struct stat * st )

Is this an IMAP Mailbox?

Definition at line 2683 of file imap.c.

2684{
2685 if (mutt_istr_startswith(path, "imap://"))
2686 return MUTT_IMAP;
2687
2688 if (mutt_istr_startswith(path, "imaps://"))
2689 return MUTT_IMAP;
2690
2691 return MUTT_UNKNOWN;
2692}
@ MUTT_IMAP
'IMAP' Mailbox type
Definition mailbox.h:49
size_t mutt_istr_startswith(const char *str, const char *prefix)
Check whether a string starts with a prefix, ignoring case.
Definition string.c:246
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ maildir_path_probe()

enum MailboxType maildir_path_probe ( const char * path,
const struct stat * st )

Is this a Maildir Mailbox?

Definition at line 94 of file path.c.

95{
96 if (!st || !S_ISDIR(st->st_mode))
97 return MUTT_UNKNOWN;
98
99 char sub[PATH_MAX] = { 0 };
100 struct stat stsub = { 0 };
101 char *subs[] = { "cur", "new", "tmp" };
102 for (size_t i = 0; i < countof(subs); i++)
103 {
104 snprintf(sub, sizeof(sub), "%s/%s", path, subs[i]);
105 if ((stat(sub, &stsub) != 0) || !S_ISDIR(stsub.st_mode))
106 return MUTT_UNKNOWN;
107 }
108
109 return MUTT_MAILDIR;
110}
@ MUTT_MAILDIR
'Maildir' Mailbox type
Definition mailbox.h:47
#define countof(x)
Definition memory.h:49
#define PATH_MAX
Definition mutt.h:49

◆ mbox_path_probe()

enum MailboxType mbox_path_probe ( const char * path,
const struct stat * st )

Is this an mbox Mailbox?

Definition at line 1571 of file mbox.c.

1572{
1573 if (!st)
1574 return MUTT_UNKNOWN;
1575
1576 if (S_ISDIR(st->st_mode))
1577 return MUTT_UNKNOWN;
1578
1579 if (st->st_size == 0)
1580 return MUTT_MBOX;
1581
1582 FILE *fp = mutt_file_fopen(path, "r");
1583 if (!fp)
1584 return MUTT_UNKNOWN;
1585
1586 int ch;
1587 while ((ch = fgetc(fp)) != EOF)
1588 {
1589 /* Some mailbox creation tools erroneously append a blank line to
1590 * a file before appending a mail message. This allows neomutt to
1591 * detect type for and thus open those files. */
1592 if ((ch != '\n') && (ch != '\r'))
1593 {
1594 ungetc(ch, fp);
1595 break;
1596 }
1597 }
1598
1599 enum MailboxType type = MUTT_UNKNOWN;
1600 char tmp[256] = { 0 };
1601 if (fgets(tmp, sizeof(tmp), fp))
1602 {
1603 if (mutt_str_startswith(tmp, "From "))
1604 type = MUTT_MBOX;
1605 else if (mutt_str_equal(tmp, MMDF_SEP))
1606 type = MUTT_MMDF;
1607 }
1608 mutt_file_fclose(&fp);
1609
1610 const bool c_check_mbox_size = cs_subset_bool(NeoMutt->sub, "check_mbox_size");
1611 if (!c_check_mbox_size)
1612 {
1613 /* need to restore the times here, the file was not really accessed,
1614 * only the type was accessed. This is important, because detection
1615 * of "new mail" depends on those times set correctly. */
1616#ifdef HAVE_UTIMENSAT
1617 struct timespec ts[2] = { { 0 }, { 0 } };
1620 utimensat(AT_FDCWD, path, ts, 0);
1621#else
1622 struct utimbuf times = { 0 };
1623 times.actime = st->st_atime;
1624 times.modtime = st->st_mtime;
1625 utime(path, &times);
1626#endif
1627 }
1628
1629 return type;
1630}
bool cs_subset_bool(const struct ConfigSubset *sub, const char *name)
Get a boolean config item by name.
Definition helpers.c:47
MailboxType
Supported mailbox formats.
Definition mailbox.h:40
@ MUTT_MMDF
'mmdf' Mailbox type
Definition mailbox.h:45
@ MUTT_MBOX
'mbox' Mailbox type
Definition mailbox.h:44
void mutt_file_get_stat_timespec(struct timespec *dest, struct stat *st, enum MuttStatType type)
Read the stat() time into a time value.
Definition file.c:1475
#define mutt_file_fclose(FP)
Definition file.h:144
#define mutt_file_fopen(PATH, MODE)
Definition file.h:143
@ MUTT_STAT_ATIME
File/dir's atime - last accessed time.
Definition file.h:58
@ MUTT_STAT_MTIME
File/dir's mtime - last modified time.
Definition file.h:59
#define MMDF_SEP
Definition lib.h:63
bool mutt_str_equal(const char *a, const char *b)
Compare two strings.
Definition string.c:666
size_t mutt_str_startswith(const char *str, const char *prefix)
Check whether a string starts with a prefix.
Definition string.c:234
Container for Accounts, Notifications.
Definition neomutt.h:41
struct ConfigSubset * sub
Inherited config items.
Definition neomutt.h:49
+ Here is the call graph for this function:

◆ mh_path_probe()

static enum MailboxType mh_path_probe ( const char * path,
const struct stat * st )
static

Is this an mh Mailbox?

Definition at line 1203 of file mh.c.

1204{
1205 if (!st || !S_ISDIR(st->st_mode))
1206 return MUTT_UNKNOWN;
1207
1208 char tmp[PATH_MAX] = { 0 };
1209
1210 snprintf(tmp, sizeof(tmp), "%s/.mh_sequences", path);
1211 if (access(tmp, F_OK) == 0)
1212 return MUTT_MH;
1213
1214 snprintf(tmp, sizeof(tmp), "%s/.xmhcache", path);
1215 if (access(tmp, F_OK) == 0)
1216 return MUTT_MH;
1217
1218 snprintf(tmp, sizeof(tmp), "%s/.mew_cache", path);
1219 if (access(tmp, F_OK) == 0)
1220 return MUTT_MH;
1221
1222 snprintf(tmp, sizeof(tmp), "%s/.mew-cache", path);
1223 if (access(tmp, F_OK) == 0)
1224 return MUTT_MH;
1225
1226 snprintf(tmp, sizeof(tmp), "%s/.sylpheed_cache", path);
1227 if (access(tmp, F_OK) == 0)
1228 return MUTT_MH;
1229
1230 /* ok, this isn't an mh folder, but mh mode can be used to read
1231 * Usenet news from the spool. */
1232
1233 snprintf(tmp, sizeof(tmp), "%s/.overview", path);
1234 if (access(tmp, F_OK) == 0)
1235 return MUTT_MH;
1236
1237 return MUTT_UNKNOWN;
1238}
@ MUTT_MH
'MH' Mailbox type
Definition mailbox.h:46

◆ nntp_path_probe()

enum MailboxType nntp_path_probe ( const char * path,
const struct stat * st )

Is this an NNTP Mailbox?

Definition at line 2797 of file nntp.c.

2798{
2799 if (mutt_istr_startswith(path, "news://"))
2800 return MUTT_NNTP;
2801
2802 if (mutt_istr_startswith(path, "snews://"))
2803 return MUTT_NNTP;
2804
2805 return MUTT_UNKNOWN;
2806}
@ MUTT_NNTP
'NNTP' (Usenet) Mailbox type
Definition mailbox.h:48
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ nm_path_probe()

enum MailboxType nm_path_probe ( const char * path,
const struct stat * st )

Is this a Notmuch Mailbox?

Definition at line 2478 of file notmuch.c.

2479{
2481 return MUTT_UNKNOWN;
2482
2483 return MUTT_NOTMUCH;
2484}
@ MUTT_NOTMUCH
'Notmuch' (virtual) Mailbox type
Definition mailbox.h:50
const char NmUrlProtocol[]
Protocol string for Notmuch URLs.
Definition notmuch.c:102
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ pop_path_probe()

enum MailboxType pop_path_probe ( const char * path,
const struct stat * st )

Is this a POP Mailbox?

Definition at line 1177 of file pop.c.

1178{
1179 if (mutt_istr_startswith(path, "pop://"))
1180 return MUTT_POP;
1181
1182 if (mutt_istr_startswith(path, "pops://"))
1183 return MUTT_POP;
1184
1185 return MUTT_UNKNOWN;
1186}
@ MUTT_POP
'POP3' Mailbox type
Definition mailbox.h:51
+ Here is the call graph for this function:
+ Here is the caller graph for this function: