Skip to content
Toggle navigation
Toggle navigation
This project
Loading...
Sign in
John McEleney
/
mailutils
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Issue Boards
Files
Commits
Network
Compare
Branches
Tags
Commit
5a2f11bb
...
5a2f11bb9703297dc790c61d63407e587551fd05
authored
2000-01-19 11:24:28 +0000
by
Sean 'Shaleh' Perry
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
added beginnings of MH handler
1 parent
72318c65
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
177 additions
and
2 deletions
ChangeLog
mailbox/mbx_mh.c
mailbox/mbx_unix.c
ChangeLog
View file @
5a2f11b
2000-01-19 Sean 'Shaleh' Perry
* mailbox/mbx_mh.c: new file
no header, no error checking, no hable englais
2000-01-17 Sean 'Shaleh' Perry
* examples/from.c: remove extraneous copyright notice
...
...
mailbox/mbx_mh.c
0 → 100644
View file @
5a2f11b
/* GNU mailutils - a suite of utilities for electronic mail
* Copyright (C) 1999, 2000 Free Software Foundation, Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Library Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <dirent.h>
#include <errno.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
typedef
int
_url_mh_type
;
struct
mailbox_type
_mailbox_mh_type
=
{
"MH"
(
int
)
&
_url_mh_type
,
&
_url_mh_type
,
mailbox_mh_init
,
mailbox_mh_destroy
};
typedef
struct
_mh_data
{
time_t
mtime
;
/* used for checking if mailbox was updated */
}
mh_data
;
static
int
mh_sequence
(
const
char
*
name
);
int
mailbox_mh_init
(
mailbox_t
*
pmbox
,
const
char
*
name
)
{
mailbox_t
mbox
;
mh_data
*
data
;
mbox
=
malloc
(
sizeof
(
*
mbox
));
data
=
malloc
(
sizeof
(
mh_data
));
mbox
->
name
=
malloc
(
strlen
(
name
)
+
1
);
strcpy
(
mbox
->
name
,
name
);
mbox
->
data
=
data
;
*
pmbox
=
mbox
;
return
0
;
}
void
mailbox_mh_destroy
(
mailbox_t
*
pmbox
)
{
free
((
*
pmbox
)
->
data
);
free
((
*
pmbox
)
->
name
);
free
(
*
pmbox
);
pmbox
=
NULL
;
}
/* FIXME: handle create once the design is ready */
/* mh_scan actually does all the dirty work */
static
int
mh_open
(
mailbox_t
mbox
,
int
flags
)
{
struct
stat
st
;
mh_data
*
data
;
if
(
stat
(
mbox
->
name
,
&
st
)
==
-
1
)
return
errno
;
if
(
!
S_ISDIR
(
st
.
st_mode
))
return
EINVAL
;
/* mailbox is not a directory, thus it is also not MH */
data
=
mbox
->
data
;
/* FIXME: does mtime change when the dir has a new file added? */
data
->
mtime
=
st
.
st_mtime
;
return
0
;
/* everything is fine */
}
static
int
mh_close
(
mailbox_t
mbox
)
{
mh_data
*
data
;
data
=
mbox
->
data
;
/* FIXME: implementation */
return
0
;
}
static
int
mh_scan
(
mailbox_t
mbox
,
size_t
*
msgs
)
{
struct
stat
st
;
DIR
*
maildir
;
struct
dirent
*
entry
;
mh_data
*
data
;
unsigned
int
count
=
0
;
data
=
mbox
->
data
;
maildir
=
opendir
(
mbox
->
name
);
while
((
entry
=
readdir
(
maildir
))
!=
NULL
)
{
if
(
strcmp
(
"."
,
entry
->
d_name
)
==
0
||
strcmp
(
".."
,
entry
->
d_name
)
==
0
)
continue
;
/* FIXME: handle this MH extension */
if
(
entry
->
d_name
[
0
]
==
'+'
)
continue
;
/* FIXME: decide what to do with messages marked for removal */
if
(
entry
->
d_name
[
0
]
==
','
)
continue
;
if
(
entry
->
d_name
[
0
]
==
'.'
)
{
if
(
strcmp
(
".mh_sequences"
,
entry
->
d_name
))
continue
;
/* spurious file beginning w/ '.' */
else
{
/* MH info in .mh_sequences */
/* FIXME: parse this file */
}
}
if
(
mh_sequence
(
entry
->
d_name
))
{
/* FIXME: parse file */
count
++
;
}
}
closedir
(
maildir
);
stat
(
mbox
->
name
,
&
st
);
data
->
mtime
=
st
.
st_mtime
;
if
(
msgs
)
*
msgs
=
count
;
return
0
;
}
/*
* Local atoi()
* created this to guarantee that name is only digits, normal atoi allows
* whitespace
*/
static
int
mh_sequence
(
const
char
*
name
)
{
char
*
sequence
;
int
i
;
for
(
i
=
0
,
sequence
=
name
;
*
sequence
;
sequence
++
)
{
if
(
!
isdigit
(
*
sequence
))
return
0
;
i
*=
10
;
i
+=
(
*
sequence
-
'0'
);
}
return
i
;
}
mailbox/mbx_unix.c
View file @
5a2f11b
...
...
@@ -245,6 +245,7 @@ mailbox_unix_init (mailbox_t *pmbox, const char *name)
return
ENOMEM
;
/* errno set by calloc() */
}
/* FIXME: what does the next comment mean? */
/* binary copy of the function */
*
mbox
=
unixmbox
;
...
...
@@ -381,7 +382,7 @@ mailbox_unix_open (mailbox_t mbox, int flags)
/* handle CREAT with care, not to follow symlinks */
if
(
flags
&
MU_MB_CREAT
)
{
/* fir
ts
see if the file already exists */
/* fir
st
see if the file already exists */
fd
=
open
(
mbox
->
name
,
flg
);
if
(
fd
==
-
1
)
{
...
...
@@ -527,6 +528,7 @@ mailbox_unix_get_name (mailbox_t mbox, int *id, char *name,
/* passwd */
/* We don't care */
/* FIXME: hmmm, all of the files i check lack a timezone field */
/* FIXME: a little weak, we should do full reconnaissance of the
the "From " header :
From email weekday month day time timezone year
...
...
@@ -603,6 +605,7 @@ mailbox_unix_scan (mailbox_t mbox, size_t *msgs)
struct
stat
st
;
mailbox_unix_ilock
(
mbox
,
MU_MB_WRLOCK
);
/* FIXME: please clarify next comment */
/* FIXME: I should also block signals since
We can affor to be intr */
flockfile
(
mud
->
file
);
...
...
@@ -622,7 +625,7 @@ mailbox_unix_scan (mailbox_t mbox, size_t *msgs)
/* header */
if
((
header
&&
mailbox_unix_is_from
(
buf
)))
{
/* FIXME: What happen if some mailer violates the rfc822
2
and the
/* FIXME: What happen if some mailer violates the rfc822 and the
"From " field contains a NULL byte */
int
over
=
strlen
(
buf
);
count
++
;
...
...
Please
register
or
sign in
to post a comment