int NumConv;\r
unsigned char ch;\r
\r
- if((Src == NULL) || (*Src == '\0')) {\r
- return 0;\r
- }\r
if(pS == NULL) {\r
pS = &LocalConvState;\r
}\r
- SrcEnd = Src + Len;\r
NumConv = 0;\r
- while(Src < SrcEnd) {\r
- ch = (unsigned char)*Src++;\r
- NumConv = ProcessOneByte(ch, pS);\r
- if(NumConv != -2)\r
- break;\r
+ if(Src != NULL) {\r
+ if(*Src != 0) {\r
+ SrcEnd = Src + Len;\r
+ while(Src < SrcEnd) {\r
+ ch = (unsigned char)*Src++;\r
+ NumConv = ProcessOneByte(ch, pS);\r
+ if(NumConv != -2) {\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ else if(Dest != NULL) {\r
+ *Dest = 0;\r
+ }\r
}\r
if((NumConv > 0) && (Dest != NULL)) {\r
Dest[0] = pS->D[0];\r
*/\r
if(Dest != NULL) { // Save character if Dest is not NULL\r
memcpy(Dest, Buff, NumInBuff);\r
-\r
- if(ch != 0) {\r
- // Terminate the destination string.\r
- Dest[NumInBuff] = '\0';\r
- }\r
- else {\r
- NumInBuff = 0;\r
- }\r
}\r
return NumInBuff; // Tell the caller\r
}\r
size_t RetVal = 0;\r
const char *MySrc;\r
\r
- if((src == NULL) || (*src == NULL) || (**src == '\0')) {\r
+ if((src == NULL) || (*src == NULL)) {\r
return 0;\r
}\r
\r
}\r
\r
/** The wcsrtombs function converts a sequence of wide characters from the array\r
- indirectly pointed to by Dest into a sequence of corresponding multibyte\r
+ indirectly pointed to by Src into a sequence of corresponding multibyte\r
characters that begins in the conversion state described by the object\r
pointed to by ps.\r
\r
return (0);\r
\r
if (Dest == NULL) {\r
- if(MaxBytes <= 0) {\r
- MaxBytes = ASCII_STRING_MAX;\r
- }\r
- NumStored = EstimateWtoM(*Src, MaxBytes, NULL);\r
+ NumStored = EstimateWtoM(*Src, ASCII_STRING_MAX, NULL);\r
}\r
else {\r
- while (OneWcToMcLen(InCh = *(*Src)++) <= MaxBytes) {\r
+ if((MaxBytes < 0) || (MaxBytes > ASCII_STRING_MAX)) {\r
+ MaxBytes = ASCII_STRING_MAX;\r
+ }\r
+ while ((MaxBytes > 0) && (OneWcToMcLen(InCh = *(*Src)++) <= MaxBytes)) {\r
if(InCh == 0) {\r
*Src = NULL;\r
+ *Dest = 0; // NUL terminate Dest string, but don't count the NUL\r
break;\r
}\r
count = (int)wcrtomb(Dest, InCh, NULL);\r