Sorry, I'm just catching up with email backlog, so this email might be 
irrelevant by now, but just in case it isn't:

imap_fetch_header() is probably not a very good name because we already have 
imap_fetchheader() and I believe they might be a bit too similar in names (I don't 
know what the proposed function does, if it is good or not, I just don't like the 
name). IMAP extension has already got a good share of confusingly similar function 
names IMHO.

$.02

Vlad


Brad Fisher wrote:

>Here is my attempt at a unified diff against the current CVS.  Let me
>know if I need to do anything differently.
>
>-Brad
>
>----------------------  diff for php_imap.c -----------------------
>
>--- php_imap.c
>+++ php_imap.c  Tue Feb 26 23:00:58 2002
>@@ -91,6 +91,7 @@
>
>PHP_FE(imap_bodystruct,
>NULL)
>
>PHP_FE(imap_fetchbody,
>NULL)
>
>PHP_FE(imap_fetchheader,
>NULL)
>+
>PHP_FE(imap_fetch_header,
>NULL)
>
>PHP_FE(imap_fetchstructure,
>NULL)
>
>PHP_FE(imap_expunge,
>NULL)
>
>PHP_FE(imap_delete,
>NULL)
>@@ -2582,6 +2583,99 @@
>        RETVAL_STRING(mail_fetchheader_full(imap_le_struct->imap_stream,
>Z_LVAL_PP(msgno), NIL, NIL, (myargc == 3 ? Z_LVAL_PP(flags) : NIL)), 1);
>
> }
> /* }}} */
>+
>+
>+
>+/* {{{ proto string imap_fetch_header(int stream_id, int msg_no [,
>string section [, array lines [, int options]]])
>+   Get the (optionally filtered) header for a given section of a
>message */
>+PHP_FUNCTION(imap_fetch_header)
>+{
>+/*
>+   NOTE: You need to explicitly set FT_PEEK to not mark message as READ
>when calling this function.
>+   Empty strings are ignored in the lines array.
>+*/
>+        zval **streamind, **msgno, **sec = NIL, **lines = NIL, **flags,
>**tmp;
>+        int i, ind, ind_type, msgindex;
>+        pils *imap_le_struct;
>+        int myargc = ZEND_NUM_ARGS();
>+        HashPosition pos;
>+        STRINGLIST *cur_lines = NIL, *cur;
>+
>+        if (myargc < 2 ||
>+            myargc > 5 ||
>+            zend_get_parameters_ex(myargc, &streamind, &msgno, &sec,
>&lines, &flags) == FAILURE)
>+        {
>+                ZEND_WRONG_PARAM_COUNT();
>+        } //if
>+
>+        convert_to_long_ex(streamind);
>+        convert_to_long_ex(msgno);
>+
>+        if (myargc > 2) {
>+                convert_to_string_ex(sec);
>+        } //if
>+
>+        /* Convert the <lines> array to a STRINGLIST */
>+        if (myargc > 3) {
>+                convert_to_array_ex(lines);
>+
>+                zend_hash_internal_pointer_reset_ex((*lines)->value.ht,
>&pos);
>+                while
>(zend_hash_get_current_data_ex((*lines)->value.ht, (void **) &tmp, &pos)
>== SUCCESS) {
>+                        convert_to_string_ex(tmp);
>+
>+                        // Only add to the filter list if not an empty
>string
>+                        if (*Z_STRVAL_PP(tmp)) {
>+                                if (cur_lines) {
>+                                        cur->next =
>mail_newstringlist();
>+                                        cur = cur->next;
>+                                } else {
>+                                        cur_lines =
>mail_newstringlist();
>+                                        cur = cur_lines;
>+                                } //if
>+
>+                                cur->LSIZE = (*tmp)->value.str.len;
>+                                cur->LTEXT = (char*)
>cpystr((*tmp)->value.str.val);
>+                        } //if
>+
>+                        zend_hash_move_forward_ex((*lines)->value.ht,
>&pos);
>+                } //while
>+        } //if
>+
>+        if (myargc == 5) {
>+                convert_to_long_ex(flags);
>+        } //if
>+        ind = Z_LVAL_PP(streamind);
>+
>+        imap_le_struct = (pils *) zend_list_find(ind, &ind_type);
>+//      if (!imap_le_struct || !IS_STREAM(ind_type)) {
>+        if (!imap_le_struct) {
>+                php_error(E_WARNING, "Unable to find stream pointer");
>+                RETURN_FALSE;
>+        } //if
>+
>+        if ((myargc == 5) && (Z_LVAL_PP(flags) & FT_UID)) {
>+        /* This should be cached; if it causes an extra RTT to the
>+           IMAP server, then that's the price we pay for making sure
>+           we don't crash. */
>+                msgindex = mail_msgno(imap_le_struct->imap_stream,
>Z_LVAL_PP(msgno));
>+        } else {
>+                msgindex = Z_LVAL_PP(msgno);
>+        } //if
>+        if ((msgindex < 1) || ((unsigned) msgindex >
>imap_le_struct->imap_stream->nmsgs)) {
>+                php_error(E_WARNING, "Bad message number");
>+                RETURN_FALSE;
>+        } //if
>+
>+        /* Perform the header fetch */
>+        RETVAL_STRING(mail_fetch_header(imap_le_struct->imap_stream,
>Z_LVAL_PP(msgno), Z_STRVAL_PP(sec),
>+                                        cur_lines, NIL, myargc==5 ?
>Z_LVAL_PP(flags) : NIL), 1);
>+
>+        /* Free the temporary string list */
>+        mail_free_stringlist(&cur_lines);
>+} // PHP_FUNCTION(imap_fetch_header)
>+/* }}} */
>+
>+
>
> /* {{{ proto int imap_uid(int stream_id, int msg_no)
>    Get the unique message id associated with a standard sequential
>message number */
>
>
>----------------------  diff for php_imap.h -----------------------
>
>--- php_imap.h
>+++ php_imap.h  Tue Feb 26 23:01:17 2002
>@@ -149,6 +149,7 @@
> PHP_FUNCTION(imap_setflag_full);
> PHP_FUNCTION(imap_clearflag_full);
> PHP_FUNCTION(imap_sort);
>+PHP_FUNCTION(imap_fetch_header);
> PHP_FUNCTION(imap_fetchheader);
> PHP_FUNCTION(imap_fetchtext);
> PHP_FUNCTION(imap_uid);
>
>
>------------------------------------------------------------------------
>
>--- php_imap.c
>+++ php_imap.c  Tue Feb 26 23:00:58 2002
>@@ -91,6 +91,7 @@
>        PHP_FE(imap_bodystruct,                                                 NULL)
>        PHP_FE(imap_fetchbody,                                                  NULL)
>        PHP_FE(imap_fetchheader,                                                NULL)
>+       PHP_FE(imap_fetch_header,                                               NULL) 
>        PHP_FE(imap_fetchstructure,                                             NULL)
>        PHP_FE(imap_expunge,                                                    NULL)
>        PHP_FE(imap_delete,                                                           
>  NULL)
>@@ -2582,6 +2583,99 @@
>        RETVAL_STRING(mail_fetchheader_full(imap_le_struct->imap_stream, 
>Z_LVAL_PP(msgno), NIL, NIL, (myargc == 3 ? Z_LVAL_PP(flags) : NIL)), 1);
> }
> /* }}} */
>+
>+
>+
>+/* {{{ proto string imap_fetch_header(int stream_id, int msg_no [, string section [, 
>array lines [, int options]]])
>+   Get the (optionally filtered) header for a given section of a message */
>+PHP_FUNCTION(imap_fetch_header)
>+{
>+/*
>+   NOTE: You need to explicitly set FT_PEEK to not mark message as READ when calling 
>this function.
>+   Empty strings are ignored in the lines array.
>+*/
>+        zval **streamind, **msgno, **sec = NIL, **lines = NIL, **flags, **tmp;
>+        int i, ind, ind_type, msgindex;
>+        pils *imap_le_struct;
>+        int myargc = ZEND_NUM_ARGS();
>+        HashPosition pos;
>+        STRINGLIST *cur_lines = NIL, *cur;
>+
>+        if (myargc < 2 ||
>+            myargc > 5 ||
>+            zend_get_parameters_ex(myargc, &streamind, &msgno, &sec, &lines, &flags) 
>== FAILURE)
>+        {
>+                ZEND_WRONG_PARAM_COUNT();
>+        } //if
>+
>+        convert_to_long_ex(streamind);
>+        convert_to_long_ex(msgno);
>+
>+        if (myargc > 2) {
>+                convert_to_string_ex(sec);
>+        } //if
>+
>+        /* Convert the <lines> array to a STRINGLIST */
>+        if (myargc > 3) {
>+                convert_to_array_ex(lines);
>+
>+                zend_hash_internal_pointer_reset_ex((*lines)->value.ht, &pos);
>+                while (zend_hash_get_current_data_ex((*lines)->value.ht, (void **) 
>&tmp, &pos) == SUCCESS) {
>+                        convert_to_string_ex(tmp);
>+
>+                        // Only add to the filter list if not an empty string
>+                        if (*Z_STRVAL_PP(tmp)) {
>+                                if (cur_lines) {
>+                                        cur->next = mail_newstringlist();
>+                                        cur = cur->next;
>+                                } else {
>+                                        cur_lines = mail_newstringlist();
>+                                        cur = cur_lines;
>+                                } //if
>+
>+                                cur->LSIZE = (*tmp)->value.str.len;
>+                                cur->LTEXT = (char*) cpystr((*tmp)->value.str.val);
>+                        } //if
>+
>+                        zend_hash_move_forward_ex((*lines)->value.ht, &pos);
>+                } //while
>+        } //if
>+
>+        if (myargc == 5) {
>+                convert_to_long_ex(flags);
>+        } //if
>+        ind = Z_LVAL_PP(streamind);
>+
>+        imap_le_struct = (pils *) zend_list_find(ind, &ind_type);
>+//      if (!imap_le_struct || !IS_STREAM(ind_type)) {
>+        if (!imap_le_struct) {
>+                php_error(E_WARNING, "Unable to find stream pointer");
>+                RETURN_FALSE;
>+        } //if
>+
>+        if ((myargc == 5) && (Z_LVAL_PP(flags) & FT_UID)) {
>+        /* This should be cached; if it causes an extra RTT to the
>+           IMAP server, then that's the price we pay for making sure
>+           we don't crash. */
>+                msgindex = mail_msgno(imap_le_struct->imap_stream, Z_LVAL_PP(msgno));
>+        } else {
>+                msgindex = Z_LVAL_PP(msgno);
>+        } //if
>+        if ((msgindex < 1) || ((unsigned) msgindex > 
>imap_le_struct->imap_stream->nmsgs)) {
>+                php_error(E_WARNING, "Bad message number");
>+                RETURN_FALSE;
>+        } //if
>+
>+        /* Perform the header fetch */
>+        RETVAL_STRING(mail_fetch_header(imap_le_struct->imap_stream, 
>Z_LVAL_PP(msgno), Z_STRVAL_PP(sec),
>+                                        cur_lines, NIL, myargc==5 ?  
>Z_LVAL_PP(flags) : NIL), 1);
>+
>+        /* Free the temporary string list */
>+        mail_free_stringlist(&cur_lines);
>+} // PHP_FUNCTION(imap_fetch_header)
>+/* }}} */
>+
>+
> 
> /* {{{ proto int imap_uid(int stream_id, int msg_no)
>    Get the unique message id associated with a standard sequential message number */
>
>
>------------------------------------------------------------------------
>
>--- php_imap.h
>+++ php_imap.h  Tue Feb 26 23:01:17 2002
>@@ -149,6 +149,7 @@
> PHP_FUNCTION(imap_setflag_full);
> PHP_FUNCTION(imap_clearflag_full);
> PHP_FUNCTION(imap_sort);
>+PHP_FUNCTION(imap_fetch_header);
> PHP_FUNCTION(imap_fetchheader);
> PHP_FUNCTION(imap_fetchtext);
> PHP_FUNCTION(imap_uid);
>




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

Reply via email to