Re: Problem with tny_camel_msg_header_set_flags()



Approved while discussing it on IRC

On Fri, 2007-10-26 at 17:43 +0200, Alberto Garcia wrote:
> This is supposed to set a single flag in a header,
> right? Let's take for example this code in
> tny_camel_full_msg_receive_strategy_perform_get_msg_default():
> 
> /* ... */
> tny_header_set_flags (nheader, TNY_HEADER_FLAG_CACHED);
> tny_header_unset_flags (nheader, TNY_HEADER_FLAG_PARTIAL);
> g_object_unref (nheader);
> tny_header_set_flags (header, TNY_HEADER_FLAG_CACHED);
> tny_header_unset_flags (header, TNY_HEADER_FLAG_PARTIAL);
> /* ... */
> 
> The problem with set_flags() is that while it works OK if it needs to
> check single bits in the mask ...
> 
> /* ... */
> if (mask & TNY_HEADER_FLAG_CACHED || mask & TNY_HEADER_FLAG_PARTIAL) {
>         if (mask & TNY_HEADER_FLAG_PARTIAL)
>                 me->partial = TRUE;
>         else
>                 me->partial = FALSE;
> }
> /* ... */
> 
> ... it fails with priority flags. tny_camel_msg_header_set_flags()
> calls set_prio_mask() unconditionally, so calling it always sets the
> priority mask. But what's wrong with that?
> 
> While the flags for low and high priority are 10<<9 and 01<<9, normal
> priority is 00<<9, that is: there is no way for set_prio_mask() to
> know whether the caller wants to set normal priority of doesn't want
> to change priority flags at all.
> 
> Possible solutions?
> 
>    * Define a new bit for normal priority, that is, 3 different bits
>      for low, high and normal
> 
>    * Make set_prio_mask() a different (and public) function and
>      prevent tny_headers_set_flags() from calling it.
> 
>    * Always call set_flags with something like (current_flags &
>      NEW_FLAG). (this doesn't seem a good one).
> 
> tny_camel_msg_header_unset_flags() has a similar problem, in fact
> it also calls set_prio_mask() again (it should call something like
> unset_prio_mask()), so that explains why I'm receiving e-mails with
> "X-Priority: Normal" set twice.
> 
> Opinions?
> 
> By the way, why are TNY_HEADER_FLAG_* defined in both tny-header.h and
> tny-enums.h ??
> 
> --
> Alberto Gar�Gonzlez
> http://people.igalia.com/berto/
> _______________________________________________
> tinymail-devel-list mailing list
> tinymail-devel-list gnome org
> http://mail.gnome.org/mailman/listinfo/tinymail-devel-list
-- 
Philip Van Hoof, software developer
home: me at pvanhoof dot be 
gnome: pvanhoof at gnome dot org 
http://www.pvanhoof.be/blog






[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]