diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2010-10-28 23:20:22 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2010-10-28 23:20:22 +0300 |
commit | 4a49f5341ae9005c9ffbd7620efaecffcdfda79f (patch) | |
tree | 53ba2d6a638bd9b83747ebd6899931ab89d13ca0 /libmailutils/url | |
parent | 697384c64dadb0a4db97136a6cbcf2166c48897b (diff) | |
download | mailutils-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.c | 2 | ||||
-rw-r--r-- | libmailutils/url/create.c | 21 |
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] == '/') { |