Ignore:
Timestamp:
Oct 8, 2009, 8:11:59 AM (16 years ago)
Author:
Herwig Bauernfeind
Message:

divers fix for Ticket #68 in 3.3

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/samba-3.3.x/source/lib/iconv.c

    r206 r339  
    128128}
    129129
     130#ifdef __OS2__
     131// i could have done a static variable w/o this function. but i feel it's nicer this way. SCS
     132// the purpose of this function is to save the to_name to get the korean and japanese code set working
     133char * save_toname(char *toname, bool what)
     134{
     135   static char *to_name=NULL;
     136
     137   if ( what == 0 )
     138        to_name = SMB_STRDUP(toname);
     139
     140        return to_name;
     141}
     142#endif
     143
    130144#ifdef HAVE_NATIVE_ICONV
    131145/* if there was an error then reset the internal state,
     
    138152#ifdef __OS2__
    139153        uint16 *outbuf_uc = ( uint16 * )*outbuf;
     154        char *to_name = save_toname(NULL, 1);
    140155#endif
    141156
     
    152167        else
    153168        {
    154         while(( char * )outbuf_uc < *outbuf )
    155         {
    156             if( *outbuf_uc == 0x20a9 ||     /* Korean WON */
    157                 *outbuf_uc == 0x00a5 )      /* Japanese YEN */
    158                 *outbuf_uc = '\\';
    159 
    160             outbuf_uc++;
    161         }
     169                if( (strstr(to_name, "949") != NULL) ||     /* Korean CP */
     170                   (strstr(to_name, "932") != NULL) ||      /* Japanese CP */
     171                   (strstr(to_name, "942") != NULL) ||      /* Japanese CP */
     172                   (strstr(to_name, "943") != NULL) )       /* Japanese CP */
     173                {
     174                         while(( char * )outbuf_uc < *outbuf )
     175                        {
     176                            if( *outbuf_uc == 0x20a9 ||     /* Korean WON */
     177                                *outbuf_uc == 0x00a5 )      /* Japanese YEN */
     178                                *outbuf_uc = '\\';
     179
     180                            outbuf_uc++;
     181                        }
     182                }
    162183        }
    163184#endif
     
    180201        size_t bufsize;
    181202
     203#ifdef __OS2__
     204        save_toname(cd->to_name, 0);
     205#endif
     206
    182207        /* in many cases we can go direct */
    183208        if (cd->direct) {
     
    194219                if (cd->pull(cd->cd_pull,
    195220                             inbuf, inbytesleft, &bufp, &bufsize) == -1
    196                     && errno != E2BIG) {
    197 DEBUG(0,("smb_iconv 2\n"));
    198 return -1;}
     221                    && errno != E2BIG)
     222                        return -1;
    199223
    200224                bufp = cvtbuf;
     
    203227                if (cd->push(cd->cd_push,
    204228                             (const char **)&bufp, &bufsize,
    205                              outbuf, outbytesleft) == -1) {
    206 DEBUG(0,("smb_iconv 3\n"));
    207 return -1;}
     229                             outbuf, outbytesleft) == -1)
     230                                return -1;
    208231        }
    209232
Note: See TracChangeset for help on using the changeset viewer.