Hi,

you are right, the escape problem was fixed exacely in branch_08X, sorry
for annoying. I was checked the code in main cvs tree, but not the
brance_08X :(

在2004年07月10日的07:00,Armin Bauer写道:
> Hi
> 
> thanks for yoru help!
> 
> can you please try the latest palm plugin from cvs? the bug with the
> escaped characters were already mentioned some time ago and i uploaded
> the fix to cvs a couple of days ago.
> 
> It would be great to hear if this fixes the problems with the palm
> plugin.
> 
> oh and dont forget to use -r branch_08X when you check out.
> 
> Armin
> 
> On Fri, 2004-07-09 at 18:34, YuLei wrote:
> > Hi, all:
> > 
> >   I am using multisync with my Clie, T68 and Evolution in chinese
> >   environment (Debian-sarge), it's just what I am seeking for,
> >   but seems that multisync did not deal chinese characters well,
> >   after dig into the source code (thanks to GPL), I made two fixes
> >   to resolve problems:
> > 
> > 1. If properties of key contains charset specification, like
> > 'N;CHARSET=UTF-7:+...", then remove this property and convert its value to UTF-8, 
> > because Evolution can process UTF-8 properly even if no charset specified
> > 
> > 2. Because UTF-8 use all 8 bits of byte, so escape (in palm plugin) is needn't
> > after convert to UTF-8 or will corrupt the character encoding
> > 
> > here is my patch:
> > 
> > diff -ur multisync-0.82.orig/src/sync_vtype.c multisync-0.82/src/sync_vtype.c
> > --- multisync-0.82.orig/src/sync_vtype.c    2004-04-13 05:03:29.000000000 +0800
> > +++ multisync-0.82/src/sync_vtype.c 2004-07-07 22:44:28.000000000 +0800
> > @@ -61,6 +61,46 @@
> >    VTYPE_VCARD = 0xc
> >  } vtype_type;
> >  
> > +// convert charset of value from which specified in properties
> > +static void
> > +convert_charset (char* line, unsigned char** value, const char* charset)
> > +{ 
> > +  while (line = strchr (line, ';')) {
> > +    const char* key = "CHARSET=";
> > +    char org_charset[64];
> > +    int len;
> > +    iconv_t ic;
> > +
> > +    line++; // skip the ';' character
> > +
> > +    if ((strlen (line) <= strlen (key))
> > +   || g_strncasecmp (line, key, sizeof (key)))
> > +    // key not found
> > +      continue;
> > +
> > +    org_charset[0] = 0;
> > +    len = strcspn (line + strlen (key), ";: \r\n");
> > +    if (len >= sizeof (org_charset))
> > +      len = sizeof (org_charset) - 1;
> > +    strncat (org_charset, line + strlen (key), len);
> > +
> > +    ic = iconv_open (charset, org_charset);
> > +    if (ic >= 0) {
> > +      char *utfvalue = g_malloc0(65536);
> > +      size_t inbytes = strlen(*value);
> > +      size_t outbytes = 65536;
> > +      char *inbuf = *value, *outbuf = utfvalue;
> > +
> > +      iconv(ic, &inbuf, &inbytes, &outbuf, &outbytes);
> > +      g_free(*value);
> > +      *value = utfvalue;
> > +      iconv_close(ic);
> > +    }
> > +
> > +    break;
> > +  } // while every ';' character
> > +}
> > +
> >  // Parse and correct a number of errors in the VCARD/VTODO data
> >  // The "opts" parameter decides which errors/features that should be corrected
> >  char* sync_vtype_convert(char *card, sync_voption opts, char* charset) {
> > @@ -74,6 +114,7 @@
> >    gboolean output = TRUE; // If feedthrough output is enabled
> >    vtype_type datatype = VTYPE_UNKNOWN;
> >  
> >    outcard = g_string_new("");
> >    while (incard) {
> >      char* endln;
> > @@ -136,6 +177,7 @@
> >     value = tmp;
> >        }
> >        qp = FALSE; // Do a proper QP detection
> > +      convert_charset (line, &value, "UTF-8");
> >        if (endent)
> >     endent[0] = 0;
> >        strncpy(name, line, 255);
> > @@ -312,7 +354,10 @@
> >           !g_strcasecmp(propdata, "END"))
> >         triggerrelatedend = TRUE;
> >       if (!g_strcasecmp(propname, "CHARSET"))
> > +     {
> >         strncpy(linecharset, propdata, 255);
> > +       outputprop = FALSE; // value has been converted to UTF-8
> > +     }
> >       if (adr && 
> >           (!g_strcasecmp(propname, "HOME") || 
> >           !g_strcasecmp(propname, "WORK"))) {
> > @@ -362,7 +407,7 @@
> >     value = sync_vtype_decode_qp(value);
> >     g_free(tmp);
> >        }
> > -      if ((opts & VOPTION_FIXCHARSET) && value && charset) {
> > +      if ((opts & VOPTION_FIXCHARSET) && value && charset && !linecharset[0]) {
> >     iconv_t ic;
> >     int t;
> >     gboolean highchar = FALSE;
> > @@ -1132,6 +1177,7 @@
> >       res = tmp;
> >       start = newstart;
> >     } while(start < card+strlen(card) && start[0] == ' ');
> > +   convert_charset (pos, &res, "UTF-8");
> >     return(res);
> >        }
> >      }
> > 
> > diff -ur multisync-0.82.orig/plugins/palm_sync/src/vcard.c 
> > multisync-0.82/plugins/palm_sync/src/vcard.c
> > --- multisync-0.82.orig/plugins/palm_sync/src/vcard.c       2004-04-13 
> > 05:03:20.000000000 +0800
> > +++ multisync-0.82/plugins/palm_sync/src/vcard.c    2004-07-07 23:19:14.000000000 
> > +0800
> > @@ -116,11 +116,11 @@
> >  
> >     /* note */
> >     if(appointment.note && strlen(appointment.note))
> > -           prop = addPropValueO(vevent, VCDescriptionPropO, 
> > g_strescape(appointment.note, NULL));
> > +           prop = addPropValueO(vevent, VCDescriptionPropO, appointment.note);
> >  
> >     /* description */
> >     if(appointment.description) {
> > -           prop = addPropValueO(vevent, VCSummaryPropO, 
> > escape_chars(g_strescape(appointment.description, NULL)));
> > +           prop = addPropValueO(vevent, VCSummaryPropO, appointment.description);
> >     }
> >  
> >     /* begin and end*/
> > @@ -584,13 +584,13 @@
> >  
> >     /* note */
> >     if(todo.note && strlen(todo.note)) {
> > -           prop = addPropValueO(vtodo, VCDescriptionPropO, 
> > escape_chars(g_strescape(todo.note, NULL)));
> > +           prop = addPropValueO(vtodo, VCDescriptionPropO, todo.note);
> >             //addPropValueO(prop, "ENCODING", "QUOTED-PRINTABLE");
> >     }
> >  
> >     /* description */
> >     if(todo.description) {
> > -           addPropValueO(vtodo, VCSummaryPropO,  
> > escape_chars(g_strescape(todo.description, NULL)));
> > +           addPropValueO(vtodo, VCSummaryPropO,  todo.description);
> >     }
> >     
> >     if (category) {
> > 
> > 
> > 
> > -------------------------------------------------------
> > This SF.Net email sponsored by Black Hat Briefings & Training.
> > Attend Black Hat Briefings & Training, Las Vegas July 24-29 - 
> > digital self defense, top technical experts, no vendor pitches, 
> > unmatched networking opportunities. Visit www.blackhat.com
> > _______________________________________________
> > Multisync-devel mailing list
> > [EMAIL PROTECTED]
> > https://lists.sourceforge.net/lists/listinfo/multisync-devel
> 



-------------------------------------------------------
This SF.Net email sponsored by Black Hat Briefings & Training.
Attend Black Hat Briefings & Training, Las Vegas July 24-29 -
digital self defense, top technical experts, no vendor pitches,
unmatched networking opportunities. Visit www.blackhat.com
_______________________________________________
Multisync-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/multisync-devel

Reply via email to