hi,

Can you open a bug report and post a link to the patch please? So we
won't loose it in the ML archive. A test case would also be useful.

Cheers,

On Wed, Oct 21, 2009 at 12:10 AM, Nick Fortenberry <n...@mailtrust.com> wrote:
> Hey everyone,
>
> Jake Levitt and I created this patch which adds the option to set a message's 
> INTERNALDATE when appending it to a mail server using imap.  Any chance we 
> can get this included into the php 5.3 and 6 development branches?  The diff 
> below was done against the php-src/branches/PHP_5_3 branch.  If you guys need 
> me to apply the changes to a different branch or snapshot, please let me know.
>
> Here's the svn diff (done in my repo)... if you need something else please 
> let me know:
>
>
> Index: ext/imap/php_imap.c
> ===================================================================
> --- ext/imap/php_imap.c        (revision 3405)
> +++ ext/imap/php_imap.c        (revision 3406)
> @@ -41,6 +41,7 @@
> #include "ext/standard/info.h"
> #include "ext/standard/file.h"
> #include "ext/standard/php_smart_str.h"
> +#include "ext/pcre/php_pcre.h"
>
> #ifdef ERROR
> #undef ERROR
> @@ -118,6 +119,7 @@
>       ZEND_ARG_INFO(0, folder)
>       ZEND_ARG_INFO(0, message)
>       ZEND_ARG_INFO(0, options)
> +        ZEND_ARG_INFO(0, date)
> ZEND_END_ARG_INFO()
>
> ZEND_BEGIN_ARG_INFO_EX(arginfo_imap_num_msg, 0, 0, 1)
> @@ -1270,20 +1272,43 @@
> PHP_FUNCTION(imap_append)
> {
>       zval *streamind;
> -        char *folder, *message, *flags = NULL;
> -        int folder_len, message_len, flags_len = 0;
> +        char *folder, *message, *date = NULL, *flags = NULL;
> +        int folder_len, message_len, date_len = 0, flags_len = 0;
>       pils *imap_le_struct;
>       STRING st;
>
> -        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rss|s", 
> &streamind, &folder, &folder_len, &message, &message_len, &flags, &flags_len) 
> == FAILURE) {
> +        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rss|ss", 
> &streamind, &folder, &folder_len, &message, &message_len, &flags, &flags_len, 
> &date, &date_len) == FAILURE) {
>               return;
>       }
>
> +        char* regex = "/[ 
> 0-3][0-9]-((Jan)|(Feb)|(Mar)|(Apr)|(May)|(Jun)|(Jul)|(Aug)|(Sep)|(Oct)|(Nov)|(Dec))-[0-9]{4}
>  [0-2][0-9]:[0-5][0-9]:[0-5][0-9] [+-][0-9]{4}/";
> +        int regex_len = strlen(regex);
> +        pcre_cache_entry *pce;                                //Compiled 
> regex
> +        zval *subpats = NULL;                                //Parts (not 
> used)
> +        long regex_flags = 0;                                //Flags (not 
> used)
> +        long start_offset = 0;                                //Start offset 
> (not used)
> +        int global = 0;
> +
> +        if (date) {
> +                //Make sure the given date string matches the RFC specified 
> format
> +                if ((pce = pcre_get_compiled_regex_cache(regex, regex_len 
> TSRMLS_CC)) == NULL) {
> +                        RETURN_FALSE;
> +                }
> +
> +                php_pcre_match_impl(pce, date, date_len, return_value, 
> subpats, global,
> +                        0, regex_flags, start_offset TSRMLS_CC);
> +
> +                if (!Z_LVAL_P(return_value)) {
> +                        php_error_docref(NULL TSRMLS_CC, E_WARNING, 
> "internal date not correctly formatted");
> +                        date = NULL;
> +                }
> +        }
> +
>       ZEND_FETCH_RESOURCE(imap_le_struct, pils *, &streamind, -1, "imap", 
> le_imap);
>
>       INIT (&st, mail_string, (void *) message, message_len);
>
> -        if (mail_append_full(imap_le_struct->imap_stream, folder, (flags ? 
> flags : NIL), NIL, &st)) {
> +        if (mail_append_full(imap_le_struct->imap_stream, folder, (flags ? 
> flags : NIL), (date ? date : NIL), &st)) {
>               RETURN_TRUE;
>       } else {
>               RETURN_FALSE;
>
>
>
> Thanks,
>
> - Nick Fortenberry
>
>
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>



-- 
Pierre

http://blog.thepimp.net | http://www.libgd.org

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to