# \[PATCH\] warnings of enc/trans/utf\_16\_32.c

**URL:** <https://www.ruby-forum.com/t/patch-warnings-of-enc-trans-utf-16-32-c/126645>\
**Category:** Development\
**Created:** [January 20, 2008, 10:49pm UTC](https://www.ruby-forum.com/t/patch-warnings-of-enc-trans-utf-16-32-c/126645 "2008-01-20T22:49:56Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![nobu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/e9c0ed/32.png) [@nobu](https://www.ruby-forum.com/u/nobu)\
**Post date:** [January 20, 2008, 10:49pm UTC](https://www.ruby-forum.com/t/patch-warnings-of-enc-trans-utf-16-32-c/126645/1 "2008-01-20T22:49:56Z")

</div>

e$B$J$+$@$G$9!#e(B

enc/trans/utf\_16\_32.ce$B$N7Y9p$r\>C$9%Q%C%A$G$9!#\<+F0@8@.$H$$$&$3$He(B  
e$B$J$N$G!"@8@.85$K$\*4j$$$7$^$9!#e(B

e$B$A$J$\_$K!“4X?tItJ,$O\<j$G=q$$$?$N$G$O$J$$$+$H;W$o$l$k$N$G$9$,!”$Ie(B  
e$B$N$h$&$J07$$$K$J$C$F$$$k$N$G$7$g$&$+!#e(B

# Index: enc/trans/utf\_16\_32.c

— enc/trans/utf\_16\_32.c (revision 15146)  
+++ enc/trans/utf\_16\_32.c (working copy)  
@@ -5,27 +5,30 @@

static int  
-fun\_so\_from\_utf\_16be(const unsigned char\* s, unsigned char\* o)  
+fun\_so\_from\_utf\_16be(const char\* s, char\* o, struct rb\_transcoding \*td)  
{

- if (!s[0] && s[1]\<0x80) {
- 

```
   o[0] = s[1];

```

- unsigned char s0 = s[0], s1 = s[1];
- 
- if (!s0 && s1\<0x80) {
- 

```
   o[0] = s1;
   return 1;

```

}

- else if (s[0]\<0x08) {
- 

```
   o[0] = 0xC0 | (s[0]<<2) | (s[1]>>6);

```

- 

```
   o[1] = 0x80 | s[1]&0x3F;

```

- else if (s0\<0x08) {
- 

```
   o[0] = 0xC0 | (s0<<2) | (s1>>6);

```

- 

```
   o[1] = 0x80 | (s1&0x3F);
   return 2;

```

}

- else if ((s[0]&0xF8)!=0xD8) {
- 

```
   o[0] = 0xE0 | s[0]>>4;

```

- 

```
   o[1] = 0x80 | ((s[0]&0x0F)<<2) | (s[1]>>6);

```

- 

```
   o[2] = 0x80 | s[1]&0x3F;

```

- else if ((s0&0xF8)!=0xD8) {
- 

```
   o[0] = 0xE0 | s0>>4;

```

- 

```
   o[1] = 0x80 | ((s0&0x0F)<<2) | (s1>>6);

```

- 

```
   o[2] = 0x80 | (s1&0x3F);
   return 3;

```

}  
else {

- 

```
   unsigned int u = (((s[0]&0x03)<<2)|(s[1]>>6)) + 1;

```

- 

```
   o[0] = 0xF0 | u>>2;

```

- 

```
   o[1] = 0x80 | ((u&0x03)<<4) | (s[1]>>2)&0x0F;

```

- 

```
   o[2] = 0x80 | ((s[1]&0x03)<<4) | ((s[2]&0x03)<<2) | (s[3]>>6);

```

- 

```
   o[3] = 0x80 | s[3]&0x3F;

```

- unsigned char s2 = s[2], s3 = s[3];
- 

```
   unsigned int u = (((s0&0x03)<<2)|(s1>>6)) + 1;

```

- 

```
   o[0] = 0xF0 | (u>>2);

```

- 

```
   o[1] = 0x80 | ((u&0x03)<<4) | ((s1>>2)&0x0F);

```

- 

```
   o[2] = 0x80 | ((s1&0x03)<<4) | ((s2&0x03)<<2) | (s3>>6);

```

- 

```
   o[3] = 0x80 | (s3&0x3F);
   return 4;

```

}  
@@ -33,27 +36,32 @@ fun\_so\_from\_utf\_16be(const unsigned char

static int  
-fun\_so\_to\_utf\_16be(const unsigned char\* s, unsigned char\* o)  
+fun\_so\_to\_utf\_16be(const char\* s, char\* o, struct rb\_transcoding \*td)  
{

- if (!(s[0]&0x80)) {

- unsigned char s0 = s[0], s1, s2, s3;
- 
- if (!(s0&0x80)) {  
o[0] = 0x00;

- 

```
   o[1] = s[0];

```

- 

```
   o[1] = s0;
   return 2;

```

}

- else if ((s[0]&0xE0)==0xC0) {
- 

```
   o[0] = (s[0]>>2)&0x07;

```

- 

```
   o[1] = ((s[0]&0x03)<<6) | s[1]&0x3F;

```

- s1 = s[1];
- if ((s0&0xE0)==0xC0) {
- 

```
   o[0] = (s0>>2)&0x07;

```

- 

```
   o[1] = ((s0&0x03)<<6) | (s1&0x3F);
   return 2;

```

}

- else if ((s[0]&0xF0)==0xE0) {
- 

```
   o[0] = (s[0]<<4) | (s[1]>>2)^0x20;

```

- 

```
   o[1] = (s[1]<<6) | s[2]^0x80;

```

- s2 = s[2];
- if ((s0&0xF0)==0xE0) {
- 

```
   o[0] = (s0<<4) | ((s1>>2)^0x20);

```

- 

```
   o[1] = (s1<<6) | (s2^0x80);
   return 2;

```

}

- else {
- 

```
   int w = (((s[0]&0x07)<<2) | (s[1]>>4)&0x03) - 1;

```

- s3 = s[3];
- {
- 

```
   int w = (((s0&0x07)<<2) | ((s1>>4)&0x03)) - 1;
   o[0] = 0xD8 | (w>>2);

```

- 

```
   o[1] = (w<<6) | ((s[1]&0x0F)<<2) | ((s[2]>>4)-8);

```

- 

```
   o[2] = 0xDC | ((s[2]>>2)&0x03);

```

- 

```
   o[3] = (s[2]<<6) | (s[3]&~0x80);

```

- 

```
   o[1] = (w<<6) | ((s1&0x0F)<<2) | ((s2>>4)-8);

```

- 

```
   o[2] = 0xDC | ((s2>>2)&0x03);

```

- 

```
   o[3] = (s2<<6) | (s3&~0x80);
   return 4;

```

}  
@@ -61,27 +69,30 @@ fun\_so\_to\_utf\_16be(const unsigned char\*

static int  
-fun\_so\_from\_utf\_16le(const unsigned char\* s, unsigned char\* o)  
+fun\_so\_from\_utf\_16le(const char\* s, char\* o, struct rb\_transcoding \*td)  
{

- if (!s[1] && s[0]\<0x80) {
- 

```
   o[0] = s[0];

```

- unsigned char s0 = s[0], s1 = s[1];
- 
- if (!s1 && s0\<0x80) {
- 

```
   o[0] = s0;
   return 1;

```

}

- else if (s[1]\<0x08) {
- 

```
   o[0] = 0xC0 | (s[1]<<2) | (s[0]>>6);

```

- 

```
   o[1] = 0x80 | s[0]&0x3F;

```

- else if (s1\<0x08) {
- 

```
   o[0] = 0xC0 | (s1<<2) | (s0>>6);

```

- 

```
   o[1] = 0x80 | (s0&0x3F);
   return 2;

```

}

- else if ((s[1]&0xF8)!=0xD8) {
- 

```
   o[0] = 0xE0 | s[1]>>4;

```

- 

```
   o[1] = 0x80 | ((s[1]&0x0F)<<2) | (s[0]>>6);

```

- 

```
   o[2] = 0x80 | s[0]&0x3F;

```

- else if ((s1&0xF8)!=0xD8) {
- 

```
   o[0] = 0xE0 | s1>>4;

```

- 

```
   o[1] = 0x80 | ((s1&0x0F)<<2) | (s0>>6);

```

- 

```
   o[2] = 0x80 | (s0&0x3F);
   return 3;

```

}  
else {

- 

```
   unsigned int u = (((s[1]&0x03)<<2)|(s[0]>>6)) + 1;

```

- 

```
   o[0] = 0xF0 | u>>2;

```

- 

```
   o[1] = 0x80 | ((u&0x03)<<4) | (s[0]>>2)&0x0F;

```

- 

```
   o[2] = 0x80 | ((s[0]&0x03)<<4) | ((s[3]&0x03)<<2) | (s[2]>>6);

```

- 

```
   o[3] = 0x80 | s[2]&0x3F;

```

- unsigned char s2 = s[2], s3 = s[3];
- 

```
   unsigned int u = (((s1&0x03)<<2)|(s0>>6)) + 1;

```

- 

```
   o[0] = 0xF0 | (u>>2);

```

- 

```
   o[1] = 0x80 | ((u&0x03)<<4) | ((s0>>2)&0x0F);

```

- 

```
   o[2] = 0x80 | ((s0&0x03)<<4) | ((s3&0x03)<<2) | (s2>>6);

```

- 

```
   o[3] = 0x80 | (s2&0x3F);
   return 4;

```

}  
@@ -89,27 +100,32 @@ fun\_so\_from\_utf\_16le(const unsigned char

static int  
-fun\_so\_to\_utf\_16le(const unsigned char\* s, unsigned char\* o)  
+fun\_so\_to\_utf\_16le(const char\* s, char\* o, struct rb\_transcoding \*td)  
{

- if (!(s[0]&0x80)) {

- unsigned char s0 = s[0], s1, s2, s3;
- 
- if (!(s0&0x80)) {  
o[1] = 0x00;

- 

```
   o[0] = s[0];

```

- 

```
   o[0] = s0;
   return 2;

```

}

- else if ((s[0]&0xE0)==0xC0) {
- 

```
   o[1] = (s[0]>>2)&0x07;

```

- 

```
   o[0] = ((s[0]&0x03)<<6) | s[1]&0x3F;

```

- s1 = s[1];
- if ((s0&0xE0)==0xC0) {
- 

```
   o[1] = (s0>>2)&0x07;

```

- 

```
   o[0] = ((s0&0x03)<<6) | (s1&0x3F);
   return 2;

```

}

- else if ((s[0]&0xF0)==0xE0) {
- 

```
   o[1] = (s[0]<<4) | (s[1]>>2)^0x20;

```

- 

```
   o[0] = (s[1]<<6) | s[2]^0x80;

```

- s2 = s[2];
- if ((s0&0xF0)==0xE0) {
- 

```
   o[1] = (s0<<4) | ((s1>>2)^0x20);

```

- 

```
   o[0] = (s1<<6) | (s2^0x80);
   return 2;

```

}

- else {
- 

```
   int w = (((s[0]&0x07)<<2) | (s[1]>>4)&0x03) - 1;

```

- s3 = s[3];
- {
- 

```
   int w = (((s0&0x07)<<2) | ((s1>>4)&0x03)) - 1;
   o[1] = 0xD8 | (w>>2);

```

- 

```
   o[0] = (w<<6) | ((s[1]&0x0F)<<2) | ((s[2]>>4)-8);

```

- 

```
   o[3] = 0xDC | ((s[2]>>2)&0x03);

```

- 

```
   o[2] = (s[2]<<6) | (s[3]&~0x80);

```

- 

```
   o[0] = (w<<6) | ((s1&0x0F)<<2) | ((s2>>4)-8);

```

- 

```
   o[3] = 0xDC | ((s2>>2)&0x03);

```

- 

```
   o[2] = (s2<<6) | (s3&~0x80);
   return 4;

```

}  
@@ -238,5 +254,5 @@ from\_UTF\_16BE = {  
};

-static rb\_transcoder  
+static const rb\_transcoder  
rb\_from\_UTF\_16BE = {  
“UTF-16BE”, “UTF-8”, &from\_UTF\_16BE, 4, 0,  
@@ -403,5 +419,5 @@ to\_UTF\_16BE = {  
};

-static rb\_transcoder  
+static const rb\_transcoder  
rb\_to\_UTF\_16BE = {  
“UTF-8”, “UTF-16BE”, &to\_UTF\_16BE, 4, 1,  
@@ -450,5 +466,5 @@ from\_UTF\_16LE = {  
};

-static rb\_transcoder  
+static const rb\_transcoder  
rb\_from\_UTF\_16LE = {  
“UTF-16LE”, “UTF-8”, &from\_UTF\_16LE, 4, 0,  
@@ -456,5 +472,5 @@ rb\_from\_UTF\_16LE = {  
};

-static rb\_transcoder  
+static const rb\_transcoder  
rb\_to\_UTF\_16LE = {  
“UTF-8”, “UTF-16LE”, &to\_UTF\_16BE, 4, 1,

---

<div class="post-metadata">

**Author:** ![nobu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/e9c0ed/32.png) [@nobu](https://www.ruby-forum.com/u/nobu)\
**Post date:** [January 21, 2008, 3:55am UTC](https://www.ruby-forum.com/t/patch-warnings-of-enc-trans-utf-16-32-c/126645/2 "2008-01-21T03:55:27Z")

</div>

e$BCfED$5$s!"$3$s$K$A$O!#e(B

At 06:49 08/01/21, Nobuyoshi N. wrote:

> e$B$J$+$@$G$9!#e(B
> 
> enc/trans/utf\_16\_32.ce$B$N7Y9p$r\>C$9%Q%C%A$G$9!#\<+F0@8@.$H$$$&$3$He(B  
> e$B$J$N$G!"@8@.85$K$\*4j$$$7$^$9!#e(B

e$B7Y9p$r=P$7$F?=$7Lu$4$6$$$^$;$s$G$7$?!#$3$A$i$G$=$NJU$j$N7Y9pe(B  
e$B$O$\_$J$+$C$?$s$G$9$,!"8+Mn$H$7$?$+$b$7$l$^$;$s!#e(B

e$B$H$3$m$G!"e(BRuby e$BA4BN$G$Oe(B char  
e$B$r;H$C$F$$$k$,!“J8;z%3!\<%IJQ49$G$Oe(B  
unsigned char  
e$B$NJ}$,JXMx$J$N$G!”$I$3$+$G@Z$jBX$($J$$$H$$$1$J$$$G$9!#e(B  
e$B$7$+$72\<5-$N$h$&$K\>.$5$$4X?t$G@Z$jBX$($k$H\<j4V$,A}$($k$@$1$G$9!#e(B  
e$BB?J,e(B transcode\_loop e$BFb$Ne(B in\_p e$B$He(B out\_p e$B$re(B  
unsigned char\* e$B$Ke(B  
e$B$7$?J}$,0lHV4JC1$N$G$O$J$$$G$7$g$&$+!#$\*4j$$$G$-$^$9$G$7$g$&$+!#e(B  
e$B$=$l$H$b$3$A$i$G$d$j$^$9$+!#e(B

> e$B$A$J$\_$K!“4X?tItJ,$O\<j$G=q$$$?$N$G$O$J$$$+$H;W$o$l$k$N$G$9$,!”$Ie(B  
> e$B$N$h$&$J07$$$K$J$C$F$$$k$N$G$7$g$&$+!#e(B

e$B3N$+$K\<j$G$+$-$^$7$?e(B :-).  
e$B$=$s$J$N$O\<+F0@8@.$O$[$\L5M}$G$9$h$M!#e(B

e$B59$7$/$\*4j$$$7$^$9!#e(B

#-#-# Martin J. Du"rst, Assoc. Professor, Aoyama Gakuin University  
#-#-# [http://www.sw.it.aoyama.ac.jp](http://www.sw.it.aoyama.ac.jp)[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![nobu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/e9c0ed/32.png) [@nobu](https://www.ruby-forum.com/u/nobu)\
**Post date:** [January 21, 2008, 4:36am UTC](https://www.ruby-forum.com/t/patch-warnings-of-enc-trans-utf-16-32-c/126645/3 "2008-01-21T04:36:21Z")

</div>

e$B$J$+$@$G$9!#e(B

At Mon, 21 Jan 2008 11:54:53 +0900,  
Martin D. wrote in [ruby-dev:33232]:

> e$B$H$3$m$G!"e(BRuby e$BA4BN$G$Oe(B char e$B$r;H$C$F$$$k$,!“J8;z%3!\<%IJQ49$G$Oe(B  
> unsigned char e$B$NJ}$,JXMx$J$N$G!”$I$3$+$G@Z$jBX$($J$$$H$$$1$J$$$G$9!#e(B  
> e$B$7$+$72\<5-$N$h$&$K\>.$5$$4X?t$G@Z$jBX$($k$H\<j4V$,A}$($k$@$1$G$9!#e(B  
> e$BB?J,e(B transcode\_loop e$BFb$Ne(B in\_p e$B$He(B out\_p e$B$re(B unsigned char\* e$B$Ke(B  
> e$B$7$?J}$,0lHV4JC1$N$G$O$J$$$G$7$g$&$+!#$\*4j$$$G$-$^$9$G$7$g$&$+!#e(B  
> e$B$=$l$H$b$3$A$i$G$d$j$^$9$+!#e(B

e$B%]%$%s%?$N%-%c%9%H$O$G$-$k8B$jHr$1$?$[$&$,$h$$$H8D?ME\*$K$O;W$$$^e(B  
e$B$9$,!#e(B

e$B$H$$$&$+!"7k6IJQ49%F!\<%V%k$@$1$G$$$/$H$$$&J}?K$O\<N$F$?$N$G$7$g$&e(B  
e$B$+!#e(BFUN\*e$B$J$I$r$\_$k$K!"e(Btranscode\_loop()e$B$N%l%Y%k$G=hM}4X?t$r@ZBX$(e(B  
e$B$k$[$&$,4JC1$J$h$&$K8+$($^$9!#e(B

---

<div class="post-metadata">

**Author:** ![nobu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/e9c0ed/32.png) [@nobu](https://www.ruby-forum.com/u/nobu)\
**Post date:** [January 21, 2008, 10:21am UTC](https://www.ruby-forum.com/t/patch-warnings-of-enc-trans-utf-16-32-c/126645/4 "2008-01-21T10:21:43Z")

</div>

At 12:35 08/01/21, Nobuyoshi N. wrote:

> e$B%]%$%s%?$N%-%c%9%H$O$G$-$k8B$jHr$1$?$[$&$,$h$$$H8D?ME\*$K$O;W$$$^e(B  
> e$B$9$,!#e(B

e$B5$;}$A$OJ,$+$j$^$9$,!";v**ee(B unsigned  
e$B$H$7$F07$o$l$F$$$k$b$N$re(B  
e$BK\Ev$Ke(B unsigned e$B$K$9$k$K$O$=$l$[$I$NLdBj$,$J$$$H;W$$$^$9!#e(B**

 

**> e$B$H$$$&$+!"7k6IJQ49%F!\<%V%k$@$1$G$$$/$H$$$&J}?K$O\<N$F$?$N$G$7$g$&e(B  
> e$B$+!#e(B**

 

e$BK\Ev$K=c?h$KJQ49%F!\<%V%k$G$$$/$HFC$K:#2s$Ne(B UTF-16, UTF-32 e$B$de(B  
e$B$3$l$+$i$$$D$+$d$i$J$$$H$$$1$J$$e(B GB 18030 e$B$N\>l9g!"%F!\<%V%k$Oe(B  
e$B$H$s$G$b$J$/GO\</$G$+$/$J$j$^$9!#$=$3$G$=$&$$$&?t\<0E_JQ49$Ne(B  
e$B\>l9g$@$14X?t$r;H$&MQ$K$7$^$7$?!#$3$N4X?t$O$“$/$^$G$G$-$l$Pe(B  
e$B$@$1\>.$5$$!V%\_%K4X?t!W$G!”\<0$N$b$N$@$1$r07$&$h$&$K$7$?$$$He(B  
e$B;W$C$F$$$^$9!#4pK\E_$JJ}?K$OJQ$o$C$F$$$^$;$s!#e(B

> FUN\*e$B$J$I$r$\_$k$K!"e(Btranscode\_loop()e$B$N%l%Y%k$G=hM}4X?t$r@ZBX$(e(B  
> e$B$k$[$&$,4JC1$J$h$&$K8+$($^$9!#e(B

e$B$3$l$Oe(B transcode\_loop e$B$NBe$o$j$K%(%s%3!\<%G%#%s%0Kh$K4X?t$re(B  
e$BMQ0U$9$k$H$$$&$3$F$G$7$g$&$+!#$=$&$G$“$l$P:#$NFb$K$O3N$+$Ke(B  
e$B$=$&$$$&Iw$K8+$($k$+$bCN$l$^$;$s$,!”\<B:]$K$b$C$H%(%i!\<=hM}e(B  
e$BEy$rDI2C$9$k$H%(%s%3!\<%G%#%s%0$4$H$KDI2C$9$k$3$H$K$J$j$^$9$N$G!"e(B  
e$B$I$s$I$sLLE]$K$J$j$^$9!#e(B

e$B$=$N$[$+$K!“%\_%K4X?t$NCf$Ge(B if e$B$r;H$o$J$$$G!”%F!\<%V%k$Ge(B  
e$BJ#?t$N4X?t$KJ,$1$k$H$$$&$3$H$b8!F$Cf$G$9!#$=$l$,$b$C$He(B  
e$BL;X$7$F$$$k$H$3$m$K6a$$$G$9$,!“:GBg4X?t2?8D$,I,MW$+$J$Ie(B  
e$B9M$($?Fb$K$H$j$”$($:0l8D$G0l1~$d$C$F$7$^$$$^$7$?!#e(B

e$B59$7$/$\*4j$$$7$^$9!#e(B Martin.

#-#-# Martin J. Du"rst, Assoc. Professor, Aoyama Gakuin University  
#-#-# [http://www.sw.it.aoyama.ac.jp](http://www.sw.it.aoyama.ac.jp)[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)
