MCPcopy Create free account
hub / github.com/LegacyUpdate/LegacyUpdate / TruncateStringUTF16LE

Function TruncateStringUTF16LE

nsisplugin/Exec.c:77–98  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

75#define CharNextW MyCharNext
76
77static void TruncateStringUTF16LE(LPWSTR Buffer, SIZE_T Length, LPCWSTR Overflow, SIZE_T lenOver) {
78 if (Length) {
79 LPWSTR p = &Buffer[Length - 1];
80 UINT stripBaseCharIfCuttingCombining = TRUE;
81
82 // CharNextW is buggy on XP&2003 but we don't care enough to call GetStringTypeW (http://archives.miloush.net/michkap/archive/2005/01/30/363420.html)
83 if (stripBaseCharIfCuttingCombining && lenOver) {
84 WCHAR buf[] = { *p, Overflow[0], lenOver > 1 ? Overflow[1] : L' ', L'\0' };
85 for (;;) {
86 BOOL comb = CharNextW(buf) > buf + 1;
87 if (!comb || p < Buffer) break;
88 *((WORD*)((BYTE*)&buf[1])) = *((WORD*)((BYTE*)&buf[0]));
89 buf[0] = *p;
90 *p-- = L'\0';
91 }
92 }
93
94 if (IsLeadSurrogateUTF16(*p)) {
95 *p = L'\0'; // Avoid incomplete pair
96 }
97 }
98}
99
100static void TruncateStringMB(UINT Codepage, LPSTR Buffer, SIZE_T Length, unsigned short OverflowCh) {
101 if (Length) {

Callers 1

ExecScriptFunction · 0.85

Calls 1

IsLeadSurrogateUTF16Function · 0.85

Tested by

no test coverage detected