summaryrefslogtreecommitdiff
path: root/libmailutils/url
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2010-10-28 23:20:22 +0300
committerSergey Poznyakoff <gray@gnu.org.ua>2010-10-28 23:20:22 +0300
commit4a49f5341ae9005c9ffbd7620efaecffcdfda79f (patch)
tree53ba2d6a638bd9b83747ebd6899931ab89d13ca0 /libmailutils/url
parent697384c64dadb0a4db97136a6cbcf2166c48897b (diff)
downloadmailutils-4a49f5341ae9005c9ffbd7620efaecffcdfda79f.tar.gz
mailutils-4a49f5341ae9005c9ffbd7620efaecffcdfda79f.tar.bz2
Add wordsplit module.
The wordsplit module (borrowed from another project of mine, called 'grecs') provides a flexible and powerful mechanism for parsing input in a way similar to posix-shell. In particular, the POSIX function wordexp is a subset of the wordsplit functionality. The argcv module is now deprecated. * include/mailutils/wordsplit.h: New file. * include/mailutils/Makefile.am (pkginclude_HEADERS): Add wordsplit.h * libmailutils/string/wordsplit.c: New file. * libmailutils/string/Makefile.am (libstring_la_SOURCES): Add wordsplit.c. * include/mailutils/argcv.h (mu_argcv_join): New proto. (mu_argcv_get, mu_argcv_get_n, mu_argcv_get_np) (mu_argcv_unquote_char, mu_argcv_quote_char) (mu_argcv_quoted_length, mu_argcv_unquote_copy) (mu_argcv_quote_copy): Mark as deprecated. * include/mailutils/mailutils.h: Include wordsplit.h. * libmailutils/tests/wsp.c: New file. * libmailutils/tests/.gitignore: List wsp. * libmailutils/tests/wordsplit.at: New file. * libmailutils/tests/Makefile.am (noinst_PROGRAMS): Add wsp (TESTSUITE_AT): Add wordsplit.at. * libmailutils/tests/argcv.c: Define MU_ARCGV_DEPRECATED to avoid deprecation warnings. * libmailutils/tests/testsuite.at: Include wordsplit.at. * libmailutils/base/argcvfree.c: New file. * libmailutils/base/argcvjoin.c: New file. * libmailutils/base/argcvrem.c: New file. * libmailutils/base/Makefile.am (libbase_la_SOURCES): Add new files. * libmailutils/base/argcv.c: Define MU_ARCGV_DEPRECATED to avoid deprecation warnings. (argcv_string, argcv_free, argv_free) (mu_argcv_remove): Rewrite in separate modules. * comsat/comsat.h: Include wordsplit.h. * imap4d/imap4d.h: Likewise. * mail/mail.h: Likewise. * mh/mh.h: Likewise. * readmsg/readmsg.h: Likewise. * comsat/action.c: Use wordsplit. * imap4d/fetch.c: Likewise. * lib/mailcap.c: Likewise. * libmailutils/auth/mu_auth.c: Likewise. * libmailutils/base/mutil.c: Likewise. * libmailutils/cfg/format.c: Likewise. * libmailutils/cfg/lexer.l: Likewise. * libmailutils/cfg/parser.y: Likewise. * libmailutils/diag/gdebug.c: Likewise. * libmailutils/mailer/mailer.c: Likewise. * libmailutils/server/acl.c: Likewise. * libmailutils/stream/prog_stream.c: Likewise. * libmailutils/tests/listop.c: Likewise. * libmailutils/url/create.c: Likewise. * libmu_auth/ldap.c: Likewise. * libmu_auth/radius.c: Likewise. * libmu_sieve/sieve.l: Likewise. * libproto/mailer/mbox.c: Likewise. * libproto/mailer/smtp.c: Likewise. * libproto/mailer/smtp_gsasl.c: Likewise. * mail/mailline.c: Likewise. * mail/mailvar.c: Likewise. * mail/send.c: Likewise. * mail/util.c: Likewise. * mh/folder.c: Likewise. * mh/mh_alias.y: Likewise. * mh/mh_argp.c: Likewise. * mh/mh_init.c: Likewise. * mh/mh_list.c: Likewise. * mh/mh_msgset.c: Likewise. * mh/mh_sequence.c: Likewise. * mh/mh_whatnow.c: Likewise. * mh/mh_sequence.c: Likewise. * mh/mh_whatnow.c: Likewise. * mh/mhn.c: Likewise. * mh/send.c: Likewise. * movemail/movemail.c: Likewise. * mu/shell.c: Likewise. * readmsg/readmsg.c: Likewise. * testsuite/smtpsend.c: Likewise. * pop3d/popauth.c: Use wordsplit. Use simplified input format (username and password delimited by any amount of whitespace). Read/produce old format if invoked with the --compatibility option. * examples/aclck.c: Use wordsplit instead of argcv. * examples/header.c: Likewise. * examples/mta.c: Likewise. * examples/.gitignore: Remove pop3client. * examples/Makefile.am: Remove pop3client. * po/POTFILES.in: Add new files.
Diffstat (limited to 'libmailutils/url')
-rw-r--r--libmailutils/url/copy.c2
-rw-r--r--libmailutils/url/create.c21
2 files changed, 15 insertions, 8 deletions
diff --git a/libmailutils/url/copy.c b/libmailutils/url/copy.c
index 7190b4212..ee5ad47dd 100644
--- a/libmailutils/url/copy.c
+++ b/libmailutils/url/copy.c
@@ -24,7 +24,7 @@
#ifdef HAVE_STRINGS_H
# include <strings.h>
#endif
-
+#include <stdlib.h>
#include <mailutils/types.h>
#include <mailutils/argcv.h>
#include <mailutils/secret.h>
diff --git a/libmailutils/url/create.c b/libmailutils/url/create.c
index 674a52469..0d0cb304d 100644
--- a/libmailutils/url/create.c
+++ b/libmailutils/url/create.c
@@ -26,10 +26,12 @@
#ifdef HAVE_STRINGS_H
# include <strings.h>
#endif
+#include <stdlib.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <limits.h>
+#include <mailutils/wordsplit.h>
#include <mailutils/util.h>
#include <mailutils/errno.h>
#include <mailutils/argcv.h>
@@ -375,19 +377,24 @@ _mu_url_create_internal (struct mu_url_ctx *ctx, mu_url_t hint)
if ((ctx->flags & MU_URL_PARSE_PIPE) && ctx->input[0] == '|')
{
+ struct mu_wordsplit ws;
+
rc = str_assign (&url->scheme, "prog");
if (rc)
return rc;
url->flags |= MU_URL_SCHEME;
ctx->flags &= ~MU_URL_PARSE_HEXCODE;
- rc = mu_argcv_get (ctx->input + 1, NULL, NULL, &url->qargc, &url->qargv);
+ if (mu_wordsplit (ctx->input + 1, &ws, MU_WRDSF_DEFFLAGS))
+ return errno;
+ url->qargc = ws.ws_wordc;
+ url->qargv = ws.ws_wordv;
+ ws.ws_wordc = 0;
+ ws.ws_wordv = NULL;
+ mu_wordsplit_free (&ws);
+ url->flags |= MU_URL_QUERY;
+ rc = str_assign (&url->path, url->qargv[0]);
if (rc == 0)
- {
- url->flags |= MU_URL_QUERY;
- rc = str_assign (&url->path, url->qargv[0]);
- if (rc == 0)
- url->flags |= MU_URL_PATH;
- }
+ url->flags |= MU_URL_PATH;
}
else if ((ctx->flags & MU_URL_PARSE_SLASH) && ctx->input[0] == '/')
{

Return to:

Send suggestions and report system problems to the System administrator.