Changeset 3526

Show
Ignore:
Timestamp:
03/26/08 13:47:40
Author:
jdapena
Message:

* Replace old tny_header_get_ api for strings with

tny_header_dup_ api. This should be a bit better for
being thread safe. Also modified code using this. The
goal is being able to do the string copy in a lock.

* Now moving a folder copies all the cached messages,

but not the summaries, to avoid crashes trying to
reuse the old summary.

This is a major API change.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/ChangeLog

    r3522 r3526  
     12008-03-26  Jose Dapena Paz  <jdapena@igalia.com> 
     2 
     3        * Replace old tny_header_get_ api for strings with 
     4        tny_header_dup_ api. This should be a bit better for 
     5        being thread safe. Also modified code using this. The 
     6        goal is being able to do the string copy in a lock. 
     7 
     8        * Now moving a folder copies all the cached messages, 
     9        but not the summaries, to avoid crashes trying to 
     10        reuse the old summary. 
     11 
     12        This is a major API change. 
     13 
    1142008-03-25  Alberto Garcia Gonzalez <agarcia@igalia.com> 
    215 
  • trunk/bindings/vala/libtinymail-1.0/libtinymail-1.0.gi

    r3268 r3526  
    21542154                                <interface name="GObject"/> 
    21552155                        </requires> 
    2156                         <method name="get_bcc" symbol="tny_header_get_bcc"> 
    2157                                 <return-type type="gchar*"/> 
    2158                                 <parameters> 
    2159                                         <parameter name="self" type="TnyHeader*"/> 
    2160                                 </parameters> 
    2161                         </method> 
    2162                         <method name="get_cc" symbol="tny_header_get_cc"> 
     2156                        <method name="dup_bcc" symbol="tny_header_dup_bcc"> 
     2157                                <return-type type="gchar*"/> 
     2158                                <parameters> 
     2159                                        <parameter name="self" type="TnyHeader*"/> 
     2160                                </parameters> 
     2161                        </method> 
     2162                        <method name="dup_cc" symbol="tny_header_dup_cc"> 
    21632163                                <return-type type="gchar*"/> 
    21642164                                <parameters> 
     
    21902190                                </parameters> 
    21912191                        </method> 
    2192                         <method name="get_from" symbol="tny_header_get_from"> 
    2193                                 <return-type type="gchar*"/> 
    2194                                 <parameters> 
    2195                                         <parameter name="self" type="TnyHeader*"/> 
    2196                                 </parameters> 
    2197                         </method> 
    2198                         <method name="get_message_id" symbol="tny_header_get_message_id"> 
     2192                        <method name="dup_from" symbol="tny_header_dup_from"> 
     2193                                <return-type type="gchar*"/> 
     2194                                <parameters> 
     2195                                        <parameter name="self" type="TnyHeader*"/> 
     2196                                </parameters> 
     2197                        </method> 
     2198                        <method name="dup_message_id" symbol="tny_header_dup_message_id"> 
    21992199                                <return-type type="gchar*"/> 
    22002200                                <parameters> 
     
    22142214                                </parameters> 
    22152215                        </method> 
    2216                         <method name="get_replyto" symbol="tny_header_get_replyto"> 
    2217                                 <return-type type="gchar*"/> 
    2218                                 <parameters> 
    2219                                         <parameter name="self" type="TnyHeader*"/> 
    2220                                 </parameters> 
    2221                         </method> 
    2222                         <method name="get_subject" symbol="tny_header_get_subject"> 
    2223                                 <return-type type="gchar*"/> 
    2224                                 <parameters> 
    2225                                         <parameter name="self" type="TnyHeader*"/> 
    2226                                 </parameters> 
    2227                         </method> 
    2228                         <method name="get_to" symbol="tny_header_get_to"> 
    2229                                 <return-type type="gchar*"/> 
    2230                                 <parameters> 
    2231                                         <parameter name="self" type="TnyHeader*"/> 
    2232                                 </parameters> 
    2233                         </method> 
    2234                         <method name="get_uid" symbol="tny_header_get_uid"> 
     2216                        <method name="dup_replyto" symbol="tny_header_dup_replyto"> 
     2217                                <return-type type="gchar*"/> 
     2218                                <parameters> 
     2219                                        <parameter name="self" type="TnyHeader*"/> 
     2220                                </parameters> 
     2221                        </method> 
     2222                        <method name="dup_subject" symbol="tny_header_dup_subject"> 
     2223                                <return-type type="gchar*"/> 
     2224                                <parameters> 
     2225                                        <parameter name="self" type="TnyHeader*"/> 
     2226                                </parameters> 
     2227                        </method> 
     2228                        <method name="dup_to" symbol="tny_header_dup_to"> 
     2229                                <return-type type="gchar*"/> 
     2230                                <parameters> 
     2231                                        <parameter name="self" type="TnyHeader*"/> 
     2232                                </parameters> 
     2233                        </method> 
     2234                        <method name="dup_uid" symbol="tny_header_dup_uid"> 
    22352235                                <return-type type="gchar*"/> 
    22362236                                <parameters> 
     
    23012301                                </parameters> 
    23022302                        </method> 
    2303                         <vfunc name="get_bcc_func"> 
    2304                                 <return-type type="gchar*"/> 
    2305                                 <parameters> 
    2306                                         <parameter name="self" type="TnyHeader*"/> 
    2307                                 </parameters> 
    2308                         </vfunc> 
    2309                         <vfunc name="get_cc_func"> 
     2303                        <vfunc name="dup_bcc_func"> 
     2304                                <return-type type="gchar*"/> 
     2305                                <parameters> 
     2306                                        <parameter name="self" type="TnyHeader*"/> 
     2307                                </parameters> 
     2308                        </vfunc> 
     2309                        <vfunc name="dup_cc_func"> 
    23102310                                <return-type type="gchar*"/> 
    23112311                                <parameters> 
     
    23372337                                </parameters> 
    23382338                        </vfunc> 
    2339                         <vfunc name="get_from_func"> 
    2340                                 <return-type type="gchar*"/> 
    2341                                 <parameters> 
    2342                                         <parameter name="self" type="TnyHeader*"/> 
    2343                                 </parameters> 
    2344                         </vfunc> 
    2345                         <vfunc name="get_message_id_func"> 
     2339                        <vfunc name="dup_from_func"> 
     2340                                <return-type type="gchar*"/> 
     2341                                <parameters> 
     2342                                        <parameter name="self" type="TnyHeader*"/> 
     2343                                </parameters> 
     2344                        </vfunc> 
     2345                        <vfunc name="dup_message_id_func"> 
    23462346                                <return-type type="gchar*"/> 
    23472347                                <parameters> 
     
    23552355                                </parameters> 
    23562356                        </vfunc> 
    2357                         <vfunc name="get_replyto_func"> 
    2358                                 <return-type type="gchar*"/> 
    2359                                 <parameters> 
    2360                                         <parameter name="self" type="TnyHeader*"/> 
    2361                                 </parameters> 
    2362                         </vfunc> 
    2363                         <vfunc name="get_subject_func"> 
    2364                                 <return-type type="gchar*"/> 
    2365                                 <parameters> 
    2366                                         <parameter name="self" type="TnyHeader*"/> 
    2367                                 </parameters> 
    2368                         </vfunc> 
    2369                         <vfunc name="get_to_func"> 
    2370                                 <return-type type="gchar*"/> 
    2371                                 <parameters> 
    2372                                         <parameter name="self" type="TnyHeader*"/> 
    2373                                 </parameters> 
    2374                         </vfunc> 
    2375                         <vfunc name="get_uid_func"> 
     2357                        <vfunc name="dup_replyto_func"> 
     2358                                <return-type type="gchar*"/> 
     2359                                <parameters> 
     2360                                        <parameter name="self" type="TnyHeader*"/> 
     2361                                </parameters> 
     2362                        </vfunc> 
     2363                        <vfunc name="dup_subject_func"> 
     2364                                <return-type type="gchar*"/> 
     2365                                <parameters> 
     2366                                        <parameter name="self" type="TnyHeader*"/> 
     2367                                </parameters> 
     2368                        </vfunc> 
     2369                        <vfunc name="dup_to_func"> 
     2370                                <return-type type="gchar*"/> 
     2371                                <parameters> 
     2372                                        <parameter name="self" type="TnyHeader*"/> 
     2373                                </parameters> 
     2374                        </vfunc> 
     2375                        <vfunc name="dup_uid_func"> 
    23762376                                <return-type type="gchar*"/> 
    23772377                                <parameters> 
  • trunk/libtinymail-camel/camel-lite/camel/camel-folder-summary.c

    r3524 r3526  
    40354035} 
    40364036 
     4037void 
     4038camel_folder_summary_lock () 
     4039{ 
     4040        g_static_rec_mutex_lock (&global_lock);  
     4041} 
     4042 
     4043void 
     4044camel_folder_summary_unlock () 
     4045{ 
     4046        g_static_rec_mutex_unlock (&global_lock);        
     4047} 
    40374048 
    40384049static void 
  • trunk/libtinymail-camel/camel-lite/camel/camel-folder-summary.h

    r3301 r3526  
    401401#endif 
    402402 
     403void camel_folder_summary_lock (); 
     404void camel_folder_summary_unlock (); 
     405 
    403406G_END_DECLS 
    404407 
  • trunk/libtinymail-camel/camel-lite/camel/camel-mime-part-utils.c

    r3520 r3526  
    6161        GByteArray *buffer = NULL; 
    6262        CamelStream *stream; 
    63         off_t start, end; 
     63        uint start, end; 
    6464        int fd = -1; 
    6565        size_t len; 
     
    7373                stream = NULL; 
    7474 
    75         if ((stream || fd != -1) && (start = camel_mime_parser_tell (mp)) != -1) { 
     75        start = camel_mime_parser_tell (mp); 
     76        if ((stream || fd != -1) && (start != -1)) { 
    7677                /* we can keep content on disk */ 
    7778        } else { 
  • trunk/libtinymail-camel/camel-lite/camel/providers/imap/camel-imap-store.c

    r3498 r3526  
    30333033} 
    30343034 
     3035static void 
     3036move_cache (const gchar *oldpath, const gchar *newpath) 
     3037{ 
     3038        GDir *dir; 
     3039 
     3040        dir = g_dir_open (oldpath, 0, NULL); 
     3041        if (dir) { 
     3042                const gchar *file; 
     3043                gchar *new_summary; 
     3044 
     3045                g_mkdir (newpath, S_IRWXU); 
     3046 
     3047                while (file = g_dir_read_name (dir)) { 
     3048                        gchar *old_fullname; 
     3049                        gchar *new_fullname; 
     3050                        old_fullname = g_strdup_printf ("%s/%s", oldpath, file); 
     3051                        new_fullname = g_strdup_printf ("%s/%s", newpath, file); 
     3052                        if (g_file_test (old_fullname, G_FILE_TEST_IS_DIR)) { 
     3053                                move_cache (old_fullname, new_fullname); 
     3054                        } else if (g_file_test (old_fullname, G_FILE_TEST_EXISTS)) { 
     3055                                /* we don't move the summary */ 
     3056                                if (strcmp (old_fullname, "summary.mmap")!=0) 
     3057                                        g_rename (old_fullname, new_fullname); 
     3058                        } 
     3059 
     3060                        g_free (old_fullname); 
     3061                        g_free (new_fullname); 
     3062                } 
     3063                g_dir_close (dir); 
     3064                new_summary = g_strdup_printf ("%s/summary.mmap", newpath); 
     3065                if (g_file_test (new_summary, G_FILE_TEST_EXISTS)) { 
     3066                        g_unlink (new_summary); 
     3067                } 
     3068        } 
     3069} 
    30353070 
    30363071static void 
     
    31243159        g_free (tpath); 
    31253160 
    3126         if (g_rename (oldpath, newpath) == -1) { 
    3127                 g_warning ("Could not rename message cache '%s' to '%s': %s: cache reset", 
    3128                            oldpath, newpath, strerror (errno)); 
    3129         } 
     3161        move_cache (oldpath, newpath); 
    31303162 
    31313163        g_free (oldpath); 
  • trunk/libtinymail-camel/tny-camel-bs-msg-header.c

    r3304 r3526  
    3737 
    3838 
    39 static const gchar* 
    40 tny_camel_bs_msg_header_get_replyto (TnyHeader *self) 
    41 { 
    42         TnyCamelBsMsgHeader *me = TNY_CAMEL_BS_MSG_HEADER (self); 
    43         return me->envelope->reply_to
     39static gchar* 
     40tny_camel_bs_msg_header_dup_replyto (TnyHeader *self) 
     41{ 
     42        TnyCamelBsMsgHeader *me = TNY_CAMEL_BS_MSG_HEADER (self); 
     43        return g_strdup (me->envelope->reply_to)
    4444} 
    4545 
     
    8989 
    9090 
    91 static const gchar* 
    92 tny_camel_bs_msg_header_get_cc (TnyHeader *self) 
    93 { 
    94         TnyCamelBsMsgHeader *me = TNY_CAMEL_BS_MSG_HEADER (self); 
    95         return me->envelope->cc
    96 } 
    97  
    98 static const gchar* 
    99 tny_camel_bs_msg_header_get_bcc (TnyHeader *self) 
    100 { 
    101         TnyCamelBsMsgHeader *me = TNY_CAMEL_BS_MSG_HEADER (self); 
    102         return me->envelope->bcc
     91static gchar* 
     92tny_camel_bs_msg_header_dup_cc (TnyHeader *self) 
     93{ 
     94        TnyCamelBsMsgHeader *me = TNY_CAMEL_BS_MSG_HEADER (self); 
     95        return g_strdup (me->envelope->cc)
     96} 
     97 
     98static gchar* 
     99tny_camel_bs_msg_header_dup_bcc (TnyHeader *self) 
     100{ 
     101        TnyCamelBsMsgHeader *me = TNY_CAMEL_BS_MSG_HEADER (self); 
     102        return g_strdup (me->envelope->bcc)
    103103} 
    104104 
     
    137137} 
    138138 
    139 static const gchar* 
    140 tny_camel_bs_msg_header_get_from (TnyHeader *self) 
    141 { 
    142         TnyCamelBsMsgHeader *me = TNY_CAMEL_BS_MSG_HEADER (self); 
    143         return me->envelope->from
    144 } 
    145  
    146 static const gchar* 
    147 tny_camel_bs_msg_header_get_subject (TnyHeader *self) 
    148 { 
    149         TnyCamelBsMsgHeader *me = TNY_CAMEL_BS_MSG_HEADER (self); 
    150         return me->envelope->subject
    151 } 
    152  
    153  
    154 static const gchar* 
    155 tny_camel_bs_msg_header_get_to (TnyHeader *self) 
    156 { 
    157         TnyCamelBsMsgHeader *me = TNY_CAMEL_BS_MSG_HEADER (self); 
    158         return me->envelope->to
    159 } 
    160  
    161 static const gchar* 
    162 tny_camel_bs_msg_header_get_message_id (TnyHeader *self) 
    163 { 
    164         TnyCamelBsMsgHeader *me = TNY_CAMEL_BS_MSG_HEADER (self); 
    165         return me->envelope->message_id
     139static gchar* 
     140tny_camel_bs_msg_header_dup_from (TnyHeader *self) 
     141{ 
     142        TnyCamelBsMsgHeader *me = TNY_CAMEL_BS_MSG_HEADER (self); 
     143        return g_strdup (me->envelope->from)
     144} 
     145 
     146static gchar* 
     147tny_camel_bs_msg_header_dup_subject (TnyHeader *self) 
     148{ 
     149        TnyCamelBsMsgHeader *me = TNY_CAMEL_BS_MSG_HEADER (self); 
     150        return g_strdup (me->envelope->subject)
     151} 
     152 
     153 
     154static gchar* 
     155tny_camel_bs_msg_header_dup_to (TnyHeader *self) 
     156{ 
     157        TnyCamelBsMsgHeader *me = TNY_CAMEL_BS_MSG_HEADER (self); 
     158        return g_strdup (me->envelope->to)
     159} 
     160 
     161static gchar* 
     162tny_camel_bs_msg_header_dup_message_id (TnyHeader *self) 
     163{ 
     164        TnyCamelBsMsgHeader *me = TNY_CAMEL_BS_MSG_HEADER (self); 
     165        return g_strdup (me->envelope->message_id)
    166166} 
    167167 
     
    175175} 
    176176 
    177 static const gchar* 
    178 tny_camel_bs_msg_header_get_uid (TnyHeader *self) 
    179 { 
    180         g_warning ("tny_header_get_uid: This is a header instance for a RFC822 message. " 
     177static gchar* 
     178tny_camel_bs_msg_header_dup_uid (TnyHeader *self) 
     179{ 
     180        g_warning ("tny_header_dup_uid: This is a header instance for a RFC822 message. " 
    181181                "The uid of it is therefore not available. This indicates a problem " 
    182182                "in the software."); 
     
    215215        TnyHeaderIface *klass = (TnyHeaderIface *)g; 
    216216 
    217         klass->get_from= tny_camel_bs_msg_header_get_from; 
    218         klass->get_message_id= tny_camel_bs_msg_header_get_message_id; 
     217        klass->dup_from= tny_camel_bs_msg_header_dup_from; 
     218        klass->dup_message_id= tny_camel_bs_msg_header_dup_message_id; 
    219219        klass->get_message_size= tny_camel_bs_msg_header_get_message_size; 
    220         klass->get_to= tny_camel_bs_msg_header_get_to; 
    221         klass->get_subject= tny_camel_bs_msg_header_get_subject; 
     220        klass->dup_to= tny_camel_bs_msg_header_dup_to; 
     221        klass->dup_subject= tny_camel_bs_msg_header_dup_subject; 
    222222        klass->get_date_received= tny_camel_bs_msg_header_get_date_received; 
    223223        klass->get_date_sent= tny_camel_bs_msg_header_get_date_sent; 
    224         klass->get_cc= tny_camel_bs_msg_header_get_cc; 
    225         klass->get_bcc= tny_camel_bs_msg_header_get_bcc; 
    226         klass->get_replyto= tny_camel_bs_msg_header_get_replyto; 
    227         klass->get_uid= tny_camel_bs_msg_header_get_uid; 
     224        klass->dup_cc= tny_camel_bs_msg_header_dup_cc; 
     225        klass->dup_bcc= tny_camel_bs_msg_header_dup_bcc; 
     226        klass->dup_replyto= tny_camel_bs_msg_header_dup_replyto; 
     227        klass->dup_uid= tny_camel_bs_msg_header_dup_uid; 
    228228        klass->get_folder= tny_camel_bs_msg_header_get_folder; 
    229229        klass->set_bcc= tny_camel_bs_msg_header_set_bcc; 
  • trunk/libtinymail-camel/tny-camel-bs-msg-receive-strategy.c

    r3304 r3526  
    120120        CamelFolder *cfolder = _tny_camel_folder_get_camel_folder (TNY_CAMEL_FOLDER (folder)); 
    121121 
    122         uid = g_strdup (tny_header_get_uid (TNY_HEADER (header))); 
     122        uid = tny_header_dup_uid (TNY_HEADER (header)); 
    123123        structure_str = camel_folder_fetch_structure (cfolder, (const char *) uid, &ex); 
    124124 
  • trunk/libtinymail-camel/tny-camel-bs-msg.c

    r3304 r3526  
    112112        if (priv->folder) { 
    113113                TnyHeader *header = tny_msg_get_header (self); 
    114                 const gchar *uid = tny_header_get_uid (header); 
     114                gchar *uid = tny_header_dup_uid (header); 
    115115 
    116116                if (uid) { 
     
    129129                                } 
    130130                        } 
     131                        g_free (uid); 
    131132                } 
    132133 
  • trunk/libtinymail-camel/tny-camel-folder.c

    r3524 r3526  
    37863786        { 
    37873787                TnyHeader *header; 
    3788                 const gchar *uid; 
     3788                gchar *uid; 
    37893789 
    37903790                header = TNY_HEADER (tny_iterator_get_current (iter)); 
    3791                 uid = tny_header_get_uid (header); 
     3791                uid = tny_header_dup_uid (header); 
    37923792 
    37933793                if (G_UNLIKELY (uid == NULL))  
     
    38123812                        return; 
    38133813                } else 
    3814                         g_ptr_array_add (uids, (gpointer) g_strdup (uid)); 
     3814                        g_ptr_array_add (uids, (gpointer) uid); 
    38153815 
    38163816                g_object_unref (header); 
  • trunk/libtinymail-camel/tny-camel-full-msg-receive-strategy.c

    r3304 r3526  
    7676                mtype = CAMEL_FOLDER_RECEIVE_ANY_OR_FULL; 
    7777 
    78         id = g_strdup (tny_header_get_uid (TNY_HEADER (header))); 
     78        id = tny_header_dup_uid (TNY_HEADER (header)); 
    7979        message = NULL; 
    8080        camel_message = camel_folder_get_message (priv->folder, (const char *) id, mtype, -1, &ex); 
     
    9898                                tny_header_get_date_received (header)); 
    9999                        _tny_camel_msg_set_folder (TNY_CAMEL_MSG (message), folder); 
    100                         TNY_CAMEL_MSG_HEADER (nheader)->old_uid = g_strdup (tny_header_get_uid (header)); 
     100                        TNY_CAMEL_MSG_HEADER (nheader)->old_uid = tny_header_dup_uid (header); 
    101101                        _tny_camel_msg_set_header (TNY_CAMEL_MSG (message), nheader); 
    102102                        _tny_camel_mime_part_set_part (TNY_CAMEL_MIME_PART (message),  
  • trunk/libtinymail-camel/tny-camel-header.c

    r3496 r3526  
    7272 
    7373 
    74 static const gchar* 
    75 tny_camel_header_get_replyto (TnyHeader *self) 
     74static gchar* 
     75tny_camel_header_dup_replyto (TnyHeader *self) 
    7676{ 
    7777        return NULL; 
     
    123123 
    124124 
    125 static const gchar* 
    126 tny_camel_header_get_cc (TnyHeader *self) 
    127 
    128         TnyCamelHeader *me = TNY_CAMEL_HEADER (self); 
    129         const gchar *retval = NULL; 
    130  
    131         retval = camel_message_info_cc (me->info); 
    132  
    133         return retval; 
    134 
    135  
    136 static const gchar* 
    137 tny_camel_header_get_bcc (TnyHeader *self) 
     125static gchar* 
     126tny_camel_header_dup_cc (TnyHeader *self) 
     127
     128        TnyCamelHeader *me = TNY_CAMEL_HEADER (self); 
     129        gchar *retval = NULL; 
     130 
     131        camel_folder_summary_lock (); 
     132        retval = g_strdup (camel_message_info_cc (me->info)); 
     133        camel_folder_summary_unlock (); 
     134 
     135        return retval; 
     136
     137 
     138static gchar* 
     139tny_camel_header_dup_bcc (TnyHeader *self) 
    138140{ 
    139141        return NULL; 
     
    223225} 
    224226         
    225 static const gchar* 
    226 tny_camel_header_get_from (TnyHeader *self) 
    227 
    228         TnyCamelHeader *me = TNY_CAMEL_HEADER (self); 
    229         const gchar *retval = NULL; 
    230  
    231         retval = camel_message_info_from (me->info); 
    232  
    233         return retval; 
    234 
    235  
    236 static const gchar* 
    237 tny_camel_header_get_subject (TnyHeader *self) 
    238 
    239         TnyCamelHeader *me = TNY_CAMEL_HEADER (self); 
    240         const gchar *retval = NULL; 
    241  
    242         retval = camel_message_info_subject (me->info); 
    243  
    244         return retval; 
    245 
    246  
    247  
    248 static const gchar* 
    249 tny_camel_header_get_to (TnyHeader *self) 
    250 
    251         TnyCamelHeader *me = TNY_CAMEL_HEADER (self); 
    252         const gchar *retval = NULL; 
    253  
    254         retval = camel_message_info_to (me->info); 
    255  
    256         return retval; 
    257 
    258  
    259 static const gchar* 
    260 tny_camel_header_get_message_id (TnyHeader *self) 
    261 
    262         TnyCamelHeader *me = TNY_CAMEL_HEADER (self); 
    263         const gchar *retval = NULL; 
    264  
    265         retval = (const gchar*) camel_message_info_message_id (me->info); 
     227static gchar* 
     228tny_camel_header_dup_from (TnyHeader *self) 
     229
     230        TnyCamelHeader *me = TNY_CAMEL_HEADER (self); 
     231        gchar *retval = NULL; 
     232 
     233        camel_folder_summary_lock (); 
     234        retval = g_strdup (camel_message_info_from (me->info)); 
     235        camel_folder_summary_unlock (); 
     236 
     237        return retval; 
     238
     239 
     240static gchar* 
     241tny_camel_header_dup_subject (TnyHeader *self) 
     242
     243        TnyCamelHeader *me = TNY_CAMEL_HEADER (self); 
     244        gchar *retval = NULL; 
     245 
     246        camel_folder_summary_lock (); 
     247        retval = g_strdup (camel_message_info_subject (me->info)); 
     248        camel_folder_summary_unlock (); 
     249 
     250        return retval; 
     251
     252 
     253 
     254static gchar* 
     255tny_camel_header_dup_to (TnyHeader *self) 
     256
     257        TnyCamelHeader *me = TNY_CAMEL_HEADER (self); 
     258        gchar *retval = NULL; 
     259 
     260        camel_folder_summary_lock (); 
     261        retval = g_strdup (camel_message_info_to (me->info)); 
     262        camel_folder_summary_unlock (); 
     263 
     264        return retval; 
     265
     266 
     267static gchar* 
     268tny_camel_header_dup_message_id (TnyHeader *self) 
     269
     270        TnyCamelHeader *me = TNY_CAMEL_HEADER (self); 
     271        gchar *retval = NULL; 
     272 
     273        camel_folder_summary_lock (); 
     274        retval = (gchar*) camel_message_info_message_id (me->info); 
     275        camel_folder_summary_unlock (); 
    266276 
    267277        return retval; 
     
    283293} 
    284294 
    285 static const gchar* 
    286 tny_camel_header_get_uid (TnyHeader *self) 
    287 { 
    288         TnyCamelHeader *me = TNY_CAMEL_HEADER (self); 
    289         const gchar *retval = NULL; 
    290  
    291         retval = camel_message_info_uid (me->info); 
     295static gchar* 
     296tny_camel_header_dup_uid (TnyHeader *self) 
     297{ 
     298        TnyCamelHeader *me = TNY_CAMEL_HEADER (self); 
     299        gchar *retval = NULL; 
     300 
     301        retval = g_strdup (camel_message_info_uid (me->info)); 
    292302 
    293303        return retval; 
     
    353363        TnyHeaderIface *klass = (TnyHeaderIface *)g; 
    354364 
    355         klass->get_from= tny_camel_header_get_from; 
    356         klass->get_message_id= tny_camel_header_get_message_id; 
     365        klass->dup_from= tny_camel_header_dup_from; 
     366        klass->dup_message_id= tny_camel_header_dup_message_id; 
    357367        klass->get_message_size= tny_camel_header_get_message_size; 
    358         klass->get_to= tny_camel_header_get_to; 
    359         klass->get_subject= tny_camel_header_get_subject; 
     368        klass->dup_to= tny_camel_header_dup_to; 
     369        klass->dup_subject= tny_camel_header_dup_subject; 
    360370        klass->get_date_received= tny_camel_header_get_date_received; 
    361371        klass->get_date_sent= tny_camel_header_get_date_sent; 
    362         klass->get_cc= tny_camel_header_get_cc; 
    363         klass->get_bcc= tny_camel_header_get_bcc; 
    364         klass->get_replyto= tny_camel_header_get_replyto; 
    365         klass->get_uid= tny_camel_header_get_uid; 
     372        klass->dup_cc= tny_camel_header_dup_cc; 
     373        klass->dup_bcc= tny_camel_header_dup_bcc; 
     374        klass->dup_replyto= tny_camel_header_dup_replyto; 
     375        klass->dup_uid= tny_camel_header_dup_uid; 
    366376        klass->get_folder= tny_camel_header_get_folder; 
    367377        klass->set_bcc= tny_camel_header_set_bcc; 
  • trunk/libtinymail-camel/tny-camel-mime-part.c

    r3487 r3526  
    353353                TnyHeader *hdr = NULL; 
    354354                TnyHeader *dest_header; 
     355                gchar *str; 
    355356 
    356357                hdr = tny_msg_get_header (TNY_MSG (orig)); 
    357358                retval = TNY_MIME_PART (tny_camel_msg_new ()); 
    358359                dest_header = tny_msg_get_header (TNY_MSG (retval)); 
    359                 if (tny_header_get_bcc (hdr)) 
    360                         tny_header_set_bcc (dest_header, tny_header_get_bcc (hdr)); 
    361                 if (tny_header_get_cc (hdr)) 
    362                         tny_header_set_cc (dest_header, tny_header_get_cc (hdr)); 
    363                 if (tny_header_get_from (hdr)) 
    364                         tny_header_set_from (dest_header, tny_header_get_from (hdr)); 
    365                 if (tny_header_get_replyto (hdr)) 
    366                         tny_header_set_replyto (dest_header, tny_header_get_replyto (hdr)); 
    367                 if (tny_header_get_subject (hdr)) 
    368                         tny_header_set_subject (dest_header, tny_header_get_subject (hdr)); 
    369                 if (tny_header_get_to (hdr)) 
    370                         tny_header_set_to (dest_header, tny_header_get_to (hdr)); 
     360                if (str = tny_header_dup_bcc (hdr)) { 
     361                        tny_header_set_bcc (dest_header, str); 
     362                        g_free (str); 
     363                } 
     364                if (str = tny_header_dup_cc (hdr)) { 
     365                        tny_header_set_cc (dest_header, str); 
     366                        g_free (str); 
     367                } 
     368                if (str = tny_header_dup_from (hdr)) { 
     369                        tny_header_set_from (dest_header, str); 
     370                        g_free (str); 
     371                } 
     372                if (str = tny_header_dup_replyto (hdr)) { 
     373                        tny_header_set_replyto (dest_header, str); 
     374                        g_free (str); 
     375                } 
     376                if (str = tny_header_dup_subject (hdr)) { 
     377                        tny_header_set_subject (dest_header, str); 
     378                        g_free (str); 
     379                } 
     380                if (str = tny_header_dup_to (hdr)) { 
     381                        tny_header_set_to (dest_header, str); 
     382                        g_free (str); 
     383                } 
    371384                /* tny_header_set_priority (dest_header, tny_header_get_priority (hdr)); */ 
    372385                g_object_unref (hdr); 
     
    696709        if (dw->mime_type && (charset = camel_content_type_param  
    697710                        (dw->mime_type, "charset")) &&  
    698                 g_ascii_strncasecmp(charset, "iso-8859-", 9) == 0)  
     711                g_ascii_strncasecmp(charset, "iso-8859+-", 9) == 0)  
    699712        { 
    700713                CamelStream *null; 
  • trunk/libtinymail-camel/tny-camel-msg-header.c

    r3373 r3526  
    8989} 
    9090 
    91 static const gchar* 
    92 tny_camel_msg_header_get_replyto (TnyHeader *self) 
     91static gchar* 
     92tny_camel_msg_header_dup_replyto (TnyHeader *self) 
    9393{ 
    9494        TnyCamelMsgHeader *me = TNY_CAMEL_MSG_HEADER (self); 
     
    100100        } 
    101101 
    102         return (const gchar *) me->reply_to
     102        return g_strdup ((const gchar *) me->reply_to)
    103103} 
    104104 
     
    205205 
    206206 
    207 static const gchar* 
    208 tny_camel_msg_header_get_cc (TnyHeader *self) 
     207static gchar* 
     208tny_camel_msg_header_dup_cc (TnyHeader *self) 
    209209{ 
    210210        TnyCamelMsgHeader *me = TNY_CAMEL_MSG_HEADER (self); 
     
    216216        } 
    217217 
    218         return (const gchar *) me->cc
    219 } 
    220  
    221 static const gchar* 
    222 tny_camel_msg_header_get_bcc (TnyHeader *self) 
     218        return g_strdup ((const gchar *) me->cc)
     219} 
     220 
     221static gchar* 
     222tny_camel_msg_header_dup_bcc (TnyHeader *self) 
    223223{ 
    224224        TnyCamelMsgHeader *me = TNY_CAMEL_MSG_HEADER (self); 
     
    230230        } 
    231231 
    232         return (const gchar *) me->bcc
     232        return g_strdup ((const gchar *) me->bcc)
    233233} 
    234234 
     
    387387} 
    388388 
    389 static const gchar* 
    390 tny_camel_msg_header_get_from (TnyHeader *self) 
     389static gchar* 
     390tny_camel_msg_header_dup_from (TnyHe