diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2010-10-03 14:43:44 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2010-10-03 17:17:38 +0300 |
commit | af4665d48e3dbfe8b9179740509a61722291e13b (patch) | |
tree | 6a815b5018490edf9dcf36d83141e18df11e7971 /examples | |
parent | f223b22f5a8cc3ed3428092ddf30dd315a3213f3 (diff) | |
download | mailutils-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.c | 2 | ||||
-rw-r--r-- | examples/http.c | 5 | ||||
-rw-r--r-- | examples/iconv.c | 3 | ||||
-rw-r--r-- | examples/msg-send.c | 1 | ||||
-rw-r--r-- | examples/murun.c | 10 | ||||
-rw-r--r-- | examples/musocio.c | 1 | ||||
-rw-r--r-- | examples/pop3client.c | 9 |
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) |