summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2010-10-03 14:43:44 +0300
committerSergey Poznyakoff <gray@gnu.org.ua>2010-10-03 17:17:38 +0300
commitaf4665d48e3dbfe8b9179740509a61722291e13b (patch)
tree6a815b5018490edf9dcf36d83141e18df11e7971 /examples
parentf223b22f5a8cc3ed3428092ddf30dd315a3213f3 (diff)
downloadmailutils-af4665d48e3dbfe8b9179740509a61722291e13b.tar.gz
mailutils-af4665d48e3dbfe8b9179740509a61722291e13b.tar.bz2
Improve stream creation consistency.
One of stream flags bits indicates whether the stream is open or not. The mu_stream_open function refuses to act if it already is. The rest of functions (including mu_stream_close) refuses to act if the stream was not open. A special function (mu_stream_is_open) is provided to check if the stream is in open state. Any stream creation function returns an already open stream. The function mu_stream_open should be called only if the stream was previously closed by a call to mu_stream_close. * include/mailutils/stream.h (mu_stream_is_open): New proto. * include/mailutils/sys/stream.h (_MU_STR_OPEN): New flag. * libmailutils/stream.c (_mu_stream_create): Permit setting the _MU_STR_OPEN flag. (_stream_init): New static. (mu_stream_open): Return MU_ERR_OPEN if the stream is already open. (mu_stream_is_open): New function. (mu_stream_seek, mu_stream_read, mu_stream_readdelim) (mu_stream_getdelim, mu_stream_write, mu_stream_flush) (mu_stream_close, mu_stream_size, mu_stream_wait) (mu_stream_truncate): Check if the stream is open. Return MU_ERR_NOT_OPEN otherwise. * libmailutils/errors (MU_ERR_OPEN): Reword the diagnostics. * libmailutils/dbgstream.c (mu_dbgstream_create): Open the stream. * libmailutils/file_stream.c (mu_file_stream_create) (mu_fd_stream_create): Open the stream. * libmailutils/filter_iconv.c (mu_filter_iconv_create): Open the stream. * libmailutils/mapfile_stream.c (mu_mapfile_stream_create): Open the stream. * libmailutils/fltstream.c (mu_filter_stream_create): Mark the stream as open. * libmailutils/iostream.c (mu_iostream_create): Likewise. * libmailutils/memory_stream.c: Likewise. * libmailutils/message.c (_message_stream_create): Likewise. * libmailutils/message_stream.c (mu_message_stream_create): Likewise. * libmailutils/prog_stream.c (mu_prog_stream_create): Likewise. * libmailutils/socket_stream.c (mu_socket_stream_create): Likewise. * libmailutils/temp_file_stream.c (mu_temp_file_stream_create): Likewise. * libmailutils/amd.c (_amd_attach_message): Mark stream as open. * libmailutils/body.c (_body_get_stream): Likewise. * libmailutils/memory_stream.c: Likewise. * libmailutils/rdcache_stream.c (mu_rdcache_stream_create: Likewise. * libmailutils/stdio_stream.c (mu_stdio_stream_create): Likewise. * libmailutils/streamref.c (mu_streamref_create_abridged): Likewise. * libmailutils/tcp.c (mu_tcp_stream_create_with_source_ip): Likewise. * libmailutils/xscript-stream.c (mu_xscript_stream_create): Likewise. * libmu_auth/tls.c (_mu_tls_io_stream_create): Likewise. (_mu_tls_stream_create): Likewise. * libproto/pop/pop3_stream.c (mu_pop3_stream_create): Likewise. * examples/base64.c: Remove unnecessary mu_stream_open. * examples/http.c: Likewise. * examples/iconv.c: Likewise. * examples/msg-send.c: Likewise. * examples/murun.c: Likewise. * examples/musocio.c: Likewise. * examples/pop3client.c: Likewise. * imap4d/append.c: Likewise. * imap4d/io.c: Likewise. * imap4d/preauth.c: Likewise. * lib/mailcap.c: Likewise. * libmailutils/attachment.c: Likewise. * libmailutils/cfg_driver.c: Likewise. * libmailutils/header.c: Likewise. * libmailutils/mailcap.c: Likewise. * libmailutils/mimehdr.c: Likewise. * libmailutils/mutil.c: Likewise. * libmailutils/tests/fltst.c: Likewise. * libmailutils/tests/mailcap.c: Likewise. * libmailutils/vartab.c: Likewise. * libmailutils/wicket.c: Likewise. * libmu_argp/muinit.c: Likewise. * libmu_auth/ldap.c: Likewise. * libmu_sieve/extensions/pipe.c: Likewise. * libmu_sieve/extensions/spamd.c: Likewise. * libmu_sieve/extensions/vacation.c: Likewise. * libproto/imap/folder.c: Likewise. * libproto/mailer/smtp.c: Likewise. * libproto/mailer/smtp_starttls.c: Likewise. * libproto/mbox/mbox.c: Likewise. * libproto/nntp/nntp_connect.c: Likewise. * libproto/pop/mbox.c: Likewise. * libproto/pop/pop3_connect.c: Likewise. * libproto/pop/pop3_stls.c: Likewise. * maidag/mailtmp.c: Likewise. * mail/decode.c: Likewise. * mail/pipe.c: Likewise. * mail/send.c: Likewise. * mail/send.c: Likewise. * mail/write.c: Likewise. * mh/burst.c: Likewise. * mh/comp.c: Likewise. * mh/compcommon.c: Likewise. * mh/forw.c: Likewise. * mh/mh_init.c: Likewise. * mh/mh_whatnow.c: Likewise. * mh/mhl.c: Likewise. * mh/mhn.c: Likewise. * mh/repl.c: Likewise. * mimeview/mimeview.c: Likewise. * pop3d/extra.c: Likewise. * sieve/sieve.c: Likewise. * testsuite/smtpsend.c: Likewise.
Diffstat (limited to 'examples')
-rw-r--r--examples/base64.c2
-rw-r--r--examples/http.c5
-rw-r--r--examples/iconv.c3
-rw-r--r--examples/msg-send.c1
-rw-r--r--examples/murun.c10
-rw-r--r--examples/musocio.c1
-rw-r--r--examples/pop3client.c9
7 files changed, 3 insertions, 28 deletions
diff --git a/examples/base64.c b/examples/base64.c
index aa6bdebd5..1f54ea785 100644
--- a/examples/base64.c
+++ b/examples/base64.c
@@ -151,14 +151,12 @@ main (int argc, char * argv [])
MU_ASSERT (mu_file_stream_create (&in, input, MU_STREAM_READ|MU_STREAM_SEEK));
else
MU_ASSERT (mu_stdio_stream_create (&in, MU_STDIN_FD, 0));
- MU_ASSERT (mu_stream_open (in));
if (output)
MU_ASSERT (mu_file_stream_create (&out, output,
MU_STREAM_WRITE|MU_STREAM_CREAT));
else
MU_ASSERT (mu_stdio_stream_create (&out, MU_STDOUT_FD, 0));
- MU_ASSERT (mu_stream_open (out));
if (line_length_option)
reset_line_length (encoding, line_length);
diff --git a/examples/http.c b/examples/http.c
index a2bb6b772..5c422ef7b 100644
--- a/examples/http.c
+++ b/examples/http.c
@@ -91,14 +91,15 @@ main (int argc, char **argv)
argc == 3 ? argv[2] : "/");
ret = mu_tcp_stream_create (&stream, url, 80, MU_STREAM_NONBLOCK);
- if (ret != 0)
+ if (ret != 0 && !(ret == EAGAIN || ret == EINPROGRESS))
{
mu_error ("mu_tcp_stream_create: %s", mu_strerror (ret));
exit (EXIT_FAILURE);
}
- for (attempt = 0; (ret = mu_stream_open (stream)); )
+ for (attempt = 0; ret; )
{
+ ret = mu_stream_open (stream);
if ((ret == EAGAIN || ret == EINPROGRESS) && attempt < io_attempts)
{
ret = http_stream_wait(stream, MU_STREAM_READY_WR, &attempt);
diff --git a/examples/iconv.c b/examples/iconv.c
index fd293bf65..7876dc697 100644
--- a/examples/iconv.c
+++ b/examples/iconv.c
@@ -43,13 +43,10 @@ main (int argc, char **argv)
}
MU_ASSERT (mu_stdio_stream_create (&in, MU_STDIN_FD, 0));
- MU_ASSERT (mu_stream_open (in));
MU_ASSERT (mu_filter_iconv_create (&cvt, in, argv[1], argv[2],
0, mu_fallback_none));
- MU_ASSERT (mu_stream_open (cvt));
MU_ASSERT (mu_stdio_stream_create (&out, MU_STDOUT_FD, 0));
- MU_ASSERT (mu_stream_open (out));
while ((rc = mu_stream_read (cvt, buffer, sizeof (buffer), &size)) == 0
&& size > 0)
diff --git a/examples/msg-send.c b/examples/msg-send.c
index 5c4f70fa0..46dd82ad9 100644
--- a/examples/msg-send.c
+++ b/examples/msg-send.c
@@ -109,7 +109,6 @@ main (int argc, char *argv[])
}
MU_ASSERT (mu_stdio_stream_create (&in, MU_STDIN_FD, MU_STREAM_SEEK));
- MU_ASSERT (mu_stream_open (in));
MU_ASSERT (mu_message_create (&msg, NULL));
MU_ASSERT (mu_message_set_stream (msg, in, NULL));
MU_ASSERT (mu_mailer_create (&mailer, optmailer));
diff --git a/examples/murun.c b/examples/murun.c
index 51b471082..c4f822f29 100644
--- a/examples/murun.c
+++ b/examples/murun.c
@@ -69,7 +69,6 @@ main (int argc, char *argv[])
{
mu_stream_t in;
MU_ASSERT (mu_stdio_stream_create (&in, MU_STDIN_FD, 0));
- MU_ASSERT (mu_stream_open (in));
rc = mu_filter_prog_stream_create (&stream, cmdline, in);
/* Make sure closing/destroying stream will close/destroy in */
mu_stream_unref (in);
@@ -83,16 +82,7 @@ main (int argc, char *argv[])
exit (1);
}
- rc = mu_stream_open (stream);
- if (rc)
- {
- fprintf (stderr, "%s: cannot open program filter stream: %s\n",
- argv[0], mu_strerror (rc));
- exit (1);
- }
-
MU_ASSERT (mu_stdio_stream_create (&out, MU_STDOUT_FD, 0));
- MU_ASSERT (mu_stream_open (out));
read_and_print (stream, out);
mu_stream_close (stream);
diff --git a/examples/musocio.c b/examples/musocio.c
index d19a20016..31ca7d369 100644
--- a/examples/musocio.c
+++ b/examples/musocio.c
@@ -90,7 +90,6 @@ main (int argc, char * argv [])
mu_stream_set_buffer (out, mu_buffer_line, 0);
MU_ASSERT (mu_socket_stream_create (&sock, argv[1], MU_STREAM_RDWR));
mu_stream_set_buffer (sock, mu_buffer_line, 0);
- MU_ASSERT (mu_stream_open (sock));
pid = fork ();
if (pid == -1)
diff --git a/examples/pop3client.c b/examples/pop3client.c
index c9246381e..87f0c448d 100644
--- a/examples/pop3client.c
+++ b/examples/pop3client.c
@@ -1030,15 +1030,6 @@ com_connect (int argc, char **argv)
{
mu_stream_t tlsstream;
- status = mu_stream_open (tcp);
- if (status)
- {
- mu_error ("cannot open connection: %s",
- mu_stream_strerror (tcp, status));
- mu_stream_destroy (&tcp);
- return 0;
- }
-
status = mu_tls_client_stream_create (&tlsstream, tcp, tcp, 0);
mu_stream_unref (tcp);
if (status)

Return to:

Send suggestions and report system problems to the System administrator.