1. 14 Dec, 2011 3 commits
    • LSUB is pretty similar to LIST, therefore it is implemented as a
      wrapper over the latter.
      
      * include/mailutils/imap.h (mu_imap_genlist,mu_imap_genlist_new)
      (mu_imap_lsub,mu_imap_lsub_new): New protos.
      * include/mailutils/sys/imap.h (MU_IMAP_CLIENT_LSUB_RX): New state.
      * libproto/imap/Makefile.am (libmu_imap_la_SOURCES): Add new files.
      * libproto/imap/genlist.c: New file.
      * libproto/imap/list.c: Rewrite using generalized list functions.
      * libproto/imap/lsub.c: New file.
      * mu/imap.c: Implement lsub.
      Sergey Poznyakoff authored
    • * include/mailutils/imap.h (mu_imap_subscribe)
      (mu_imap_unsubscribe): New protos.
      * include/mailutils/sys/imap.h (MU_IMAP_CLIENT_SUBSCRIBE_RX)
      (MU_IMAP_CLIENT_UNSUBSCRIBE_RX): New states.
      * libproto/imap/Makefile.am (libmu_imap_la_SOURCES): Add
      subscribe.c and unsubscribe.c
      * libproto/imap/subscribe.c: New file.
      * libproto/imap/unsubscribe.c: New file.
      * mu/imap.c: Implement subscribe/unsubscribe.
      Sergey Poznyakoff authored
    • * include/mailutils/imapio.h (mu_imapio_send_command)
      (mu_imapio_send_command_e,mu_imapio_send_command_v)
      (mu_imapio_last_error,mu_imapio_clearerr): New protos.
      * include/mailutils/sys/imap.h (imap_command)<uid>: Remove.
      <extra>: New member.
      * libmailutils/imapio/Makefile.am (libimapio_la_SOURCES): Add new files.
      * libmailutils/imapio/qstring.c (mu_imapio_send_qstring_unfold): Improve
      functionality.
      * libmailutils/imapio/sendcmd.c: New file.
      * libmailutils/imapio/sendcmde.c: New file.
      * libmailutils/imapio/sendcmdv.c: New file.
      * libmailutils/imapio/errstate.c: New file.
      
      * libproto/imap/gencom.c (mu_imap_gencom): Use mu_imapio_send_command_v
      * libproto/imap/appstrsiz.c: Quote command arguments as necessary.
      * libproto/imap/capability.c: Likewise.
      * libproto/imap/check.c: Likewise.
      * libproto/imap/close.c: Likewise.
      * libproto/imap/copy.c: Likewise.
      * libproto/imap/delete.c: Likewise.
      * libproto/imap/expunge.c: Likewise.
      * libproto/imap/fetch.c: Likewise.
      * libproto/imap/list.c: Likewise.
      * libproto/imap/login.c: Likewise.
      * libproto/imap/mbcreate.c: Likewise.
      * libproto/imap/noop.c: Likewise.
      * libproto/imap/rename.c: Likewise.
      * libproto/imap/select.c: Likewise.
      * libproto/imap/store.c: Likewise.
      * libproto/imap/unselect.c: Likewise.
      Sergey Poznyakoff authored
  2. 13 Dec, 2011 4 commits
    • * libmailutils/stdstream/basestr.c (mu_strout): Bugfix: initialize
      destroy function.
      * include/mailutils/imap.h (imap_command)
      (mu_imap_gencom): Move to sys/imap.h
      (mu_imap_list,mu_imap_list_new): New protos.
      * include/mailutils/sys/imap.h (imap_command): New struct (from ../imap.h).
      <handler>: Rename to tagged_handler.
      (untagged_handler,untagged_handler_data): New members. All uses changed.
      (mu_imap_gencom): New proto.
      
      * libproto/imap/list.c: New file.
      * libproto/imap/Makefile.am: Add list.c
      * libproto/imap/gencom.c: Use supplied untagged_handler to
      analize untagged response.
      
      * mu/imap.c: Implement list command.
      Sergey Poznyakoff authored
    • * libmu_sieve/sieve.y (mu_sieve_compile): Initialize rc.
      * python/libmu_py/sieve.c (api_sieve_machine_error_text): Fix
      type of length.
      Sergey Poznyakoff authored
    • * python/libmu_py/sieve.c (api_sieve_machine_init): Improve.
      (api_sieve_machine_error_text): Add new function.
      * python/libmu_py/stream.c (api_memory_stream_create): Likewise.
      (api_stream_to_message): Likewise.
      * python/mailutils/error.py (Error): Add optional str_error argument.
      * python/mailutils/sieve.py: Update.
      * python/mailutils/stream.py (to_message): Add new method.
      (MemoryStream): Add new class.
      Wojciech Polak authored
    • * libmailutils/datetime/streamftime.c (mu_c_streamftime): Handle
      %Z separately.
      * libmu_sieve/sieve.y (mu_sieve_compile): Return MU_ERR_PARSE on
      errors.
      Sergey Poznyakoff authored
  3. 12 Dec, 2011 4 commits
    • * libmailutils/filter/base64.c (_base64_encoder): Continue after
      incrementing nbytes.
      * mh/mhn.c: Additional error checking.
      Sergey Poznyakoff authored
    • This allows programmers to use them right away, much like their stdio
      counterparts.  The mu_stdstream_setup and friends can be used to
      re-initialize them, should the need be.
      
      * include/mailutils/sys/file_stream.h
      (_MU_FILE_STREAM_STATIC_FILENAME): New flag.
      (_mu_file_stream_setup): New proto.
      * include/mailutils/sys/logstream.h (_mu_log_stream_setup): New proto.
      * include/mailutils/sys/stream.h (_MU_STR_EVENT_BOOTSTRAP): New event
      code.
      (_mu_stream) <destroy>: New method.
      * libmailutils/stdstream/basestr.c: Define the three standard streams
      statically, use bootstrap event to initialize them.
      * libmailutils/stdstream/strerr.c (mu_stdstream_strerr_create): Accept
      tag==NULL.
      * libmailutils/stream/file_stream.c (fd_done): Do not free filename if
      _MU_FILE_STREAM_STATIC_FILENAME is set.
      (_mu_file_stream_setup): New function.
      * libmailutils/stream/logstream.c (NEXT): Check size before advancing
      buffer pointer.
      (_mu_log_stream_setup): New function.
      * libmailutils/stream/stream.c (_bootstrap_event): New macro.
      (mu_stream_destroy): If .destroy is defined, use it instead of free(2).
      (mu_stream_open,mu_stream_seek,mu_stream_set_buffer)
      (mu_stream_read,mu_stream_readdelim,mu_stream_getdelim)
      (mu_stream_write,mu_stream_size,mu_stream_wait)
      (mu_stream_truncate,mu_stream_shutdown): Call _bootstrap_event at the
      beginning.
      * libmailutils/tests/.gitignore: Add strin, strout.
      * libmailutils/tests/Makefile.am (noinst_PROGRAMS): Add strin, strout.
      (TESTSUITE_AT): Add stdstream tests.
      * libmailutils/tests/testsuite.at: Include stdstream tests.
      * libmailutils/tests/strerr.at: New test case.
      * libmailutils/tests/strin.at: Likewise.
      * libmailutils/tests/strout.at: Likewise.
      * libmailutils/tests/strin.c: New test program.
      * libmailutils/tests/strout.c: Likewise.
      Sergey Poznyakoff authored
    • * imap4d/util.c (util_getfullpath): Use mu_stpcpy.
      Sergey Poznyakoff authored
  4. 11 Dec, 2011 2 commits
  5. 10 Dec, 2011 2 commits
    • * imap4d/imap4d.h (util_format_attribute_flags)
      (util_attribute_to_type): Remove. All uses changed to
      mu_imap_format_flags and mu_imap_flag_to_attribute, respectively.
      (util_type_to_attribute): Remove.
      Sergey Poznyakoff authored
    • The new parser complies to RFC3501. Its output message sets are
      formatted as MU lists of non-overlapping contiguous message ranges,
      which reduces memory consumption and imposes less strain on CPU.
      The parser automatically translates message UIDs to sequence numbers
      and provides better error handling.
      
      * imap4d/imap4d.h (util_msgset): Remove.
      (util_parse_msgset): New proto.
      (imap4d_message_action_t): New typedef.
      (util_foreach_message): New proto.
      * imap4d/util.c  (util_msgset): Remove.
      (util_parse_msgset): New function.
      
      * imap4d/copy.c: Use util_parse_msgset to parse message set specs and
      util_foreach_message to iterate over the returned list.
      * imap4d/fetch.c: Likewise.
      * imap4d/search.c: Likewise.
      * imap4d/store.c: Likewise.
      * imap4d/tests/IDEF0955.at: Update the test.
      * include/mailutils/list.h (mu_list_action_t): Fix typedef.
      * libmailutils/list/foreach.c (mu_list_foreach)
      (mu_list_do): Update signatures.
      Sergey Poznyakoff authored
  6. 09 Dec, 2011 2 commits
  7. 08 Dec, 2011 7 commits
    • * examples/mta.c (make_tmp): Use gmtime + mu_c_streamftime to
      create From_ line.
      * libmailutils/mailbox/msgenv.c (message_envelope_date): Use gmtime.
      * maidag/deliver.c (make_tmp): Likewise.
      * maidag/lmtp.c (cfun_data): Likewise.
      * readmsg/readmsg.c (print_unix_header): Use gmtime.
      Sergey Poznyakoff authored
    • The function initializes mu_timezone structure to the local timezone.
      
      * include/mailutils/datetime.h (mu_utc_offset): Change return type.
      (mu_datetime_tz_local): New proto.
      * libmailutils/datetime/tzlocal.c: New file.
      * libmailutils/datetime/Makefile.am: Add new file.
      * libmailutils/datetime/scantime.c (mu_scan_datetime): Use
      mu_datetime_tz_local to initialize local TZ.
      * mh/mh_format.c (_parse_date): Likewise.
      * libmailutils/datetime/utcoff.c (mu_utc_offset): Returns int.
      * libmu_sieve/actions.c (mime_create_ds): Use mu_c_streamftime
      to format time directly to stream.
      Sergey Poznyakoff authored
    • Sergey Poznyakoff authored
    • * imap4d/append.c: Don't reuse msg variable.
      * po/POTFILES.in: Remove unneeded file.
      Sergey Poznyakoff authored
    • * configure.ac: Build libmailutils/datetime/Makefile.am
      * include/mailutils/datetime.h (mu_datetime_julianday)
      (mu_datetime_dayofweek,mu_datetime_dayofyear)
      (mu_datetime_year_days): New protos.
      * libmailutils/Makefile.am (SUBDIRS): Add datetime
      (libmailutils_la_LIBADD): Add libdatetime.la
      * libmailutils/base/Makefile.am (libbase_la_SOURCES): Remove date.c
      and strftime.c.
      * libmailutils/base/date.c: Remove.
      * libmailutils/base/strftime.c: Move to libmailutils/datetime
      * libmailutils/datetime/Makefile.am: New file.
      * libmailutils/datetime/dow.c: New file.
      * libmailutils/datetime/doy.c: New file.
      * libmailutils/datetime/jd.c: New file.
      * libmailutils/datetime/scantime.c: New file.
      * libmailutils/datetime/streamftime.c: New file.
      * libmailutils/datetime/tab.c: New file.
      * libmailutils/datetime/unixtime.c: New file.
      * libmailutils/datetime/utcoff.c: New file.
      * libmailutils/datetime/yd.c: New file.
      * libmailutils/tests/scantime.at: Fix yday numbers.
      Sergey Poznyakoff authored
    • Additionally, do not typedef mu_timezone, leave it in struct namespace.
      Sergey Poznyakoff authored
    • * imap4d/append.c (imap4d_append0): Use
      mu_message_from_stream_with_envelope with crafted envelope.  The effect is
      that the envelope of the message always reflects the actual sender, as
      deduced from the header (X-Envelope-Sender, Sender, From, in that order)
      and the date given with the APPEND command (or current date/time, if not
      given).
      * imap4d/tests/append00.at: Reflect changes in the envelope.
      * imap4d/tests/append01.at: Likewise.
      * imap4d/io.c (io_format_completion_response): Call imap4d_sync to
      emit eventual non-tagged responses before the tagged one.
      
      * include/mailutils/envelope.h (mu_envelope_set_destroy): New proto.
      * include/mailutils/header.h (MU_HEADER_SENDER): Remove duplicate define.
      * include/mailutils/imap.h (mu_imap_mailbox_create)
      (mu_imap_append_stream_size,mu_imap_append_stream)
      (mu_imap_append_message,mu_imapio_send_flags)
      (mu_imapio_send_time): New protos.
      * include/mailutils/imapio.h (mu_imapio_send_literal): Remove proto.
      (mu_imapio_send_literal_string)
      (mu_imapio_send_literal_stream): New protos.
      * include/mailutils/message.h
      (mu_message_from_stream_with_envelope): New proto.
      * include/mailutils/sys/imap.h (MU_IMAP_CLIENT_APPEND_RX): New state.
      * include/mailutils/sys/message_stream.h (_mu_message_stream)
      <envelope>: Rename to envelope_string.
      <construct_envelope>: New member.
      
      * libmailutils/imapio/literal.c: Remove.
      * libmailutils/imapio/litstream.c: New file.
      * libmailutils/imapio/litstring.c: New file.
      * libmailutils/imapio/time.c: New file.
      * libmailutils/imapio/Makefile.am: Add new files.
      * libmailutils/imapio/flags.c (mu_imapio_send_flags): New function.
      * libmailutils/imapio/qstring.c (mu_imapio_send_qstring_unfold): Use
      mu_imapio_send_literal_string.
      
      * libmailutils/mailbox/envelope.c (mu_envelope_set_destroy): New
      function.
      * libmailutils/stream/message_stream.c
      (mu_message_from_stream_with_envelope): New function.
      (mu_stream_to_message): Rewrite as an alternative entry point to the
      above.
      
      * libproto/imap/Makefile.am: Add new files.
      * libproto/imap/appmsg.c: New file.
      * libproto/imap/appstr.c: New file.
      * libproto/imap/appstrsiz.c: New file.
      * libproto/imap/mbcreate.c: New file.
      
      * mu/imap.c: Implement create and append.
      Sergey Poznyakoff authored
  8. 07 Dec, 2011 3 commits
    • * include/mailutils/imap.h (imap_command): New struct.
      (mu_imap_gencom): New function.
      (mu_imap_store,mu_imap_delete)
      (mu_imap_rename,mu_imap_mailbox_close,mu_imap_close)
      (mu_imap_check): New functions.
      (_mu_close_handler): New function.
      * include/mailutils/sys/imap.h (mu_imap_client_state): Add new states.
      * libproto/imap/gencom.c: New file.
      * libproto/imap/close.c: New file.
      * libproto/imap/delete.c: New file.
      * libproto/imap/rename.c: New file.
      * libproto/imap/store.c: New file.
      * libproto/imap/unselect.c: New file.
      * libproto/imap/check.c: New file.
      * libproto/imap/expunge.c: New file.
      * libproto/imap/copy.c: New file.
      * libproto/imap/Makefile.am (libmu_imap_la_SOURCES): Add new files.
      
      * mu/imap.c: Implement new commands.
      * mu/shell.c (execute_line): Treat backslash as escape only before
      another backslash or double-quote.
      Sergey Poznyakoff authored
    • * imap4d/imap4d.h (silent_expunge): New global.
      * imap4d/sync.c (silent_expunge): New variable.
      (action): Suppress EXPUNGE responses if silent_expunge is set.
      * imap4d/close.c (imap4d_close0): Set silent_expunge before calling
      mu_mailbox_flush.
      
      * imap4d/tests/close-expunge.at: New test.
      * imap4d/tests/testsuite.at: Include close-expunge.at.
      * imap4d/tests/Makefile.am (TESTSUITE_AT): Add close-expunge.at.
      
      * imap4d/fetch.c (fetch_thunk): Emit BAD response if failed to parse
      message set.
      * imap4d/store.c (store_thunk): Emit BAD response if failed to parse
      flags.
      Sergey Poznyakoff authored
  9. 06 Dec, 2011 2 commits
    • Sergey Poznyakoff authored
    • * libmailutils/base/date.c (mu_scan_datetime): Handle optional
      blocks (%[ %| %], alternatives %( %| %), "any character"
      wildcards (%?) and strict character matches (%\C).  Return
      MU_ERR_FORMAT on errors in format string.
      Compute tm->tm_yday.
      * libmailutils/diag/errors (MU_ERR_FORMAT): New error code.
      * libmailutils/tests/scantime.c: Print yday.  Print input line with
      diagnostic messages.
      * libmailutils/tests/scantime.at: Add more tests.
      * include/mailutils/util.h (MU_DATETIME_RFC822): Split into two
      formats: MU_DATETIME_FORM_RFC822, for output formatting, and
      MU_DATETIME_SCAN_RFC822 for input scanning.  All uses changed.
      Sergey Poznyakoff authored
  10. 05 Dec, 2011 5 commits
    • * libmu_sieve/runtime.c (_mu_sv_instr_push)
      (_mu_sv_instr_pop): Use mu_list_push and mu_list_pop.
      * mail/alias.c (recursive_alias_expand): Likewise.
      Sergey Poznyakoff authored
    • * include/mailutils/list.h (mu_list_push)
      (mu_list_pop): New functions.
      * libmailutils/list/pop.c: New file.
      * libmailutils/list/push.c: New file.
      * libmailutils/list/Makefile.am (liblist_la_SOURCES): Add new files.
      * libmailutils/tests/list.at: Test LIFO access.
      * libmailutils/tests/listop.c: Implement push & pop.
      Sergey Poznyakoff authored
    • * imap4d/util.c (util_parse_internal_date): Use MU_DATETIME_INTERNALDATE
      format.
      * include/mailutils/util.h (MU_DATETIME_IMAP_SEARCH): Rename to
      MU_DATETIME_INTERNALDATE (previous incorrect definition removed).
      (MU_DATETIME_RFC822): New format.
      * libmailutils/address/address.c: Accessors for local_part and
      domain invalidate email field.
      (validate_email): New static function.
      (mu_address_sget_email): Reconstruct email, if necessary.
      (mu_address_format_string): Likewise.
      * libmailutils/base/date.c (mu_c_streamftime): Allow for %$ specifier
      for compatibility with mu_scan_datetime.
      (mu_scan_datetime): Use %$ to idicate optional end of string.
      * libmailutils/tests/scantime.at: Update.
      * libproto/imap/fetch.c (_fill_response): Use MU_DATETIME_RFC822 format.
      * mu/imap.c (fetch_response_printer): Print subject.
      Sergey Poznyakoff authored
    • * include/mailutils/stream.h (mu_fixed_memory_stream_create): New proto.
      * libmailutils/stream/memory_stream.c
      (mu_fixed_memory_stream_create): New function.
      
      * include/mailutils/util.h (mu_parse_imap_date_time)
      (mu_parse_ctime_date_time): Remove.
      (mu_scan_datetime): New proto.
      (mu_strftime): Remove const from the last arg.
      (MU_DATETIME_FROM,MU_DATETIME_IMAP)
      (MU_DATETIME_IMAP_SEARCH,MU_DATETIME_INTERNALDATE): New defines.
      * libmailutils/base/strftime.c: New file.
      * libmailutils/base/Makefile.am (libbase_la_SOURCES): Add strftime.c.
      * libmailutils/base/date.c (mu_scan_datetime): New function.
      * libmailutils/base/mutil.c (mu_strftime): Remove.
      
      * libmailutils/tests/scantime.at: New file.
      * libmailutils/tests/scantime.c: New file.
      * libmailutils/tests/Makefile.am (noinst_PROGRAMS): Add scantime.
      (TESTSUITE_AT): Add scantime.at.
      * libmailutils/tests/strftime.c (main): Call mu_set_program_name.
      * libmailutils/tests/testsuite.at: Include scantime.at
      
      * libmu_sieve/actions.c (mime_create_reason): Use mu_c_streamftime.
      
      * imap4d/fetch.c (_frt_internaldate): Use mu_scan_datetime.
      * imap4d/util.c (util_parse_internal_date): Likewise.
      * libmu_scm/mu_message.c (mu-message-get-envelope-date): Likewise.
      * libproto/imap/fetch.c (_date_mapper): Likewise.
      * mail/from.c (hdr_date): Use mu_scan_datetime.
      Sergey Poznyakoff authored
    • * include/mailutils/util.h (mu_c_streamftime): New prototype.
      * libmailutils/base/date.c (mu_c_streamftime): New function.
      * libmailutils/tests/.gitignore: Update.
      * libmailutils/tests/strftime.at: New test script.
      * libmailutils/tests/strftime.c: New test program.
      * libmailutils/tests/Makefile.am (noinst_PROGRAMS): Add strftime.
      (TESTSUITE_AT): Add strftime.at.
      * libmailutils/tests/testsuite.at: Include strftime.at.
      Sergey Poznyakoff authored
  11. 02 Dec, 2011 1 commit
  12. 01 Dec, 2011 3 commits
    • * mail/mailvar.c (_mailvar_symbol_to_array): Remove.
      (_mailvar_symbol_to_list): New function.
      (mailvar_make_array): Remove.
      (mailvar_list_copy): New function.
      (mailvar_iterator)<varptr,varcnt,pos>: Remove.
      <varlist,varitr>: New members.
      (mailvar_iterate_next): Use subordinate iterator.
      (mailvar_iterate_first): Likewise.
      (mailvar_print): Use mailvar_make_array.
      Sergey Poznyakoff authored
    • * mh/folder.c: Use mu_list_t instead of obstack to keep folder list.
      Sergey Poznyakoff authored
    • * include/mailutils/list.h (mu_list_sort): New proto.
      * libmailutils/list/sort.c: New file.
      * libmailutils/list/Makefile.am (liblist_la_SOURCES): Add sort.c
      * libmailutils/tests/listop.c: Implement the sort command.
      * libmailutils/tests/list.at: Test list sorting.
      Sergey Poznyakoff authored
  13. 30 Nov, 2011 2 commits
    • * include/mailutils/imap.h (mu_imap_fetch_body) <key>: Rename to section.
      <fields>: New member.
      * libproto/imap/fetch.c: Rewrite response item parser.
      * mu/imap.c: Improve fetch_response_printer
      Sergey Poznyakoff authored
    • * include/mailutils/list.h (mu_list_folder_t): New typedef.
      (mu_list_fold, mu_list_rfold): New functions.
      * libmailutils/list/fold.c: New file.
      * libmailutils/list/rfold.c: New file.
      * libmailutils/list/Makefile.am (liblist_la_SOURCES): Add fold.c and
      rfold.c
      * libmailutils/list/gmap.c (mu_list_gmap): Access list elements directly,
      instead of using iterators.
      * libmailutils/tests/list.at: Add test cases for list folding.
      * libmailutils/tests/listop.c: Add fold and rfold commands.
      Sergey Poznyakoff authored