1. 13 Jun, 2017 1 commit
    • * 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
      Sergey Poznyakoff authored
  2. 12 Jun, 2017 3 commits
    • * include/mailutils/locus.h (mu_linetrack_rebase): New proto.
      * libmailutils/locus/linetrack.c (mu_linetrack_rebase): New function.
      * libmailutils/diag/diag.c (mu_diag_at_locus_range): New function.
      Sergey Poznyakoff authored
    • * include/mailutils/locus.h (mu_stream_print_locus_point): New proto.
      (mu_locus_range_copy): New proto.
      * include/mailutils/yyloc.h (mu_file_print_locus_point)
      (mu_file_print_locus_range): New protos.
      (YY_LOCATION_PRINT): Redo using mu_file_print_locus_range.
      * libmailutils/locus/filprloc.c: New file.
      * libmailutils/locus/genprloc.c: New file.
      * libmailutils/locus/strprloc.c: New file.
      * libmailutils/locus/Makefile.am: Add new files.
      * libmailutils/locus/debug.c (mu_stream_print_locus_range): Remove.
      Declared elsewhere.
      * libmailutils/locus/linetrack.c: use mu_locus_point_set_file,
      instead of mu_locus_point_init.
      * libmailutils/locus/locus.c: Likewise.
      (mu_locus_range_copy)P: New function.
      * mimeview/mimetypes.l: Provide rule for \n in ARGSTRING
      Always print diagnostics before returning BOGUS
      (lex_next_rule): Rewrite.  Print verbose diagnostics if app.trace6 is set.
      (mimetypes_close): Deinitialize yylloc.
      * mimeview/mimetypes.y: Catch the BOGUS token.
      Adjust conflict expectation.
      Properly reference assigned loci.
      (mimetypes_parse): Return 1 if any errors detected.
      * mimeview/mimeview.c: Use debug category app instead of mime.
      * mimeview/tests/testsuite.at: Add new tests.
      * libmailutils/stream/logstream.c (_log_done): Deinitialize
      locus range.
      Sergey Poznyakoff authored
    • * include/mailutils/locus.h (MU_LOCUS_POINT_INITIALIZER): New define
      (MU_LOCUS_RANGE_INITIALIZER): New define
      (mu_locus_point_set_file, mu_locus_point_init)
      (mu_locus_point_deinit, mu_locus_point_copy)
      (mu_locus_range_deinit): New protos
      * libmailutils/locus/locus.c: New file.
      * libmailutils/locus/Makefile.am: Add new file.
      * libmailutils/locus/linetrack.c (mu_linetrack_at_bol): New function.
      (mu_linetrack_locus): New function.
      (mu_linetrack_advance): Use mu_locus_point_set_file to set the mu_file
      field.
      * libmailutils/tests/linetrack.c: Initialize and deinitialize locus
      range.
      * mimeview/mimetypes.l: switch to line tracker
      * mimeview/mimeview.h: Use defines from yyloc.h
      Sergey Poznyakoff authored
  3. 09 Jun, 2017 2 commits
    • Sergey Poznyakoff authored
    • It was noted that "mhn -nohead" did not suppress the output of
      headers as "mhn -noheaders" did.  It turned out that the negation
      marker was overwritten while scanning options for possible matching
      alternatives.  This patch fixes it.
      
      * libmailutils/opt/opt.c (find_long_option): Don't overwrite
      the negation attribute of the last found option.
      
      * libmailutils/tests/parseopt.c: New option --headers, to test
      the fix.
      * libmailutils/tests/parseopt28.at: New testcase.
      * libmailutils/tests/Makefile.am: Add new testcase.
      * libmailutils/tests/testsuite.at: Include new testcase.
      
      * libmailutils/tests/parseopt*.at: Trivial changes
      Sergey Poznyakoff authored
  4. 08 Jun, 2017 7 commits
  5. 07 Jun, 2017 4 commits
    • Sergey Poznyakoff authored
    • * include/mailutils/locus.h (mu_stream_print_locus_range)
      (mu_stream_vlprintf, mu_stream_lprintf, mu_lrange_debug): New protos.
      * include/mailutils/stream.h (MU_IOCTL_LOGSTREAM_GET_LOCUS_RANGE)
      (MU_IOCTL_LOGSTREAM_SET_LOCUS_RANGE): New ioctls.
      * include/mailutils/sys/logstream.h (_mu_log_stream): Replace
      locus with struct mu_locus_range locrange.
      * libmailutils/locus/debug.c: Rewrite.
      * libmailutils/locus/ident.c (mu_ident_ref): Accept NULL argument.
      Fix initialization.
      (mu_ident_deref): Accept NULL argument.
      * libmailutils/stream/logstream.c: Rewrite.
      * libmailutils/tests/.gitignore: Update.
      * libmailutils/tests/Makefile.am: Add new tests.
      * libmailutils/tests/testsuite.at: Likewise.
      * libmailutils/tests/logstr.at: New testcase.
      * libmailutils/tests/logstr.c: New file.
      * libmailutils/tests/xscript.at: Minor change.
      * sieve/tests/i-numeric.at: Minor change.
      Sergey Poznyakoff authored
    • MH testsuite produced false negatives when run in a directory accessed
      by its logical name (symlink).  To fix this, avoiding at the same time
      the use of non-portable "pwd -P" & "pwd -L", this commit adds a filter
      utility that replaces both logical and physical cwd with a dot on
      output.  The MH testsuite is updated to use this utility.
      
      * testsuite/cwdrepl.c: New utility
      * testsuite/Makefile.am: Build cwdrepl
      * testsuite/.gitignore: Update.
      * testsuite/cwdrepl.at: New test.
      * testsuite/testsuite.at: Include new test.
      
      * mh/tests/atlocal.in (PATH): Add testsuite
      (remove_curdir): Remove function.
      * mh/tests/comp.at: Use cwdrepl, fix expected output.
      * mh/tests/forw.at: Likewise.
      * mh/tests/mhn.at: Likewise.
      * mh/tests/mhpath.at: Likewise.
      * mh/tests/repl.at: Likewise.
      Sergey Poznyakoff authored
    • Liblocus is a part of libmailutils that will provide functions for
      manipulating source file locations, for use in lexers, grammars, etc.
      This will expand the functionality of the mu_locus type and logstreams.
      
      * configure.ac: add libmailutils/locus/
      * include/mailutils/assoc.h (mu_assoc_install_ref2): New proto.
      * libmailutils/base/assoc.c (mu_assoc_install_ref2): New entry point.
      * libmailutils/base/copyfile.c (copy_regular_file): Add typecasts.
      * libmailutils/Makefile.am: Build liblocus
      * libmailutils/locus/Makefile.am: New file.
      * libmailutils/locus/debug.c: New file.
      * libmailutils/locus/ident.c: New file.
      * libmailutils/locus/tracker.c: New file.
      * libmailutils/tests/Makefile.am: New file.
      * libmailutils/tests/tracker.c: New file.
      Sergey Poznyakoff authored
  6. 06 Jun, 2017 1 commit
  7. 03 Jun, 2017 1 commit
    • * mimeview/Makefile.am: Silent rules
      * mimeview/mimetypes.l (lex_reset): Remove.
      (lex_next_rule): New function.
      * mimeview/mimetypes.y: Expect 12 shift/reduce conflicts.
      Rewrite the error rule
      (yyprint): Print TYPE token correctly
      * mimeview/mimeview.h (lex_next_rule): New proto.
      Sergey Poznyakoff authored
  8. 02 Jun, 2017 2 commits
  9. 01 Jun, 2017 2 commits
    • * am/testsuite.m4: New file.
      * configure.ac: Use the MU_CONFIG_TESTSUITE macro.
      * mimeview/Makefile.am (SUBDIRS): Add tests
      * mimeview/mimetypes.l: Rewrite in three exclusive states.
      * mimeview/mimetypes.y: Simplify grammar.
      * mimeview/mimeview.c: New option --identify (-i).
      * mimeview/mimeview.h: Update.
      
      * mimeview/tests/Makefile.am: New file.
      * mimeview/tests/atlocal.in: New file.
      * mimeview/tests/bf.c: New file.
      * mimeview/tests/testsuite.at: New file.
      
      * README: Update.
      * doc/texinfo/programs.texi
      Sergey Poznyakoff authored
    • * mimeview/mimetypes.y (compare_bytes): Fix improper read size
      Sergey Poznyakoff authored
  10. 31 May, 2017 4 commits
    • In whatnow shell, edit [program [parameters]] now calls program
      with supplied parameters plus the name of the file to edit.
      
      * mh/mh.h (mh_whatnow_env) <reedit>: New member.
      * mh/mh_whatnow.c (edit): Rewrite.
      * mh/whatnow.c (main): Properly handle argv[1]
      * NEWS: Update.
      Sergey Poznyakoff authored
    • * mh/mh_init.c (mh_my_email): If Local-Mailbox is set, use
      its value.
      * mh/tests/scan.at: Add test for Local-Mailbox.
      Sergey Poznyakoff authored
    • Calls to mh_global_profile_get and similar functions must appear
      only after a call to mh_getopt (more properly, after mh_init and
      mh_init2 are callead).  This sequence was inadvertently changed
      by commit e267ac86, due to which comp, forw, repl and burst stopped
      reading important information from .mh_profile.  Bug spotted by
      Pierre-Jean.
      
      * mh/burst.c: Make sure profile variables are accessed after
      the profile is read.
      * mh/comp.c: Likewise.
      * mh/forw.c: Likewise.
      * mh/repl.c: Likewise.
      * mh/mh.h (mh_whatnow_env_from_environ): Split into two functions:
      mh_whatnow_env_from_environ_early, to be called before mh_getopt,
      and mh_whatnow_env_from_environ_late, to be called after it.
      * mh/whatnowenv.c: Ditto.
      * mh/whatnow.c: Call these two in the right order.
      
      * THANKS: Update.
      Sergey Poznyakoff authored
    • Old short option '-t' renamed to '-f' for consistency (-f stands for
      --file in most other utilities).  Thus, 'mimevief -f my.types' reads
      the file 'my.types'.
      
      The '-t' option is reused as a short equivalent of the new
      '--lint' option, which instructs the tool to check the syntax of the
      mime.types file and exit, ignoring any surplus command line arguments.
      
      Added support for priority and regex functions.
      
      Improved debugging output.
      
      * mimeview/mimetypes.l: Rewrite lexer in a cleaner way.
      * mimeview/mimetypes.y: Rewrite parser.  Track locations.  Add line
      information to nodes and rules.  Improve debugging
      * mimeview/mimeview.c: Remove the debug configuration statement.  Using
      debug { level } provides the same functionality.  Use mu_debug for debugging.
      New option -t (--lint).  Rename the -t short option to -f.
      * mimeview/mimeview.h: Define lexer and parser macros for location tracking.
      
      * NEWS: Document changes to mimeview utility.
      * doc/texinfo/programs.texi: Document changes to mimeview utility.
      
      * lib/mailcap.c: Use standart mu_debug calls for debugging.
      * lib/mailcap.h (display_stream_mailcap): Change last argument: take a
      mu_debug_handle_t
      * libmailutils/diag/debcat (app): New category.  Application-specific
      debug
      * mail/decode.c (display_submessage): Change invocation of
      display_stream_mailcap.
      * mail/mailvar.c: Setting "verbose" enables app.trace7, unsetting it
      clears app.*
      Sergey Poznyakoff authored
  11. 26 May, 2017 2 commits
    • * mh/show.c: Set cur before returning.  Allow for arguments in
      showproc settings.  Move to next or prev if invoked with the
      corresponding argv[0]
      
      * mh/mh.h (mh_msgset_parse): def argument is const.
      (mh_msgset_first_current, mh_msgset_first_uid): Remove proto.
      (mh_msgset_first): Change signature.
      (mh_msgset_last): New function.
      * mh/mh_msgset.c (mh_msgset_first): Return UID or message number
      depending on the value of the second parameter.
      (mh_msgset_first_current, mh_msgset_first_uid): Remove.
      (mh_msgset_last): New function.
      
      * mh/anno.c: Update.
      * mh/comp.c: Update.
      * mh/folder.c: Update.
      * mh/mh_init.c: Update.
      * mh/repl.c: Update.
      
      * mh/Makefile.am (install-exec-hook): Link show to prev and next
      Sergey Poznyakoff authored
    • * include/mailutils/msgset.h (mu_msgset_first, mu_msgset_last): New prototypes.
      * libmailutils/msgset/Makefile.am: Add new files.
      * libmailutils/msgset/first.c: New file.
      * libmailutils/msgset/last.c: New file.
      * libmailutils/tests/msgset.c: New options for testing the new functions.
      * libmailutils/tests/msgset.at: Test new functions.
      Sergey Poznyakoff authored
  12. 22 Apr, 2017 2 commits
    • * mh/etc/Makefile.am (bindir): Override.  Reported by Ken Brown
      <kbrown@cornell.edu>
      Sergey Poznyakoff authored
    • * include/mailutils/cctype.h (MU_CTYPE_TSPEC): New class.  Represents
      tspecials as per RFC 2045, section 5.1.
      (mu_istspec): New define.
      * libmailutils/string/muctype.c (mu_c_tab): Mark tspecials
      
      * include/mailutils/assoc.h (mu_assoc_mark)
      (mu_assoc_sweep): New protos.
      * libmailutils/base/assoc.c (_mu_assoc_elem): New field: mark
      (mu_assoc_mark,mu_assoc_sweep): New functions.
      
      * libmailutils/filter/Makefile.am (libfilter_la_SOURCES): Add dq.c
      and percent.c.
      * libmailutils/filter/dq.c: New file.
      * libmailutils/filter/percent.c: New file.
      * include/mailutils/filter.h (mu_percent_filter)
      (mu_dq_filter): New externs.
      * libmailutils/filter/filter.c (mu_filter_get_list): Register
      mu_percent_filter and mu_dq_filter.
      
      * include/mailutils/mime.h (mu_mime_header_set)
      (mu_mime_header_set_w): New protos.
      * libmailutils/mime/Makefile.am (libmime_la_SOURCES): Add mimehdrset.c
      * libmailutils/mime/mimehdrset.c: New file.
      * libmailutils/mime/mime.c (_mime_set_content_type): For multipart/alternative,
      remove also all parameters except charset from the Content-Type header.
      * mail/send.c (saveatt): Remove the now unneeded conditionals.
      * libmailutils/tests/mimehdr.at: Test formatting functions.
      
      * include/mailutils/stream.h (MU_IOCTL_FILTER_SET_OUTBUF_SIZE): New ioctl.
      * include/mailutils/sys/filter.h (_MU_FILTER_DISABLED)
      (_MU_FILTER_EOF): Remove.  Use bitfields instead.
      (_mu_filter_stream): Remove fltflag.  New fields: flag_disabled,
      flag_eof, outbuf_size.
      * libmailutils/stream/fltstream.c (MFB_BASE)
      (MFB_CURPTR, MFB_ENDPTR, MFB_SIZE, MFB_LEVEL)
      (MFB_POS, MFB_RDBYTES, MFB_FREESIZE)
      (MBF_CLEAR, MBF_FREE): Replace with inline functions.
      (init_iobuf): Use the outbuf_size field (unless 0) to
      set the output buffer size.
      (filter_read): Stop if on success if outbuf_size is set,
      without trying to fill the entire buffer.
      (filter_ctl): Handle MU_IOCTL_FILTER_SET_OUTBUF_SIZE.
      
      * libmailutils/tests/mimehdr.c: New option -width: format and
      print the value assuming given line width.
      Sergey Poznyakoff authored
  13. 19 Apr, 2017 5 commits
    • Minor change · 5aea5b2d
      * mail/mail.h: Remove unneeded extern qualifiers.
      Sergey Poznyakoff authored
    • If the mime header is set, then mail will provide the missing 'charset'
      parameter for each Content-Type header that begins with 'text/'.
      Its value will be determined by examining the 'charset' mail variable.
      If it is set to 'auto' (the default), the character set will be extracted
      from the value of the LC_ALL environment variable.  If it is unset, it
      will be deduced from the LANG environment variable.
      
      Thus, provided that LC_ALL is set correctly, the following setting in
      .mailrc is recommended to ensure that mails in native character
      sets will be processed correctly:
      
        set charset=auto mime
      
      In most cases, it can be simplified to just 'set mime'.
      
      * NEWS: Update.
      * doc/texinfo/programs.texi: Update the description of the charset
      variable.
      * mail/mail.h (util_get_charset): New proto.
      * mail/send.c (attach_set_content_type): New function.
      (attlist_add, add_body): Use attach_set_content_type to
      set the content_type field.
      * mail/util.c (util_get_charset): New function.
      (util_rfc2047_decode): Use util_get_charset.
      Sergey Poznyakoff authored
    • Sergey Poznyakoff authored
    • * mail/mail.c (mime_option): New variable.
      (main): assume --mime if either or both of --content-type and
      --content-encoding are set.  Set the mime variable if so.
      * mail/mail.h (mailvar_is_true): New prototype.
      * mail/send.c (add_attachments): Continue if the mime variable
      is set.
      (add_body): Rewrite, treating the text read from the stdin as
      MIME part in itself.
      * mailvar.c (mailvar_tab): New variable "mime"
      (mailvar_is_true): New function.
      
      * NEWS: Document --mime
      * doc/texinfo/programs.texi: Rewrite the Attachments subsection.
      Sergey Poznyakoff authored
    • Minor changes · ff1a8a6e
      * mail/mail.c (cli_attach): Exit if unable to attach file.
      * mail/mail.h (send_attach_file): Change prototype.
      * mail/send.c (send_attach_file): Return int.
      (add_body): Honor default_content_type
      Sergey Poznyakoff authored
  14. 18 Apr, 2017 2 commits
    • fix a typo · a72570a2
      Sergey Poznyakoff authored
    • 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.
      Sergey Poznyakoff authored
  15. 13 Apr, 2017 2 commits
    • Bugfix · c010cf73
      * libmailutils/base/assoc.c (merge_sort): Fix last argument in call to cmp.
      Sergey Poznyakoff authored
    • The new option --alternative is provided to change the content type of
      the composed message to multipart/alternative.  The ~/ escape toggles
      the type between multipart/mixed and multipart/alternative.  In messages
      of multipart/alternative type, the Content-Disposition header of all
      attachments is reset to "inline".
      
      * libmailutils/mime/mime.c (mu_mime_create): Bugfix: honour the
      MU_MIME_MULTIPART_ALT flag.
      * mail/mail.c: New option --alternative.
      * mail/mail.h (compose_env) <attlist,mime>: New members.
      (multipart_alternative): New global.
      (send_attach_file): Change return value.
      (escape_toggle_multipart_type): New proto.
      * mail/send.c (multipart_alternative): New global.
      Keep the list of attachments in compose_env_t.  Make sure it is freed
      when no longer used.
      Implement the ~/ escape.
      * mail/table.c: New escape ~/
      * mail/util.c: Use mu_strerror instead of strerror.
      
      * NEWS: Document changes to the mail utility
      * doc/texinfo/programs.texi: Likewise.
      Sergey Poznyakoff authored