summaryrefslogtreecommitdiffabout
path: root/kmicromail/libetpan/generic/imapdriver_tools.c
Unidiff
Diffstat (limited to 'kmicromail/libetpan/generic/imapdriver_tools.c') (more/less context) (ignore whitespace changes)
-rw-r--r--kmicromail/libetpan/generic/imapdriver_tools.c38
1 files changed, 31 insertions, 7 deletions
diff --git a/kmicromail/libetpan/generic/imapdriver_tools.c b/kmicromail/libetpan/generic/imapdriver_tools.c
index 3d737f3..de4008f 100644
--- a/kmicromail/libetpan/generic/imapdriver_tools.c
+++ b/kmicromail/libetpan/generic/imapdriver_tools.c
@@ -3014,335 +3014,359 @@ uid_list_to_env_list(clist * fetch_result,
3014 MAILIMAP_FLAG_DELETED, 3014 MAILIMAP_FLAG_DELETED,
3015 MAILIMAP_FLAG_SEEN, 3015 MAILIMAP_FLAG_SEEN,
3016 MAILIMAP_FLAG_DRAFT, 3016 MAILIMAP_FLAG_DRAFT,
3017 MAILIMAP_FLAG_KEYWORD, 3017 MAILIMAP_FLAG_KEYWORD,
3018 MAILIMAP_FLAG_EXTENSION 3018 MAILIMAP_FLAG_EXTENSION
3019*/ 3019*/
3020 3020
3021static int imap_flags_to_flags(struct mailimap_msg_att_dynamic * att_dyn, 3021static int imap_flags_to_flags(struct mailimap_msg_att_dynamic * att_dyn,
3022 struct mail_flags ** result) 3022 struct mail_flags ** result)
3023{ 3023{
3024 struct mail_flags * flags; 3024 struct mail_flags * flags;
3025 clist * flag_list; 3025 clist * flag_list;
3026 clistiter * cur; 3026 clistiter * cur;
3027 3027
3028 flags = mail_flags_new_empty(); 3028 flags = mail_flags_new_empty();
3029 if (flags == NULL) 3029 if (flags == NULL)
3030 goto err; 3030 goto err;
3031 flags->fl_flags = 0; 3031 flags->fl_flags = 0;
3032 3032
3033 flag_list = att_dyn->att_list; 3033 flag_list = att_dyn->att_list;
3034 if (flag_list != NULL) { 3034 if (flag_list != NULL) {
3035 for(cur = clist_begin(flag_list) ; cur != NULL ; 3035 for(cur = clist_begin(flag_list) ; cur != NULL ;
3036 cur = clist_next(cur)) { 3036 cur = clist_next(cur)) {
3037 struct mailimap_flag_fetch * flag_fetch; 3037 struct mailimap_flag_fetch * flag_fetch;
3038 3038
3039 flag_fetch = clist_content(cur); 3039 flag_fetch = clist_content(cur);
3040 if (flag_fetch->fl_type == MAILIMAP_FLAG_FETCH_RECENT) 3040 if (flag_fetch->fl_type == MAILIMAP_FLAG_FETCH_RECENT)
3041 flags->fl_flags |= MAIL_FLAG_NEW; 3041 flags->fl_flags |= MAIL_FLAG_NEW;
3042 else { 3042 else {
3043 char * keyword; 3043 char * keyword;
3044 int r; 3044 int r;
3045 3045
3046 switch (flag_fetch->fl_flag->fl_type) { 3046 switch (flag_fetch->fl_flag->fl_type) {
3047 case MAILIMAP_FLAG_ANSWERED: 3047 case MAILIMAP_FLAG_ANSWERED:
3048 flags->fl_flags |= MAIL_FLAG_ANSWERED; 3048 flags->fl_flags |= MAIL_FLAG_ANSWERED;
3049 break; 3049 break;
3050 case MAILIMAP_FLAG_FLAGGED: 3050 case MAILIMAP_FLAG_FLAGGED:
3051 flags->fl_flags |= MAIL_FLAG_FLAGGED; 3051 flags->fl_flags |= MAIL_FLAG_FLAGGED;
3052 break; 3052 break;
3053 case MAILIMAP_FLAG_DELETED: 3053 case MAILIMAP_FLAG_DELETED:
3054 flags->fl_flags |= MAIL_FLAG_DELETED; 3054 flags->fl_flags |= MAIL_FLAG_DELETED;
3055 break; 3055 break;
3056 case MAILIMAP_FLAG_SEEN: 3056 case MAILIMAP_FLAG_SEEN:
3057 flags->fl_flags |= MAIL_FLAG_SEEN; 3057 flags->fl_flags |= MAIL_FLAG_SEEN;
3058 break; 3058 break;
3059 case MAILIMAP_FLAG_DRAFT: 3059 case MAILIMAP_FLAG_DRAFT:
3060 keyword = strdup("Draft"); 3060 keyword = strdup("Draft");
3061 if (keyword == NULL) 3061 if (keyword == NULL)
3062 goto free; 3062 goto free;
3063 r = clist_append(flags->fl_extension, keyword); 3063 r = clist_append(flags->fl_extension, keyword);
3064 if (r < 0) { 3064 if (r < 0) {
3065 free(keyword); 3065 free(keyword);
3066 goto free; 3066 goto free;
3067 } 3067 }
3068 break; 3068 break;
3069 case MAILIMAP_FLAG_KEYWORD: 3069 case MAILIMAP_FLAG_KEYWORD:
3070 if (strcasecmp(flag_fetch->fl_flag->fl_data.fl_keyword, 3070 if (strcasecmp(flag_fetch->fl_flag->fl_data.fl_keyword,
3071 "$Forwarded") == 0) { 3071 "$Forwarded") == 0) {
3072 flags->fl_flags |= MAIL_FLAG_FORWARDED; 3072 flags->fl_flags |= MAIL_FLAG_FORWARDED;
3073 } 3073 }
3074 else { 3074 else {
3075 keyword = strdup(flag_fetch->fl_flag->fl_data.fl_keyword); 3075 keyword = strdup(flag_fetch->fl_flag->fl_data.fl_keyword);
3076 if (keyword == NULL) 3076 if (keyword == NULL)
3077 goto free; 3077 goto free;
3078 r = clist_append(flags->fl_extension, keyword); 3078 r = clist_append(flags->fl_extension, keyword);
3079 if (r < 0) { 3079 if (r < 0) {
3080 free(keyword); 3080 free(keyword);
3081 goto free; 3081 goto free;
3082 } 3082 }
3083 } 3083 }
3084 break; 3084 break;
3085 case MAILIMAP_FLAG_EXTENSION: 3085 case MAILIMAP_FLAG_EXTENSION:
3086 /* do nothing */ 3086 /* do nothing */
3087 break; 3087 break;
3088 } 3088 }
3089 } 3089 }
3090 } 3090 }
3091 /* 3091 /*
3092 MAIL_FLAG_NEW was set for \Recent messages. 3092 MAIL_FLAG_NEW was set for \Recent messages.
3093 Correct this flag for \Seen messages by unsetting it. 3093 Correct this flag for \Seen messages by unsetting it.
3094 */ 3094 */
3095 if ((flags->fl_flags & MAIL_FLAG_SEEN) && (flags->fl_flags & MAIL_FLAG_NEW)) { 3095 if ((flags->fl_flags & MAIL_FLAG_SEEN) && (flags->fl_flags & MAIL_FLAG_NEW)) {
3096 flags->fl_flags &= ~MAIL_FLAG_NEW; 3096 flags->fl_flags &= ~MAIL_FLAG_NEW;
3097 } 3097 }
3098 } 3098 }
3099 3099
3100 * result = flags; 3100 * result = flags;
3101 3101
3102 return MAIL_NO_ERROR; 3102 return MAIL_NO_ERROR;
3103 3103
3104 free: 3104 free:
3105 mail_flags_free(flags); 3105 mail_flags_free(flags);
3106 err: 3106 err:
3107 return MAIL_ERROR_MEMORY; 3107 return MAIL_ERROR_MEMORY;
3108} 3108}
3109 3109
3110static int flags_to_imap_flags(struct mail_flags * flags, 3110int imap_flags_to_imap_flags(struct mail_flags * flags,
3111 struct mailimap_store_att_flags ** result) 3111 struct mailimap_flag_list ** result)
3112{ 3112{
3113 struct mailimap_flag * flag; 3113 struct mailimap_flag * flag;
3114 struct mailimap_flag_list * flag_list; 3114 struct mailimap_flag_list * flag_list;
3115 struct mailimap_store_att_flags * att_flags;
3116 int res; 3115 int res;
3117 clistiter * cur; 3116 clistiter * cur;
3118 int r; 3117 int r;
3119 3118
3120 flag_list = mailimap_flag_list_new_empty(); 3119 flag_list = mailimap_flag_list_new_empty();
3121 if (flag_list == NULL) { 3120 if (flag_list == NULL) {
3122 res = MAIL_ERROR_MEMORY; 3121 res = MAIL_ERROR_MEMORY;
3123 goto err; 3122 goto err;
3124 } 3123 }
3125 3124
3126 if ((flags->fl_flags & MAIL_FLAG_DELETED) != 0) { 3125 if ((flags->fl_flags & MAIL_FLAG_DELETED) != 0) {
3127 flag = mailimap_flag_new_deleted(); 3126 flag = mailimap_flag_new_deleted();
3128 if (flag == NULL) { 3127 if (flag == NULL) {
3129 res = MAIL_ERROR_MEMORY; 3128 res = MAIL_ERROR_MEMORY;
3130 goto free_flag_list; 3129 goto free_flag_list;
3131 } 3130 }
3132 r = mailimap_flag_list_add(flag_list, flag); 3131 r = mailimap_flag_list_add(flag_list, flag);
3133 if (r != MAILIMAP_NO_ERROR) { 3132 if (r != MAILIMAP_NO_ERROR) {
3134 mailimap_flag_free(flag); 3133 mailimap_flag_free(flag);
3135 res = MAIL_ERROR_MEMORY; 3134 res = MAIL_ERROR_MEMORY;
3136 goto free_flag_list; 3135 goto free_flag_list;
3137 } 3136 }
3138 } 3137 }
3139 3138
3140 if ((flags->fl_flags & MAIL_FLAG_FLAGGED) != 0) { 3139 if ((flags->fl_flags & MAIL_FLAG_FLAGGED) != 0) {
3141 flag = mailimap_flag_new_flagged(); 3140 flag = mailimap_flag_new_flagged();
3142 if (flag == NULL) { 3141 if (flag == NULL) {
3143 res = MAIL_ERROR_MEMORY; 3142 res = MAIL_ERROR_MEMORY;
3144 goto free_flag_list; 3143 goto free_flag_list;
3145 } 3144 }
3146 r = mailimap_flag_list_add(flag_list, flag); 3145 r = mailimap_flag_list_add(flag_list, flag);
3147 if (r != MAILIMAP_NO_ERROR) { 3146 if (r != MAILIMAP_NO_ERROR) {
3148 mailimap_flag_free(flag); 3147 mailimap_flag_free(flag);
3149 res = MAIL_ERROR_MEMORY; 3148 res = MAIL_ERROR_MEMORY;
3150 goto free_flag_list; 3149 goto free_flag_list;
3151 } 3150 }
3152 } 3151 }
3153 3152
3154 if ((flags->fl_flags & MAIL_FLAG_SEEN) != 0) { 3153 if ((flags->fl_flags & MAIL_FLAG_SEEN) != 0) {
3155 flag = mailimap_flag_new_seen(); 3154 flag = mailimap_flag_new_seen();
3156 if (flag == NULL) { 3155 if (flag == NULL) {
3157 res = MAIL_ERROR_MEMORY; 3156 res = MAIL_ERROR_MEMORY;
3158 goto free_flag_list; 3157 goto free_flag_list;
3159 } 3158 }
3160 r = mailimap_flag_list_add(flag_list, flag); 3159 r = mailimap_flag_list_add(flag_list, flag);
3161 if (r != MAILIMAP_NO_ERROR) { 3160 if (r != MAILIMAP_NO_ERROR) {
3162 res = MAIL_ERROR_MEMORY; 3161 res = MAIL_ERROR_MEMORY;
3163 goto free_flag_list; 3162 goto free_flag_list;
3164 } 3163 }
3165 } 3164 }
3166 3165
3167 if ((flags->fl_flags & MAIL_FLAG_ANSWERED) != 0) { 3166 if ((flags->fl_flags & MAIL_FLAG_ANSWERED) != 0) {
3168 flag = mailimap_flag_new_answered(); 3167 flag = mailimap_flag_new_answered();
3169 if (flag == NULL) { 3168 if (flag == NULL) {
3170 res = MAIL_ERROR_MEMORY; 3169 res = MAIL_ERROR_MEMORY;
3171 goto free_flag_list; 3170 goto free_flag_list;
3172 } 3171 }
3173 r = mailimap_flag_list_add(flag_list, flag); 3172 r = mailimap_flag_list_add(flag_list, flag);
3174 if (r != MAILIMAP_NO_ERROR) { 3173 if (r != MAILIMAP_NO_ERROR) {
3175 mailimap_flag_free(flag); 3174 mailimap_flag_free(flag);
3176 res = MAIL_ERROR_MEMORY; 3175 res = MAIL_ERROR_MEMORY;
3177 goto free_flag_list; 3176 goto free_flag_list;
3178 } 3177 }
3179 } 3178 }
3180 3179
3181 if ((flags->fl_flags & MAIL_FLAG_FORWARDED) != 0) { 3180 if ((flags->fl_flags & MAIL_FLAG_FORWARDED) != 0) {
3182 char * flag_str; 3181 char * flag_str;
3183 3182
3184 flag_str = strdup("$Forwarded"); 3183 flag_str = strdup("$Forwarded");
3185 if (flag_str == NULL) { 3184 if (flag_str == NULL) {
3186 res = MAIL_ERROR_MEMORY; 3185 res = MAIL_ERROR_MEMORY;
3187 goto free_flag_list; 3186 goto free_flag_list;
3188 } 3187 }
3189 flag = mailimap_flag_new_flag_keyword(flag_str); 3188 flag = mailimap_flag_new_flag_keyword(flag_str);
3190 if (flag == NULL) { 3189 if (flag == NULL) {
3191 free(flag_str); 3190 free(flag_str);
3192 res = MAIL_ERROR_MEMORY; 3191 res = MAIL_ERROR_MEMORY;
3193 goto free_flag_list; 3192 goto free_flag_list;
3194 } 3193 }
3195 r = mailimap_flag_list_add(flag_list, flag); 3194 r = mailimap_flag_list_add(flag_list, flag);
3196 if (r != MAILIMAP_NO_ERROR) { 3195 if (r != MAILIMAP_NO_ERROR) {
3197 mailimap_flag_free(flag); 3196 mailimap_flag_free(flag);
3198 res = MAIL_ERROR_MEMORY; 3197 res = MAIL_ERROR_MEMORY;
3199 goto free_flag_list; 3198 goto free_flag_list;
3200 } 3199 }
3201 } 3200 }
3202 3201
3203 for(cur = clist_begin(flags->fl_extension) ; cur != NULL ; 3202 for(cur = clist_begin(flags->fl_extension) ; cur != NULL ;
3204 cur = clist_next(cur)) { 3203 cur = clist_next(cur)) {
3205 char * flag_str; 3204 char * flag_str;
3206 3205
3207 flag_str = clist_content(cur); 3206 flag_str = clist_content(cur);
3208 3207
3209 if (strcasecmp(flag_str, "Draft") == 0) { 3208 if (strcasecmp(flag_str, "Draft") == 0) {
3210 flag = mailimap_flag_new_draft(); 3209 flag = mailimap_flag_new_draft();
3211 if (flag == NULL) { 3210 if (flag == NULL) {
3212 res = MAIL_ERROR_MEMORY; 3211 res = MAIL_ERROR_MEMORY;
3213 goto free_flag_list; 3212 goto free_flag_list;
3214 } 3213 }
3215 r = mailimap_flag_list_add(flag_list, flag); 3214 r = mailimap_flag_list_add(flag_list, flag);
3216 if (r != MAILIMAP_NO_ERROR) { 3215 if (r != MAILIMAP_NO_ERROR) {
3217 mailimap_flag_free(flag); 3216 mailimap_flag_free(flag);
3218 res = MAIL_ERROR_MEMORY; 3217 res = MAIL_ERROR_MEMORY;
3219 goto free_flag_list; 3218 goto free_flag_list;
3220 } 3219 }
3221 } 3220 }
3222 else { 3221 else {
3223 flag_str = strdup(flag_str); 3222 flag_str = strdup(flag_str);
3224 if (flag_str == NULL) { 3223 if (flag_str == NULL) {
3225 res = MAIL_ERROR_MEMORY; 3224 res = MAIL_ERROR_MEMORY;
3226 goto free_flag_list; 3225 goto free_flag_list;
3227 } 3226 }
3228 flag = mailimap_flag_new_flag_keyword(flag_str); 3227 flag = mailimap_flag_new_flag_keyword(flag_str);
3229 if (flag == NULL) { 3228 if (flag == NULL) {
3230 free(flag_str); 3229 free(flag_str);
3231 res = MAIL_ERROR_MEMORY; 3230 res = MAIL_ERROR_MEMORY;
3232 goto free_flag_list; 3231 goto free_flag_list;
3233 } 3232 }
3234 r = mailimap_flag_list_add(flag_list, flag); 3233 r = mailimap_flag_list_add(flag_list, flag);
3235 if (r != MAILIMAP_NO_ERROR) { 3234 if (r != MAILIMAP_NO_ERROR) {
3236 mailimap_flag_free(flag); 3235 mailimap_flag_free(flag);
3237 res = MAIL_ERROR_MEMORY; 3236 res = MAIL_ERROR_MEMORY;
3238 goto free_flag_list; 3237 goto free_flag_list;
3239 } 3238 }
3240 } 3239 }
3241 } 3240 }
3241
3242 * result = flag_list;
3243
3244 return MAIL_NO_ERROR;
3245
3246 free_flag_list:
3247 mailimap_flag_list_free(flag_list);
3248 err:
3249 return res;
3250}
3242 3251
3252static int flags_to_imap_flags(struct mail_flags * flags,
3253 struct mailimap_store_att_flags ** result)
3254{
3255 struct mailimap_flag_list * flag_list;
3256 struct mailimap_store_att_flags * att_flags;
3257 int res;
3258 int r;
3259
3260 r = imap_flags_to_imap_flags(flags,
3261 &flag_list);
3262 if (r != MAIL_NO_ERROR) {
3263 res = r;
3264 goto err;
3265 }
3266
3243 att_flags = mailimap_store_att_flags_new_set_flags_silent(flag_list); 3267 att_flags = mailimap_store_att_flags_new_set_flags_silent(flag_list);
3244 if (att_flags == NULL) { 3268 if (att_flags == NULL) {
3245 res = MAIL_ERROR_MEMORY; 3269 res = MAIL_ERROR_MEMORY;
3246 goto free_flag_list; 3270 goto free_flag_list;
3247 } 3271 }
3248 3272
3249 * result = att_flags; 3273 * result = att_flags;
3250 3274
3251 return MAIL_NO_ERROR; 3275 return MAIL_NO_ERROR;
3252 3276
3253 free_flag_list: 3277 free_flag_list:
3254 mailimap_flag_list_free(flag_list); 3278 mailimap_flag_list_free(flag_list);
3255 err: 3279 err:
3256 return res; 3280 return res;
3257} 3281}
3258 3282
3259 3283
3260static int 3284static int
3261imap_fetch_result_to_flags(clist * fetch_result, uint32_t index, 3285imap_fetch_result_to_flags(clist * fetch_result, uint32_t index,
3262 struct mail_flags ** result) 3286 struct mail_flags ** result)
3263{ 3287{
3264 clistiter * cur; 3288 clistiter * cur;
3265 int r; 3289 int r;
3266 3290
3267 for(cur = clist_begin(fetch_result) ; cur != NULL ; 3291 for(cur = clist_begin(fetch_result) ; cur != NULL ;
3268 cur = clist_next(cur)) { 3292 cur = clist_next(cur)) {
3269 struct mailimap_msg_att * msg_att; 3293 struct mailimap_msg_att * msg_att;
3270 clistiter * item_cur; 3294 clistiter * item_cur;
3271 uint32_t uid; 3295 uint32_t uid;
3272 struct mailimap_msg_att_dynamic * att_dyn; 3296 struct mailimap_msg_att_dynamic * att_dyn;
3273 3297
3274 msg_att = clist_content(cur); 3298 msg_att = clist_content(cur);
3275 3299
3276 uid = 0; 3300 uid = 0;
3277 att_dyn = NULL; 3301 att_dyn = NULL;
3278 3302
3279 for(item_cur = clist_begin(msg_att->att_list) ; item_cur != NULL ; 3303 for(item_cur = clist_begin(msg_att->att_list) ; item_cur != NULL ;
3280 item_cur = clist_next(item_cur)) { 3304 item_cur = clist_next(item_cur)) {
3281 struct mailimap_msg_att_item * item; 3305 struct mailimap_msg_att_item * item;
3282 3306
3283 item = clist_content(item_cur); 3307 item = clist_content(item_cur);
3284 3308
3285 if (item->att_type == MAILIMAP_MSG_ATT_ITEM_STATIC) { 3309 if (item->att_type == MAILIMAP_MSG_ATT_ITEM_STATIC) {
3286 switch (item->att_data.att_static->att_type) { 3310 switch (item->att_data.att_static->att_type) {
3287 case MAILIMAP_MSG_ATT_UID: 3311 case MAILIMAP_MSG_ATT_UID:
3288 uid = item->att_data.att_static->att_data.att_uid; 3312 uid = item->att_data.att_static->att_data.att_uid;
3289 break; 3313 break;
3290 } 3314 }
3291 } 3315 }
3292 else if (item->att_type == MAILIMAP_MSG_ATT_ITEM_DYNAMIC) { 3316 else if (item->att_type == MAILIMAP_MSG_ATT_ITEM_DYNAMIC) {
3293 if (att_dyn == NULL) { 3317 if (att_dyn == NULL) {
3294 att_dyn = item->att_data.att_dyn; 3318 att_dyn = item->att_data.att_dyn;
3295 } 3319 }
3296 } 3320 }
3297 } 3321 }
3298 3322
3299 if (uid != 0) { 3323 if (uid != 0) {
3300 if (uid == index) { 3324 if (uid == index) {
3301 struct mail_flags * flags; 3325 struct mail_flags * flags;
3302 3326
3303 if (att_dyn != NULL) { 3327 if (att_dyn != NULL) {
3304 r = imap_flags_to_flags(att_dyn, &flags); 3328 r = imap_flags_to_flags(att_dyn, &flags);
3305 3329
3306 if (r == MAIL_NO_ERROR) { 3330 if (r == MAIL_NO_ERROR) {
3307 * result = flags; 3331 * result = flags;
3308 return MAIL_NO_ERROR; 3332 return MAIL_NO_ERROR;
3309 } 3333 }
3310 } 3334 }
3311 } 3335 }
3312 } 3336 }
3313 } 3337 }
3314 3338
3315 return MAIL_ERROR_MSG_NOT_FOUND; 3339 return MAIL_ERROR_MSG_NOT_FOUND;
3316} 3340}
3317 3341
3318 3342
3319int imap_fetch_flags(mailimap * imap, 3343int imap_fetch_flags(mailimap * imap,
3320 uint32_t index, struct mail_flags ** result) 3344 uint32_t index, struct mail_flags ** result)
3321{ 3345{
3322 struct mailimap_fetch_att * fetch_att; 3346 struct mailimap_fetch_att * fetch_att;
3323 struct mailimap_fetch_type * fetch_type; 3347 struct mailimap_fetch_type * fetch_type;
3324 struct mailimap_set * set; 3348 struct mailimap_set * set;
3325 int r; 3349 int r;
3326 int res; 3350 int res;
3327 clist * fetch_result; 3351 clist * fetch_result;
3328 struct mail_flags * flags; 3352 struct mail_flags * flags;
3329 3353
3330 fetch_type = mailimap_fetch_type_new_fetch_att_list_empty(); 3354 fetch_type = mailimap_fetch_type_new_fetch_att_list_empty();
3331 if (fetch_type == NULL) { 3355 if (fetch_type == NULL) {
3332 res = MAIL_ERROR_MEMORY; 3356 res = MAIL_ERROR_MEMORY;
3333 goto err; 3357 goto err;
3334 } 3358 }
3335 3359
3336 fetch_att = mailimap_fetch_att_new_uid(); 3360 fetch_att = mailimap_fetch_att_new_uid();
3337 if (fetch_att == NULL) { 3361 if (fetch_att == NULL) {
3338 res = MAIL_ERROR_MEMORY; 3362 res = MAIL_ERROR_MEMORY;
3339 goto free_fetch_type; 3363 goto free_fetch_type;
3340 } 3364 }
3341 3365
3342 r = mailimap_fetch_type_new_fetch_att_list_add(fetch_type, fetch_att); 3366 r = mailimap_fetch_type_new_fetch_att_list_add(fetch_type, fetch_att);
3343 if (r != MAILIMAP_NO_ERROR) { 3367 if (r != MAILIMAP_NO_ERROR) {
3344 mailimap_fetch_att_free(fetch_att); 3368 mailimap_fetch_att_free(fetch_att);
3345 res = MAIL_ERROR_MEMORY; 3369 res = MAIL_ERROR_MEMORY;
3346 goto free_fetch_type; 3370 goto free_fetch_type;
3347 } 3371 }
3348 3372