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
bb31d731
...
bb31d731ff58f213ea1c37f9a5799f9966f26352
authored
2002-09-18 17:34:43 +0000
by
Sergey Poznyakoff
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
Context-related functions.
1 parent
1823eb42
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
135 additions
and
0 deletions
mh/mh_ctx.c
mh/mh_ctx.c
0 → 100644
View file @
bb31d73
/* 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. */
/* MH context functions. */
#include <mh.h>
#include <sys/types.h>
#include <sys/stat.h>
mh_context_t
*
mh_context_create
(
char
*
name
,
int
copy
)
{
mh_context_t
*
ctx
;
ctx
=
malloc
(
sizeof
(
*
ctx
));
if
(
!
ctx
)
{
mu_error
(
"not enough memory"
);
abort
();
}
if
(
copy
)
ctx
->
name
=
name
;
else
{
ctx
->
name
=
strdup
(
name
);
if
(
!
ctx
->
name
)
{
mu_error
(
"not enough memory"
);
abort
();
}
}
ctx
->
header
=
NULL
;
return
ctx
;
}
int
mh_context_read
(
mh_context_t
*
ctx
)
{
int
status
;
char
*
blurb
;
struct
stat
st
;
FILE
*
fp
;
if
(
stat
(
ctx
->
name
,
&
st
))
return
errno
;
blurb
=
malloc
(
st
.
st_size
);
if
(
!
blurb
)
return
ENOMEM
;
fp
=
fopen
(
ctx
->
name
,
"r"
);
if
(
!
fp
)
{
free
(
blurb
);
return
errno
;
}
fread
(
blurb
,
st
.
st_size
,
1
,
fp
);
fclose
(
fp
);
if
(
status
=
header_create
(
&
ctx
->
header
,
blurb
,
st
.
st_size
,
NULL
))
free
(
blurb
);
return
status
;
}
int
mh_context_write
(
mh_context_t
*
ctx
)
{
stream_t
stream
;
char
buffer
[
512
];
size_t
off
=
0
,
n
;
FILE
*
fp
;
fp
=
fopen
(
ctx
->
name
,
"w"
);
if
(
!
fp
)
{
mh_error
(
"can't write context file %s: %s"
,
ctx
->
name
,
strerror
(
errno
));
return
1
;
}
header_get_stream
(
ctx
->
header
,
&
stream
);
while
(
stream_read
(
stream
,
buffer
,
sizeof
buffer
-
1
,
off
,
&
n
)
==
0
&&
n
!=
0
)
{
buffer
[
n
]
=
'\0'
;
fprintf
(
fp
,
"%s"
,
buffer
);
off
+=
n
;
}
fclose
(
fp
);
return
0
;
}
char
*
mh_context_get_value
(
mh_context_t
*
ctx
,
const
char
*
name
,
char
*
defval
)
{
char
*
p
;
if
(
header_aget_value
(
ctx
->
header
,
name
,
&
p
))
p
=
defval
;
return
p
;
}
int
mh_context_set_value
(
mh_context_t
*
ctx
,
const
char
*
name
,
char
*
value
)
{
if
(
!
ctx
->
header
)
{
int
rc
;
if
((
rc
=
header_create
(
&
ctx
->
header
,
NULL
,
0
,
NULL
))
!=
0
)
{
mh_error
(
"Can't create context %s: %s"
,
ctx
->
name
,
mu_errstring
(
rc
));
return
1
;
}
}
return
header_set_value
(
ctx
->
header
,
name
,
value
,
1
);
}
Please
register
or
sign in
to post a comment