Home | History | Annotate | Line # | Download | only in lcUniConv
      1 /*
      2  * UCS-2BE = UCS-2 big endian
      3  */
      4 
      5 static int
      6 ucs2be_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
      7 {
      8   if (n >= 2) {
      9     if (s[0] >= 0xd8 && s[0] < 0xe0) {
     10       return RET_ILSEQ;
     11     } else {
     12       *pwc = (s[0] << 8) + s[1];
     13       return 2;
     14     }
     15   }
     16   return RET_TOOFEW(0);
     17 }
     18 
     19 static int
     20 ucs2be_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
     21 {
     22   if (wc < 0x10000 && !(wc >= 0xd800 && wc < 0xe000)) {
     23     if (n >= 2) {
     24       r[0] = (unsigned char) (wc >> 8);
     25       r[1] = (unsigned char) wc;
     26       return 2;
     27     } else
     28       return RET_TOOSMALL;
     29   }
     30   return RET_ILSEQ;
     31 }
     32