Age | Commit message (Collapse) | Author | Files |
|
Check return from mu_message_get_num_parts
|
|
|
|
The new command line option --variable initializes the RFC 5229 variable.
* NEWS: Update.
* doc/texinfo/programs.texi: Fix description of sieve command
line options.
* include/mailutils/sieve.h (mu_sieve_variable_initialize): New proto.
* libmu_sieve/runtime.c (sieve_run): Call mu_i_sv_init_variables to
clear and initialize the table of variables.
* libmu_sieve/sieve-gram.y (mu_sieve_machine_dup): Copy variables.
(mu_sieve_machine_destroy): Destroy table of variables and initializer
list.
* libmu_sieve/sieve-priv.h (mu_sieve_machine) <init_var>: New member.
(mu_sieve_variable_initializer): New type.
(mu_i_sv_init_variables): New proto.
* libmu_sieve/variables.c (mu_sieve_variable_initialize): New function.
(mu_i_sv_copy_variables): Copy initializers as well.
(mu_i_sv_init_variables): New function.
* sieve/sieve.c: New command line option --variable.
* sieve/tests/variables.at: Test the --variable option.
|
|
|
|
* mh/mh_alias_lex.l (push_source): Initialize locus range prior to copying
to it.
* libmailutils/cfg/parser.y (mu_cfg_tree_create_node): Likewise.
* libmu_sieve/util.c: (mu_sieve_value_create): Likewise.
|
|
|
|
functions
It is possible that these functions return success and place NULL in
the result variable. Make sure this possibility is checked throughout
the code.
* libmailutils/base/usremail.c (mu_set_user_email): Check for NULL
return value from mu_address_[as]get.
* libmailutils/mailbox/msgenv.c (message_envelope_sender)
* libmailutils/tests/addr.c (parse)
* libmu_scm/mu_message.c (mu_scm_message_print):
* libproto/mailer/prog.c (_expand_rcpt)
* libproto/mailer/smtp.c (_rcpt_to_addr)
(mu_address_sget_email)
* maidag/lmtp.c (check_address):
* mail/from.c (hdr_from):
* mail/util.c (util_get_sender):
* mh/mh_format.c (addr_cmp, builtin_proper)
(builtin_addr, builtin_pers, builtin_note)
(builtin_mbox, builtin_path, builtin_formataddr)
* mh/mh_whom.c (scan_addrs):
* libmu_sieve/util.c (mu_sieve_vlist_compare): Skip NULL returns
from retr.
* libmu_sieve/actions.c (check_redirect_loop): Error checking.
* include/mailutils/types.hin (mu_prstr): New function.
* libmu_cpp/address.cc: Use mu_prstr to ensure the printable representation
of string.
* python/libmu_py/address.c: Likewise.
* libmu_scm/mu_address.c (_get_address_part): Likewise.
* libmailutils/string/wordsplit.c (expvar): Treat NULL
value as "".
|
|
* libmu_sieve/load.c [!HAVE_LIBLTDL] (mu_sieve_unload_ext): Dummy function.
[!HAVE_LIBLTDL] (mu_sieve_load_ext, mu_i_sv_load_add_dir): Set errno. Fix
return value.
* mu-aux/gylwrap (yysym): Add more symbols
(dumpme): Skip old contents of the BOOTSTRAP section up to
the next POD keyword.
* mu/libexec/Makefile.am (MUTOOL_LIBRARIES_TAIL): Fix ordering
of libraries.
|
|
* include/mailutils/locus.h (mu_locus_point_eq): New function.
* libmu_sieve/prog.c (mu_i_sv_code): Emit the _mu_i_sv_instr_locus
if locus changed.
(mu_i_sv_locus): Raise the changeloc flag and set the locus, instead
of immediately emitting location change code.
* libmu_sieve/runtime.c (_mu_i_sv_instr_locus): New function.
(_mu_i_sv_instr_source,_mu_i_sv_instr_line)
(_mu_i_sv_instr_col): Remove.
* libmu_sieve/sieve-priv.h (mu_sieve_machine) <changeloc>: New member.
|
|
* libmu_sieve/sieve-gram.y: Add missing assignment to $$ in testlist
production. This fixes improper handling of anyof and allof
|
|
Clean up semantics of initializers. Each locus type can be initialized
either statically (by assigning the MU_LOCUS_*_INITIALIZER macro), or
dynamically (by calling mu_locus_*_init function). Whatever method is
used, it is important that it be initialized prior to using any other
mu_locus_* function.
* include/mailutils/locus.h (mu_locus_point_init): Takes single argument.
Returns nothing.
(mu_locus_range_init): New proto.
* libmailutils/locus/locus.c (mu_locus_point_init): Rewrite.
(mu_locus_range_init): New function.
* libmailutils/cfg/parser.y (mu_cfg_alloc_node): Initialize locus.
* libmailutils/tests/logstr.c: Fix printf argyment types.
* libmu_sieve/extensions/moderator.c
(moderator_filter_message): Initialize locus.
* libmu_sieve/sieve-gram.y (node_alloc): Likewise.
* mu/libexec/logger.c (parse_locus_point, set_locus): Likewise.
|
|
* include/mailutils/sieve.h (mu_sieve_compile_text): New proto.
(mu_sieve_compile_buffer): Backward-compatible proto.
* include/mailutils/stream.h ((MU_IOCTL_LOGSTREAM_GET_LOCUS_DEPRECATED)
(MU_IOCTL_LOGSTREAM_SET_LOCUS_DEPRECATED): New defines.
(MU_IOCTL_LOGSTREAM_GET_LOCUS)
(MU_IOCTL_LOGSTREAM_SET_LOCUS): Use external functions to make
sure any references to these are marked as deprecated.
* include/mailutils/types.hin (mu_locus_DEPRECATED): New struct.
(mu_locus): Define to mu_locus_DEPRECATED
* libmailutils/stream/logstream.c (_log_ctl): Handle the deprecated
ctls.
* libmu_sieve/extensions/moderator.c (moderator_filter_message): Use
mu_sieve_compile_text.
* libmu_sieve/sieve-gram.y (mu_sieve_compile_buffer): Rename to
mu_sieve_compile_text. Re-introduce it as a backward-compatibility
API.
* sieve/sieve.c: Call mu_sieve_compile_text instead of
mu_sieve_compile_buffer.
|
|
* libmu_sieve/sieve-lex.l: Allocate new ctx structure
(restore accidentally deleted file.
* libmailutils/locus/debug.c: Add missing copyleft.
* libmailutils/locus/genprloc.c: Likewise.
* libmailutils/locus/ident.c: Likewise.
* libmailutils/locus/linetrack.c: Likewise.
* libmailutils/locus/locus.c: Likewise.
* mu-aux/gencl: Likewise.
* mu-aux/gitinfo: Likewise.
* mu-aux/gylwrap: Likewise.
|
|
* include/mailutils/sieve.h (mu_sieve_value_t)<locus>: New field.
* libmu_sieve/util.c (mu_sieve_value_create): Take a pointer to
mu_locus_range. Use it to initialize the locus field.
* libmu_sieve/sieve-gram.y: Pass loci in calls to mu_sieve_value_create.
* libmu_sieve/actions.c: Use the most specific locus when displaying
the message.
* libmu_sieve/comparator.c: Likewise.
* libmu_sieve/prog.c: Likewise.
* libmu_sieve/variables.c: Likewise.
* sieve/tests/i-numeric.at: Update the expected error location.
|
|
The aim is to get rid of the explicit rules and use the Autmake framework
as much as possible, without hurting the flexibility. To this effect, the
gylwrap tool is rewritten from scratch (in Perl). In compatibility
mode it takes the same arguments as the standard ylwrap. Additional
configuration is supplied in the configuration file gylwrap.conf, located
in the directory where the input file resides.
* mu-aux/gylwrap: Rewrite from scratch.
* configure.ac (MU_YLWRAP): New subst variable.
* libmailutils/base/.gitignore: Update.
* libmailutils/base/Makefile.am: Update.
* libmailutils/base/gylwrap.conf: New file.
* libmailutils/cfg/.gitignore: Update.
* libmailutils/cfg/Makefile.am: Use new YLWRAP
* libmailutils/cfg/cfg.h: Remove.
* libmailutils/cfg/gylwrap.conf: New file.
* libmailutils/cfg/lexer.l: Include mailutils/yyloc.h directly.
* libmailutils/cfg/parser.y: Likewise.
* libmu_sieve/Makefile.am: Use new YLWRAP
* libmu_sieve/gylwrap.conf: New file.
* libmu_sieve/sieve.y: Rename to libmu_sieve/sieve-gram.y
* libmu_sieve/sieve.l: Rename to libmu_sieve/sieve-lex.l
* mail/Makefile.am: Use new YLWRAP
* mh/.gitignore: Update.
* mh/Makefile.am: Use new YLWRAP
* mh/gylwrap.conf: New file.
* mh/mh_alias.y: Rename to mh/mh_alias_gram.y
* mh/mh_alias.l: Rename to mh/mh_alias_lex.l
* mh/pick.y: Rename to mh/pick-gram.y
* mimeview/.gitignore: Update.
* mimeview/Makefile.am: Use new YLWRAP
* mimeview/mimetypes.y: Rename to mimeview/grammar.y
* mimeview/gylwrap.conf: New file.
* mimeview/mimetypes.l: Rename to mimeview/lexer.l
* po/POTFILES.in: Update
|
|
* include/mailutils/types.hin (mu_locus): Remove.
* include/mailutils/diag.h (mu_diag_at_locus): Remove.
(mu_diag_at_locus_point,mu_diag_at_locus_range): New protos.
* include/mailutils/mailutils.h: Include locus.h
* include/mailutils/stream.h (MU_IOCTL_LOGSTREAM_GET_LOCUS)
(MU_IOCTL_LOGSTREAM_SET_LOCUS): Remove.
* libmailutils/stream/logstream.c (_log_ctl): Reflect this.
* libmailutils/tests/logstr.at: Remove the related test.
* libmailutils/tests/logstr.c: Ditto.
* libmailutils/cfg/Makefile.am: Add new header.
* libmailutils/cfg/cfg.h: New file.
* libmailutils/cfg/format.c: Use mu_locus_range
* libmailutils/cfg/lexer.l: Use the mu_linetrack facility
* libmailutils/cfg/parser.y: LIkewise.
* libmailutils/diag/diag.c (mu_diag_at_locus): Remove.
(mu_diag_at_locus_point,mu_diag_at_locus_range): New protos.
* comsat/action.c: Use mu_locus_point and mu_locus_range
instead of the removed mu_locus.
* include/mailutils/auth.h: Likewise.
* include/mailutils/cfg.h: Likewise.
* include/mailutils/sieve.h: Likewise.
* libmailutils/base/wicket.c: Likewise.
* libmailutils/tests/wicket.c: Likewise.
* libmu_auth/radius.c: Likewise.
* libmu_sieve/actions.c: Likewise.
* libmu_sieve/comparator.c: Likewise.
* libmu_sieve/extensions/moderator.c: Likewise.
* libmu_sieve/mem.c: Likewise.
* libmu_sieve/prog.c: Likewise.
* libmu_sieve/require.c: Likewise.
* libmu_sieve/runtime.c: Likewise.
* libmu_sieve/sieve-priv.h: Likewise.
* libmu_sieve/sieve.l: Use the mu_linetrack facility.
* libmu_sieve/sieve.y: Likewise.
* libmu_sieve/util.c: Use mu_locus_point and mu_locus_range
instead of the removed mu_locus
* libmu_sieve/variables.c: Likewise.
* mail/source.c: Likewise.
* mu/libexec/dbm.c: Likewise.
* mu/libexec/logger.c: Likewise.
* mu/libexec/wicket.c: Likewise.
* sieve/sieve.c: Likewise.
* sieve/tests/i-numeric.at: Update expected locations
|
|
|
|
Until now, mu_header_set_value called with replace=0 prepended the header
to the header list, if a header with such name was already present. This
has been changed. Now, if the header with the requested name is already
present, its action is as follows:
1. If repl is 0, return MU_ERR_EXISTS
2. Otherwise, replace the header with the new value.
If the header is not present, it is appended to the end of the header
list, instead of putting it at the beginning.
This change is incompatible and breaks the tests, that relied on a particular
field ordering. These are fixed as well.
The use of mu_header_set_value throughout the sources has been revised to
ensure that single-instance headers are never added twice.
This change also facilitates the second part of this commit, which
fixes creation of the multipart/alternative message by the mail utility.
* libmailutils/mailbox/header.c (mu_header_set_value): Fix semantics.
If the replace parameter is not set and the header field with the
given name already exists, return MU_ERR_EXISTS without changing
anything. If adding new header, append it to the end of the header
list, instead of pushing it to the top.
* configure.ac: Raise shared library revision number.
* libmu_scm/mu_message.c (mu-message-set-header)
(mu-message-set-header-fields): call mu_header_set_value explicitly if
repl is not set.
* libmu_sieve/extensions/moderator.c: Force replace header mode when
needed.
* libmu_sieve/extensions/vacation.c: Likewise.
* mh/mh_init.c (mh_annotate): Prepend the annotation header.
* mh/mhn.c: Force replace header mode when needed.
* mh/repl.c: Likewise.
* mh/send.c: Likewise.
* libmailutils/tests/modmesg01.at: Change expected header order.
* libmailutils/tests/modmesg03.at: Likewise.
* mh/tests/mhn.at: Likewise.
* mh/tests/send.at: Likewise.
* sieve/tests/moderator.at: Likewise.
* sieve/tests/redirect.at: Likewise.
* sieve/tests/reject.at: Likewise.
* sieve/tests/vacation.at: Likewise.
* examples/mta.c (message_finalize): Append X-Authentication-Warning,
instead of setting it.
Make sure Content-Disposition is not set for parts of a multipart/
alternative MIME message. Some mail readers (notably, yahoo),
misinterpret it.
* libmailutils/mime/attachment.c (at_hdr): Use mu_header_set_value
to set Content-Type and Content-Disposition.
* libmailutils/mime/mime.c (_mime_set_content_type): If the content
type is set to multipart/alternative, remove the Content-Disposition
headers from the message parts.
* mail/send.c (saveatt): Don't set content-disposition for
multipart/alternative, it is now done by the library.
(add_attachments): Warn about ignored headers.
Append only Received and X-* headers, replace others.
(parse_headers): Append headers.
(compose_header_set): Use mu_header_append if COMPOSE_APPEND is requested.
* mail/util.c (util_header_expand): Use mu_header_append.
|
|
The new node type mu_sieve_node_end is introduced to explicitly
mark end of the parse tree. When generating code, this node
triggers insertion of _mu_i_sv_instr_source/_mu_i_sv_instr_line
before the end of code marker. This, in turn, ensures that a
correct location is reported for implicit keep, if logging is
enabled.
* libmu_sieve/sieve-priv.h (mu_sieve_node_end): New node type.
(mu_sieve_node_list): New type (from struct node_list in sieve.y)
* libmu_sieve/sieve.y (node_list_add): New function.
(input production): Add mu_sieve_node_end at the end of the tree.
|
|
* libmu_sieve/load.c [!HAVE_LIBLTDL] (mu_sieve_load_ext): Fix declaration.
|
|
|
|
condition in foreach iterator functions
* libmailutils/diag/errors (MU_ERR_USER0-MU_ERR_USER7): New error constants.
Reserved for user's purposes, such as breaking from foreach iterators.
* libmaildutils/list/foreach.c (mu_list_foreach): Treat NULL list as a list
of 0 elements.
* libmailutils/list/foreachdir.c (mu_list_foreach_dir): Likewise.
* imap4d/imap4d.h (imap4d_auth_result): Remap constants to MU_ERR_USER[0-2]
* libmu_sieve/prog.c (mu_i_sv_lint_command): Use mu_list_locate with
the default comparator.
* mh/mh_list.c (_comp_name): Rewrite to match the definition of
mu_list_comparator_t
(mhl_format_run): Set _comp_name as comparator for the
env.printed_fields list.
(header_is_printed): Use mu_list_locate.
* imap4d/authenticate.c: Use MU_ERR_USER0-MU_ERR_USER7 to indicate
normal break condition in foreach iterators.
* imap4d/imap4d.c: Likewise.
* imap4d/namespace.c: Likewise.
* libmailutils/auth/auth.c: Likewise.
* libmailutils/cfg/driver.c: Likewise.
* libmailutils/cfg/parser.y: Likewise.
* libmailutils/server/acl.c: Likewise.
* libmailutils/server/msrv.c: Likewise.
* libmu_sieve/conf.c: Likewise.
* libmu_sieve/load.c: Likewise.
* libmu_sieve/sieve.l: Likewise.
* libmu_sieve/strexp.c: Likewise.
* libproto/imap/mbox.c: Likewise.
* libproto/imap/search.c: Likewise.
* mh/mh_format.c: Likewise.
* mh/send.c: Likewise.
* mh/sortm.c: Likewise.
* mimeview/mimetypes.y: Likewise.
* movemail/movemail.c: Likewise.
|
|
* configure.ac (VI_REVISION): Increase.
* include/mailutils/assoc.h (mu_assoc_create): Change prototype.
(mu_assoc_ref,mu_assoc_ref_install)
(mu_assoc_remove_ref): Remove.
(mu_assoc_get): New proto.
(mu_assoc_lookup,mu_assoc_lookup_ref): New proto.
(mu_assoc_install_ref): New proto.
(mu_assoc_set_free): Remove.
(mu_assoc_set_destroy_item): Set proto.
* include/mailutils/types.hin (mu_deallocator_t): New typedef.
* include/mailutils/list.h (mu_list_destroy_item_t): Change definition.
* libmailutils/base/assoc.c: Rewrite. Link all entries in
a doubly-linked list to preserve natural ordering during iterations.
* libmailutils/base/mutil.c (mutil_parse_field_map): Update calls
to assoc API.
* libmailutils/cfg/driver.c (alloc_section_tab)
(mu_create_canned_section,mu_create_canned_param)
(mu_get_canned_container,parse_mapping)
(mu_cfg_field_map): Likewise.
* libmailutils/mime/mimehdr.c (_mu_mime_param_free): Free the pointer
itself.
(flush_param,mu_mime_param_assoc_create)
(mu_mime_param_assoc_add)
(_mime_header_parse)
(mu_mimehdr_aget_decoded_param): Update calls to assoc API.
(mu_mime_param_free): New function.
* libmailutils/property/assocprop.c: Likewise.
* libmu_sieve/environment.c: Likewise.
* libmu_sieve/variables.c: Likewise.
* libproto/imap/id.c: Likewise.
* mail/alias.c: Likewise.
* mail/testsuite/mail/alias.exp: Update ordering of expected output.
* mu/imap.c (com_id): Update.
* include/mailutils/mime.h (mu_rfc2047_decode_param): Change prototype.
* libmailutils/base/rfc2047.c (mu_rfc2047_decode_param): Allocate
returned value, instead of filling an already allocated structure.
* libproto/imap/fetch.c: Reflect changes.
|
|
* libmu_sieve/sieve.y (sieve_parse): Make sure 0 is properly promoted
to sieve_instr_t.
|
|
* imap4d/list.c (imap4d_list): Move the longest directory prefix
to the reference.
* imap4d/tests/list.at: New testcase.
* libmu_sieve/tests.c: Fix bug introduced by previous commit
|
|
* libmu_sieve/tests.c (retrieve_address): Treat MU_ERR_EMPTY_ADDRESS
as MU_ERR_NOENT. This complements 678d93678
|
|
* libmu_sieve/sieve.y (mu_sieve_machine_clone): Fix memory allocation.
* mh/pick.c: Remove unused functions.
|
|
* libmu_sieve/runtime.c (mu_sieve_abort): Jump with code MU_ERR_FAILURE.
* libmu_sieve/tests.c (retrieve_address): Tolerate empty addresses.
(retrieve_header): Return reasonable error code.
* maidag/script.c (script_apply): If the script failed, return 0.
|
|
* configure.ac: version 3.1
* NEWS: Likewise.
* libmu_sieve/comparator.c: Attend to FIXMEs.
* libmu_sieve/conf.c: Likewise.
* libmu_sieve/prog.c: Likewise.
* libmu_sieve/runtime.c: Likewise.
* libmu_sieve/sieve.y: Likewise.
* libmu_sieve/util.c: Likewise.
* libmu_sieve/variables.c: Likewise.
* po/POTFILES.in: Add new files.
|
|
* libmu_sieve/util.c (mu_sieve_value_get): Treat actual string
and expected string list as equivalent types.
|
|
* libmu_sieve/sieve.y: Fix compilation of chained elsif conditions.
* sieve/sieve.c: Define the location environment item.
|
|
* NEWS: Update.
* doc/texinfo/libmu_sieve.texi: Update.
* doc/texinfo/sieve.texi: Document extensions
* libmu_sieve/comparator.c (mu_sieve_match_part_checker): Check
the type of the 2nd argument.
* sieve/sieve.c: Define "location" and "phase" environment items.
* sieve/tests/pipetest.at: Use "pipe" as the capability string.
|
|
* include/mailutils/sieve.h (mu_sieve_get_mailbox)
(mu_sieve_get_argc): New protos.
* libmu_sieve/runtime.c: New functions.
|
|
|
|
* include/mailutils/sieve.h (mu_sieve_require_environment): New proto.
* libmu_sieve/Makefile.am: Add environment.c
* libmu_sieve/environment.c: New file.
* libmu_sieve/require.c: Handle "environment" keyword.
* libmu_sieve/sieve-priv.h (mu_sieve_machine) <exenv>: New member.
* libmu_sieve/sieve.l: Bugfixes
* libmu_sieve/variables.c: Add missing static qualifiers
* sieve/sieve.c: New option --environment
|
|
* libmu_sieve/util.c (mu_sieve_vlist_compare): Rewrite.
* include/mailutils/sieve.h (mu_sieve_retrieve_t): Change signature.
All uses changed.
(mu_sieve_relational_count): Remove.
(mu_sieve_vlist_compare): Change signature.
* libmu_sieve/extensions/list.c (list_retrieve_header): Always
return meaningful status.
* libmu_sieve/tests.c (mu_sieve_relational_count): Remove.
(retrieve_address,retrieve_envelope): Return meaningful status.
(retrieve_header): Iterate over all mime parts, if required.
(sieve_test_address,sieve_test_header): Rewrite.
* libmu_sieve/variables.c (sieve_test_string): Rewrite using
mu_sieve_vlist_compare.
|
|
* include/mailutils/sieve.h (mu_sieve_string): New fields
"constant" and "changed".
(mu_sieve_match_part_tags): New extern.
(mu_sieve_relational_count)
(mu_sieve_require_variables)
(mu_sieve_has_variables)
(mu_sieve_string_get): New functions.
* libmu_sieve/variables.c: New file.
* libmu_sieve/Makefile.am: Add variables.c
* libmu_sieve/comparator.c: Use mu_sieve_string_get to obtain
the actual value of the string.
* libmu_sieve/require.c: Support the "variables" extension.
* libmu_sieve/sieve-priv.h (mu_sieve_machine): New fields
vartab, match_string, match_buf, match_count, match_max.
(mu_i_sv_copy_variables)
(mu_i_sv_expand_variables): New protos.
* libmu_sieve/sieve.l (line_add): zero length means add entire
asciiz string.
* libmu_sieve/sieve.y (mu_sieve_machine_reset): Reset the new
fields.
(mu_sieve_machine_clone): Copy variables and initialize new
fields.
(string_rescan): New function.
(sieve_parse): Rescan string to determine their properties.
* libmu_sieve/strexp.c (update_len): Allow for NULL replacement
values.
* libmu_sieve/string.c (mu_sieve_string_get): New function.
(mu_sieve_string): Use it.
* libmu_sieve/tests.c (do_count): Rename to mu_sieve_relational_count,
make global. All uses changed.
(match_part_tags): Rename to mu_sieve_match_part_tags, make global.
All uses changed.
* sieve/tests/variables.at: New file.
* sieve/tests/Makefile.am: Add new testcases.
* sieve/tests/testsuite.at: Likewise.
|
|
* libmu_sieve/comparator.c: Use mu_glob_compile instead of fnmatch.
|
|
The purpose is to simplify the machine structure and to ensure its
clones are completely independent of the master instance.
* include/mailutils/sieve.h (mu_sieve_command): New struct.
(mu_sieve_record): New enum
(mu_sieve_registry_t): Generalize for storing various types of objects.
(mu_sieve_test_lookup,mu_sieve_action_lookup)
(mu_sieve_require_action,mu_sieve_require_test)
(mu_sieve_require_comparator): Remove.
(mu_sieve_register_test_ext,mu_sieve_register_test)
(mu_sieve_register_action_ext,mu_sieve_register_action)
(mu_sieve_register_comparator)
(mu_sieve_load_ext): Change return type.
(mu_sieve_registry_require,mu_sieve_unload_ext): New functions.
(mu_sieve_machine_inherit): Rename to mu_sieve_machine_clone.
* libmu_sieve/sieve-priv.h (mu_sieve_machine): Remove source_list,
test_list, action_list, and comp_list. Add a single registry list
instead.
Add space for file and command (action and test) names: idspace,
idcount, idmax.
Remove unused field "stack";
(mu_i_sv_lex_finish): Change prototype.
(_mu_i_sv_instr_push,_mu_i_sv_instr_pop): Remove protos.
(mu_i_sv_id_canon,mu_i_sv_id_num)
(mu_i_sv_id_str,mu_i_sv_free_idspace): New protos.
* libmu_sieve/register.c: Rename to registry.c
* libmu_sieve/registry.c (mu_sieve_test_lookup)
(mu_sieve_action_lookup): Remove.
(mu_sieve_require_test,mu_sieve_require_action): Remove.
(mu_sieve_registry_require): New function.
(mu_sieve_registry_add,mu_sieve_registry_lookup): New functions.
* libmu_sieve/Makefile.am: Update.
* libmu_sieve/comparator.c: Rewrite using new registry functions.
* libmu_sieve/load.c (mu_sieve_load_ext): Return module handle.
(mu_sieve_unload_ext): New function.
* libmu_sieve/mem.c (mu_sieve_free): Gracefully handle NULL argument.
(mu_i_sv_id_canon,mu_i_sv_id_num,mu_i_sv_id_str): New functions.
* libmu_sieve/prog.c (mu_i_sv_locus): Store index of the file name in
the id space, instead of pointer to the name itself.
* libmu_sieve/require.c (mu_sieve_require): Rewrite.
* libmu_sieve/runtime.c (_mu_i_sv_instr_source): Expect ID index
as argument.
(_mu_i_sv_instr_push)
(_mu_i_sv_instr_pop): Remove unused instructions.
* libmu_sieve/sieve.l (file_names): Remove. Use mu_sieve_machine
idspace instead.
* libmu_sieve/sieve.y (mu_sieve_machine_clone)
(mu_sieve_machine_dup): Rewrite.
(mu_sieve_machine_destroy): Free idspace and registry
* examples/numaddr.c: Reflect changes.
* libmu_sieve/extensions/editheader.c: Likewise.
* libmu_sieve/extensions/list.c: Likewise.
* libmu_sieve/extensions/moderator.c: Likewise.
* libmu_sieve/extensions/pipe.c: Likewise.
* libmu_sieve/extensions/spamd.c: Likewise.
* libmu_sieve/extensions/timestamp.c: Likewise.
* libmu_sieve/extensions/vacation.c: Likewise.
|
|
|
|
* include/mailutils/sieve.h (SVT_IDENT): Remove.
* libmu_sieve/comparator.c (mu_sieve_match_part_checker): Remove
unused variable.
* libmu_sieve/mem.c (mu_sieve_reclaim_list): Remove function.
* libmu_sieve/sieve.y: Remove leftover uses of SVT_IDENT.
* libmu_sieve/util.c: Likewise.
* libmu_sieve/sieve-priv.h: Remove useless prototypes.
|
|
Strings are allocated in a per-machine string space. String and
argument lists form contiguous arrays of structures. Regular ex-
pressions are compiled when they are needed. Compiled expressions
are cached for eventual reuse.
|
|
* include/mailutils/sieve.h (mu_sieve_alloc)
(mu_sieve_palloc,mu_sieve_prealloc)
(mu_sieve_pfree,mu_sieve_pstrdup): Remove.
(mu_sieve_mstrdup,mu_sieve_mrealloc)
(mu_sieve_mfree): Remove.
(mu_sieve_reclaim_t): New typedef.
(mu_sieve_calloc,mu_sieve_strdup)
(mu_sieve_realloc)
(mu_sieve_reclaim_default,mu_sieve_reclaim_list)
(mu_sieve_reclaim_value,mu_sieve_reclaim_tag): New functions
(mu_sieve_value_create): Change prototype (take mu_sieve_machine_t
as first argument)
* libmu_sieve/mem.c: New file.
* libmu_sieve/Makefile.am: Add new file.
* libmu_sieve/comparator.c: Use new allocation functions.
* libmu_sieve/prog.c: Likewise.
* libmu_sieve/register.c: Likewise.
* libmu_sieve/sieve.l: Likewise.
* libmu_sieve/sieve.y: Likewise.
* libmu_sieve/util.c: Likewise.
* doc/texinfo/libmu_sieve.texi: Update (needs revision).
|
|
* include/mailutils/sieve.h (mu_sieve_handler_t): Change signature:
remove args and tags arguments, they are contained in struct
mu_sieve_machine now.
(mu_sieve_get_comparator)
(mu_sieve_relcmpn_t): Change signature.
(mu_sieve_tag_lookup,mu_sieve_tag_lookup_untyped): Remove
(mu_sieve_get_tag,mu_sieve_get_tag_untyped): New protos.
(mu_sieve_value_get_optional): Replace by
mu_sieve_get_arg_optional.
(mu_sieve_value_get_untyped): Replace by
mu_sieve_get_arg_untyped.
(mu_sieve_value_get): Replace by
mu_sieve_get_arg.
All uses changed.
* libmu_sieve/sieve-priv.h (mu_sieve_machine): New members:
arg_list and tag_list
* libmu_sieve/runtime.c (instr_run): Set up identifier, arg_list,
and tag_list in mu_sieve_machine_t before calling the handler.
Reset them afterward.
* libmu_sieve/util.c (mu_sieve_value_get_optional): Replace by
mu_sieve_get_arg_optional.
(mu_sieve_value_get_untyped): Replace by
mu_sieve_get_arg_untyped.
(mu_sieve_value_get): Replace by
mu_sieve_get_arg.
(mu_sieve_tag_lookup): Replace by mu_sieve_get_tag
(mu_sieve_tag_lookup_untyped): Replace by
mu_sieve_get_tag_untyped
|
|
* include/mailutils/sieve.h (mu_sieve_data_type): Remove SVT_VALUE_LIST.
(mu_sieve_value_storage): Named union for use in mu_sieve_value_t; remove
the tag field.
(mu_sieve_tag_lookup): Change prototype.
(mu_sieve_value_get): Change prototype.
(mu_sieve_value_get_optional)
(mu_sieve_value_get_untyped): New functions.
(mu_sieve_arg_error): Removed proto.
* libmu_sieve/sieve.y: Remove SVT_VALUE_LIST support.
* libmu_sieve/util.c (mu_sieve_value_create)
(mu_sieve_type_str,mu_sieve_vlist_do): Remove SVT_VALUE_LIST support.
(mu_sieve_value_get): Rewrite.
(mu_sieve_value_get_untyped)
(mu_sieve_value_get_optional): New functions.
(mu_sieve_arg_error): Remove.
(mu_sieve_tag_lookup): Rewrite.
(mu_sieve_tag_lookup_untyped): New function.
* doc/texinfo/libmu_sieve.texi: Update.
libmu_sieve/tests.c
libmu_sieve/actions.c
libmu_sieve/extensions/editheader.c
libmu_sieve/extensions/list.c
libmu_sieve/extensions/moderator.c
libmu_sieve/extensions/pipe.c
libmu_sieve/extensions/spamd.c
libmu_sieve/extensions/timestamp.c
libmu_sieve/extensions/vacation.c
libmu_sieve/relational.c
examples/numaddr.c
|
|
* libmu_sieve/sieve-priv.h (sieve_op_t) <unum>: New field.
* libmu_sieve/sieve.l: Leave one string interpreter slot.
|
|
* libmu_sieve/encoded.c: New file.
* libmu_sieve/strexp.c: New file.
* libmu_sieve/Makefile.am: Add new files.
* libmu_sieve/require.c (mu_sieve_require): Understand "encoded-character".
* libmu_sieve/sieve-priv.h (mu_i_sv_interp_t): New typedef.
(mu_i_sv_expand_encoded_char): New proto.
(mu_sieve_require_encoded_character): New proto.
* libmu_sieve/sieve.l (string): Rewrite via line_.* functions. This
fixes memory leaks on mu_sieve_machine_destroy.
(line_finish): Expand ${} sequences before returning.
(mu_sieve_require_encoded_character): New function.
* sieve/tests/enc-char.at: New file.
* sieve/tests/Makefile.am: Add enc-char.at
* sieve/tests/testsuite.at: Likewise.
|
|
* include/mailutils/sieve.h (mu_sieve_action_log_t): Change proto.
* lib/sieve.c (_sieve_action_log): Rewrite.
* libmu_sieve/util.c (mu_sieve_log_action): Rewrite.
* python/libmu_py/sieve.c (_sieve_action_printer): Rewrite.
* sieve/sieve.c (_sieve_action_log): Rewrite.
|
|
* include/mailutils/sieve.h (MU_SIEVE_DEBUG_TRACE)
(MU_SIEVE_DEBUG_INSTR,MU_SIEVE_DEBUG_DISAS)
(MU_SIEVE_DRY_RUN): Remove.
(mu_sieve_machine_init_ex): Remove proto.
(mu_sieve_set_dbg_stream,mu_sieve_get_dbg_stream)
(mu_sieve_stream_save)
(mu_sieve_stream_restore): New protos.
* libmu_sieve/runtime.c (INSTR_DISASS,INSTR_DEBUG): Reimplement.
* libmu_sieve/sieve-priv.h (MU_SV_SAVED_ERR_STATE)
(MU_SV_SAVED_DBG_STATE,MU_SV_SAVED_STATE): New bitflags.
(mu_sieve_state_disass): New constant.
(mu_sieve_machine)<state_flags, err_mode>
<err_locus,dbg_mode,dbg_locus>: New members.
<dbgstream>: New member.
* libmu_sieve/sieve.y (mu_sieve_machine_init_ex): Remove.
(mu_sieve_machine_dup, mu_sieve_machine_inherit): Fix.
(mu_sieve_set_dbg_stream)
(mu_sieve_get_dbg_stream): New functions.
(mu_sieve_machine_destroy): Destroy dbgstream.
(with_machine): Preserve stream state (mode & locus).
* libmu_sieve/util.c (mu_i_sv_debug,mu_i_sv_debug_command): Use ioctl
instead of format strings.
(mu_sieve_stream_save, mu_sieve_stream_restore): New functions.
* python/libmu_py/sieve.c (api_sieve_machine_init): Use
mu_sieve_machine_init.
* sieve/sieve.c: Improve help output.
(main): Dump disassembled code to standard output.
|
|
* libmu_sieve/runtime.c (_mu_i_sv_instr_nop): Remove.
* libmu_sieve/sieve-priv.h: Likewise.
|