Skip to content

Commit d714ae8

Browse files
committedJun 18, 2023
ext/imap: Refactor imap_fetch_overview()
Reduce level of indentations by using early guards to return/continue
1 parent b1f24e3 commit d714ae8

File tree

1 file changed

+129
-120
lines changed

1 file changed

+129
-120
lines changed
 

‎ext/imap/php_imap.c

+129-120
Original file line numberDiff line numberDiff line change
@@ -3038,8 +3038,6 @@ PHP_FUNCTION(imap_fetch_overview)
30383038
zval *imap_conn_obj;
30393039
zend_string *sequence;
30403040
php_imap_object *imap_conn_struct;
3041-
zval myoverview;
3042-
zend_string *address;
30433041
zend_long status, flags = 0L;
30443042

30453043
if (zend_parse_parameters(ZEND_NUM_ARGS(), "OS|l", &imap_conn_obj, php_imap_ce, &sequence, &flags) == FAILURE) {
@@ -3053,136 +3051,147 @@ PHP_FUNCTION(imap_fetch_overview)
30533051
RETURN_THROWS();
30543052
}
30553053

3056-
array_init(return_value);
3057-
30583054
status = (flags & FT_UID)
30593055
? mail_uid_sequence(imap_conn_struct->imap_stream, (unsigned char*)ZSTR_VAL(sequence))
30603056
: mail_sequence(imap_conn_struct->imap_stream, (unsigned char*)ZSTR_VAL(sequence));
30613057

3062-
if (status) {
3058+
if (!status) {
3059+
RETURN_EMPTY_ARRAY();
3060+
}
3061+
3062+
array_init(return_value);
3063+
for (unsigned long i = 1; i <= imap_conn_struct->imap_stream->nmsgs; i++) {
30633064
MESSAGECACHE *elt;
30643065
ENVELOPE *env;
3065-
unsigned long i;
3066-
3067-
for (i = 1; i <= imap_conn_struct->imap_stream->nmsgs; i++) {
3068-
if (((elt = mail_elt (imap_conn_struct->imap_stream, i))->sequence) &&
3069-
(env = mail_fetch_structure (imap_conn_struct->imap_stream, i, NIL, NIL))) {
3070-
3071-
// TODO Use part _php_make_header_object function?
3072-
object_init(&myoverview);
3073-
if (env->subject) {
3074-
zend_update_property_string(
3075-
Z_OBJCE_P(&myoverview), Z_OBJ_P(&myoverview),
3076-
"subject", strlen("subject"),
3077-
env->subject
3078-
);
3079-
}
3080-
if (env->from) {
3081-
env->from->next=NULL;
3082-
address =_php_rfc822_write_address(env->from);
3083-
if (address) {
3084-
zend_update_property_str(
3085-
Z_OBJCE_P(&myoverview), Z_OBJ_P(&myoverview),
3086-
"from", strlen("from"),
3087-
address
3088-
);
3089-
zend_string_release(address);
3090-
}
3091-
}
3092-
if (env->to) {
3093-
env->to->next = NULL;
3094-
address = _php_rfc822_write_address(env->to);
3095-
if (address) {
3096-
zend_update_property_str(
3097-
Z_OBJCE_P(&myoverview), Z_OBJ_P(&myoverview),
3098-
"to", strlen("to"),
3099-
address
3100-
);
3101-
zend_string_release(address);
3102-
}
3103-
}
3104-
if (env->date) {
3105-
zend_update_property_string(
3106-
Z_OBJCE_P(&myoverview), Z_OBJ_P(&myoverview),
3107-
"date", strlen("date"),
3108-
(char*)env->date
3109-
);
3110-
}
3111-
if (env->message_id) {
3112-
zend_update_property_string(
3113-
Z_OBJCE_P(&myoverview), Z_OBJ_P(&myoverview),
3114-
"message_id", strlen("message_id"),
3115-
env->message_id
3116-
);
3117-
}
3118-
if (env->references) {
3119-
zend_update_property_string(
3120-
Z_OBJCE_P(&myoverview), Z_OBJ_P(&myoverview),
3121-
"references", strlen("references"),
3122-
env->references
3123-
);
3124-
}
3125-
if (env->in_reply_to) {
3126-
zend_update_property_string(
3127-
Z_OBJCE_P(&myoverview), Z_OBJ_P(&myoverview),
3128-
"in_reply_to", strlen("in_reply_to"),
3129-
env->in_reply_to
3130-
);
3131-
}
3132-
zend_update_property_long(
3133-
Z_OBJCE_P(&myoverview), Z_OBJ_P(&myoverview),
3134-
"size", strlen("size"),
3135-
elt->rfc822_size
3136-
);
3137-
zend_update_property_long(
3138-
Z_OBJCE_P(&myoverview), Z_OBJ_P(&myoverview),
3139-
"uid", strlen("uid"),
3140-
mail_uid(imap_conn_struct->imap_stream, i)
3141-
);
3142-
zend_update_property_long(
3143-
Z_OBJCE_P(&myoverview), Z_OBJ_P(&myoverview),
3144-
"msgno", strlen("msgno"),
3145-
i
3146-
);
3147-
zend_update_property_long(
3148-
Z_OBJCE_P(&myoverview), Z_OBJ_P(&myoverview),
3149-
"recent", strlen("recent"),
3150-
elt->recent
3151-
);
3152-
zend_update_property_long(
3153-
Z_OBJCE_P(&myoverview), Z_OBJ_P(&myoverview),
3154-
"flagged", strlen("flagged"),
3155-
elt->flagged
3156-
);
3157-
zend_update_property_long(
3158-
Z_OBJCE_P(&myoverview), Z_OBJ_P(&myoverview),
3159-
"answered", strlen("answered"),
3160-
elt->answered
3161-
);
3162-
zend_update_property_long(
3163-
Z_OBJCE_P(&myoverview), Z_OBJ_P(&myoverview),
3164-
"deleted", strlen("deleted"),
3165-
elt->deleted
3166-
);
3167-
zend_update_property_long(
3168-
Z_OBJCE_P(&myoverview), Z_OBJ_P(&myoverview),
3169-
"seen", strlen("seen"),
3170-
elt->seen
3171-
);
3172-
zend_update_property_long(
3066+
3067+
elt = mail_elt(imap_conn_struct->imap_stream, i);
3068+
if (!elt->sequence) {
3069+
continue;
3070+
}
3071+
3072+
env = mail_fetch_structure(imap_conn_struct->imap_stream, i, NIL, NIL);
3073+
if (!env) {
3074+
continue;
3075+
}
3076+
3077+
// TODO Use part _php_make_header_object function?
3078+
zval myoverview;
3079+
object_init(&myoverview);
3080+
if (env->subject) {
3081+
zend_update_property_string(
3082+
Z_OBJCE_P(&myoverview), Z_OBJ_P(&myoverview),
3083+
"subject", strlen("subject"),
3084+
env->subject
3085+
);
3086+
}
3087+
if (env->from) {
3088+
zend_string *from_address;
3089+
3090+
env->from->next=NULL;
3091+
from_address =_php_rfc822_write_address(env->from);
3092+
if (from_address) {
3093+
zend_update_property_str(
31733094
Z_OBJCE_P(&myoverview), Z_OBJ_P(&myoverview),
3174-
"draft", strlen("draft"),
3175-
elt->draft
3095+
"from", strlen("from"),
3096+
from_address
31763097
);
3177-
zend_update_property_long(
3098+
zend_string_release(from_address);
3099+
}
3100+
}
3101+
if (env->to) {
3102+
zend_string *to_address;
3103+
3104+
env->to->next = NULL;
3105+
to_address = _php_rfc822_write_address(env->to);
3106+
if (to_address) {
3107+
zend_update_property_str(
31783108
Z_OBJCE_P(&myoverview), Z_OBJ_P(&myoverview),
3179-
"udate", strlen("udate"),
3180-
mail_longdate(elt)
3109+
"to", strlen("to"),
3110+
to_address
31813111
);
3182-
3183-
zend_hash_next_index_insert_new(Z_ARR_P(return_value), &myoverview);
3112+
zend_string_release(to_address);
31843113
}
31853114
}
3115+
if (env->date) {
3116+
zend_update_property_string(
3117+
Z_OBJCE_P(&myoverview), Z_OBJ_P(&myoverview),
3118+
"date", strlen("date"),
3119+
(char*)env->date
3120+
);
3121+
}
3122+
if (env->message_id) {
3123+
zend_update_property_string(
3124+
Z_OBJCE_P(&myoverview), Z_OBJ_P(&myoverview),
3125+
"message_id", strlen("message_id"),
3126+
env->message_id
3127+
);
3128+
}
3129+
if (env->references) {
3130+
zend_update_property_string(
3131+
Z_OBJCE_P(&myoverview), Z_OBJ_P(&myoverview),
3132+
"references", strlen("references"),
3133+
env->references
3134+
);
3135+
}
3136+
if (env->in_reply_to) {
3137+
zend_update_property_string(
3138+
Z_OBJCE_P(&myoverview), Z_OBJ_P(&myoverview),
3139+
"in_reply_to", strlen("in_reply_to"),
3140+
env->in_reply_to
3141+
);
3142+
}
3143+
zend_update_property_long(
3144+
Z_OBJCE_P(&myoverview), Z_OBJ_P(&myoverview),
3145+
"size", strlen("size"),
3146+
elt->rfc822_size
3147+
);
3148+
zend_update_property_long(
3149+
Z_OBJCE_P(&myoverview), Z_OBJ_P(&myoverview),
3150+
"uid", strlen("uid"),
3151+
mail_uid(imap_conn_struct->imap_stream, i)
3152+
);
3153+
zend_update_property_long(
3154+
Z_OBJCE_P(&myoverview), Z_OBJ_P(&myoverview),
3155+
"msgno", strlen("msgno"),
3156+
i
3157+
);
3158+
zend_update_property_long(
3159+
Z_OBJCE_P(&myoverview), Z_OBJ_P(&myoverview),
3160+
"recent", strlen("recent"),
3161+
elt->recent
3162+
);
3163+
zend_update_property_long(
3164+
Z_OBJCE_P(&myoverview), Z_OBJ_P(&myoverview),
3165+
"flagged", strlen("flagged"),
3166+
elt->flagged
3167+
);
3168+
zend_update_property_long(
3169+
Z_OBJCE_P(&myoverview), Z_OBJ_P(&myoverview),
3170+
"answered", strlen("answered"),
3171+
elt->answered
3172+
);
3173+
zend_update_property_long(
3174+
Z_OBJCE_P(&myoverview), Z_OBJ_P(&myoverview),
3175+
"deleted", strlen("deleted"),
3176+
elt->deleted
3177+
);
3178+
zend_update_property_long(
3179+
Z_OBJCE_P(&myoverview), Z_OBJ_P(&myoverview),
3180+
"seen", strlen("seen"),
3181+
elt->seen
3182+
);
3183+
zend_update_property_long(
3184+
Z_OBJCE_P(&myoverview), Z_OBJ_P(&myoverview),
3185+
"draft", strlen("draft"),
3186+
elt->draft
3187+
);
3188+
zend_update_property_long(
3189+
Z_OBJCE_P(&myoverview), Z_OBJ_P(&myoverview),
3190+
"udate", strlen("udate"),
3191+
mail_longdate(elt)
3192+
);
3193+
3194+
zend_hash_next_index_insert_new(Z_ARR_P(return_value), &myoverview);
31863195
}
31873196
}
31883197
/* }}} */

0 commit comments

Comments
 (0)
Please sign in to comment.