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
17c5c45b
...
17c5c45bfd3c8bb8aa82e6f7ddb46a435f4ac1da
authored
2001-08-18 17:29:31 +0000
by
Sergey Poznyakoff
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
Scheme primitives for handling mime messages.
1 parent
33c3cdba
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
220 additions
and
0 deletions
libmu_scm/mu_mime.c
libmu_scm/mu_mime.c
0 → 100644
View file @
17c5c45
/* GNU mailutils - a suite of utilities for electronic mail
Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#include "mu_scm.h"
#include <mailutils/mime.h>
long
mime_tag
;
struct
mu_mime
{
mime_t
mime
;
SCM
owner
;
};
/* SMOB functions: */
static
SCM
mu_scm_mime_mark
(
SCM
mime_smob
)
{
struct
mu_mime
*
mum
=
(
struct
mu_mime
*
)
SCM_CDR
(
mime_smob
);
return
mum
->
owner
;
}
static
scm_sizet
mu_scm_mime_free
(
SCM
mime_smob
)
{
struct
mu_mime
*
mum
=
(
struct
mu_mime
*
)
SCM_CDR
(
mime_smob
);
mime_destroy
(
&
mum
->
mime
);
free
(
mum
);
return
sizeof
(
struct
mu_mime
);
}
static
int
mu_scm_mime_print
(
SCM
mime_smob
,
SCM
port
,
scm_print_state
*
pstate
)
{
struct
mu_mime
*
mum
=
(
struct
mu_mime
*
)
SCM_CDR
(
mime_smob
);
size_t
nparts
=
0
;
mime_get_num_parts
(
mum
->
mime
,
&
nparts
);
scm_puts
(
"#<mime "
,
port
);
scm_intprint
(
nparts
,
10
,
port
);
scm_putc
(
'>'
,
port
);
}
/* Internal calls: */
SCM
mu_scm_mime_create
(
SCM
owner
,
mime_t
mime
)
{
struct
mu_mime
*
mum
;
mum
=
scm_must_malloc
(
sizeof
(
struct
mu_mime
),
"mime"
);
mum
->
owner
=
owner
;
mum
->
mime
=
mime
;
SCM_RETURN_NEWSMOB
(
mime_tag
,
mum
);
}
const
mime_t
mu_scm_mime_get
(
SCM
MIME
)
{
struct
mu_mime
*
mum
=
(
struct
mu_mime
*
)
SCM_CDR
(
MIME
);
return
mum
->
mime
;
}
int
mu_scm_is_mime
(
SCM
scm
)
{
return
SCM_NIMP
(
scm
)
&&
SCM_CAR
(
scm
)
==
mime_tag
;
}
/* ************************************************************************* */
/* Guile primitives */
SCM_DEFINE
(
mu_mime_create
,
"mu-mime-create"
,
0
,
2
,
0
,
(
SCM
FLAGS
,
SCM
MESG
),
"Creates a new MIME object."
)
#define FUNC_NAME s_mu_mime_create
{
message_t
msg
=
NULL
;
mime_t
mime
;
int
flags
;
if
(
SCM_IMP
(
FLAGS
)
&&
SCM_BOOLP
(
FLAGS
))
{
/*if (FLAGS == SCM_BOOL_F)*/
flags
=
0
;
}
else
{
SCM_ASSERT
(
SCM_IMP
(
FLAGS
)
&&
SCM_INUMP
(
FLAGS
),
FLAGS
,
SCM_ARG1
,
FUNC_NAME
);
flags
=
SCM_INUM
(
FLAGS
);
}
if
(
!
SCM_UNBNDP
(
MESG
))
{
SCM_ASSERT
(
mu_scm_is_message
(
MESG
),
MESG
,
SCM_ARG2
,
FUNC_NAME
);
msg
=
mu_scm_message_get
(
MESG
);
}
if
(
mime_create
(
&
mime
,
msg
,
flags
))
return
SCM_BOOL_F
;
return
mu_scm_mime_create
(
MESG
,
mime
);
}
#undef FUNC_NAME
SCM_DEFINE
(
mu_mime_multipart_p
,
"mu-mime-multipart?"
,
1
,
0
,
0
,
(
SCM
MIME
),
"Returns #t if MIME is a multipart object.
\n
"
)
#define FUNC_NAME s_mu_mime_multipart_p
{
mime_t
mime
;
SCM_ASSERT
(
mu_scm_is_mime
(
MIME
),
MIME
,
SCM_ARG1
,
FUNC_NAME
);
return
mime_is_multipart
(
mu_scm_mime_get
(
MIME
))
?
SCM_BOOL_T
:
SCM_BOOL_F
;
}
#undef FUNC_NAME
SCM_DEFINE
(
mu_mime_get_num_parts
,
"mu-mime-get-num-parts"
,
1
,
0
,
0
,
(
SCM
MIME
),
"Returns number of parts in a MIME object."
)
#define FUNC_NAME s_mu_mime_get_num_parts
{
mime_t
mime
;
size_t
nparts
;
SCM_ASSERT
(
mu_scm_is_mime
(
MIME
),
MIME
,
SCM_ARG1
,
FUNC_NAME
);
mime
=
mu_scm_mime_get
(
MIME
);
if
(
mime_get_num_parts
(
mime
,
&
nparts
))
return
SCM_BOOL_F
;
return
scm_makenum
(
nparts
);
}
#undef FUNC_NAME
SCM_DEFINE
(
mu_mime_get_part
,
"mu-mime-get-part"
,
2
,
0
,
0
,
(
SCM
MIME
,
SCM
PART
),
"Returns part number PART from a MIME object."
)
#define FUNC_NAME s_mu_mime_get_part
{
message_t
msg
=
NULL
;
SCM_ASSERT
(
mu_scm_is_mime
(
MIME
),
MIME
,
SCM_ARG1
,
FUNC_NAME
);
SCM_ASSERT
(
SCM_IMP
(
PART
)
&&
SCM_INUMP
(
PART
),
PART
,
SCM_ARG2
,
FUNC_NAME
);
if
(
mime_get_part
(
mu_scm_mime_get
(
MIME
),
SCM_INUM
(
PART
),
&
msg
))
return
SCM_BOOL_F
;
return
mu_scm_message_create
(
MIME
,
msg
);
}
#undef FUNC_NAME
SCM_DEFINE
(
mu_mime_add_part
,
"mu-mime-add-part"
,
2
,
0
,
0
,
(
SCM
MIME
,
SCM
MESG
),
"Adds MESG to the MIME object."
)
#define FUNC_NAME s_mu_mime_add_part
{
mime_t
mime
;
message_t
msg
;
SCM_ASSERT
(
mu_scm_is_mime
(
MIME
),
MIME
,
SCM_ARG1
,
FUNC_NAME
);
SCM_ASSERT
(
mu_scm_is_message
(
MESG
),
MESG
,
SCM_ARG2
,
FUNC_NAME
);
mime
=
mu_scm_mime_get
(
MIME
);
msg
=
mu_scm_message_get
(
MESG
);
if
(
mime_add_part
(
mime
,
msg
))
return
SCM_BOOL_F
;
mu_scm_message_add_owner
(
MESG
,
MIME
);
return
SCM_BOOL_T
;
}
#undef FUNC_NAME
SCM_DEFINE
(
mu_mime_get_message
,
"mu-mime-get-message"
,
1
,
0
,
0
,
(
SCM
MIME
),
"Converts MIME object to a message.
\n
"
)
#define FUNC_NAME s_mu_mime_get_message
{
mime_t
mime
;
message_t
msg
;
SCM_ASSERT
(
mu_scm_is_mime
(
MIME
),
MIME
,
SCM_ARG1
,
FUNC_NAME
);
mime
=
mu_scm_mime_get
(
MIME
);
if
(
mime_get_message
(
mime
,
&
msg
))
return
SCM_BOOL_F
;
return
mu_scm_message_create
(
MIME
,
msg
);
}
#undef FUNC_NAME
/* Initialize the module */
void
mu_scm_mime_init
()
{
mime_tag
=
scm_make_smob_type
(
"mime"
,
sizeof
(
struct
mu_mime
));
scm_set_smob_mark
(
mime_tag
,
mu_scm_mime_mark
);
scm_set_smob_free
(
mime_tag
,
mu_scm_mime_free
);
scm_set_smob_print
(
mime_tag
,
mu_scm_mime_print
);
#include "mu_mime.x"
}
Please
register
or
sign in
to post a comment