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