Index: CodeEditor/CSyntax.cpp =================================================================== --- CodeEditor/CSyntax.cpp (revision 15120) +++ CodeEditor/CSyntax.cpp (working copy) @@ -79,7 +79,7 @@ else wbuf.Cat(*p++); } - return wbuf; + return WString(wbuf); } int LastC(const wchar *b, const wchar *e) Index: Core/CharSet.cpp =================================================================== --- Core/CharSet.cpp (revision 15120) +++ Core/CharSet.cpp (working copy) @@ -2053,7 +2053,7 @@ return FromUtf8(src, l); WStringBuffer result(l); ToUnicode(result, src, l, charset); - return result; + return WString(result); } WString ToUnicode(const String& src, byte charset) @@ -2068,7 +2068,7 @@ return ToUtf8(src, len); StringBuffer result(len); FromUnicode(result, src, len, charset, defchar); - return result; + return String(result); } String FromUnicodeBuffer(const wchar *src) @@ -2094,7 +2094,7 @@ return ToUtf8(ToUnicode(src, scharset)); StringBuffer result(slen); ConvertCharset(result, charset, src, scharset, slen); - return result; + return String(result); } WString InitCaps(const wchar *s) @@ -2125,7 +2125,7 @@ r[i] = ToLower(c); spc = !IsLeNum(c); } - return r; + return WString(r); } WString ToUpper(const WString& w) @@ -2133,7 +2133,7 @@ int l = w.GetLength(); WStringBuffer r(l); ToUpper(r, w, l); - return r; + return WString(r); } WString ToLower(const WString& w) @@ -2141,7 +2141,7 @@ int l = w.GetLength(); WStringBuffer r(l); ToLower(r, w, l); - return r; + return WString(r); } WString ToAscii(const WString& w) @@ -2149,7 +2149,7 @@ int l = w.GetLength(); WStringBuffer r(l); ToAscii(r, w, l); - return r; + return WString(r); } String InitCaps(const char *s, byte charset) @@ -2165,7 +2165,7 @@ int l = (int)strlen(s); StringBuffer r(l); ToUpper(r, s, l, charset); - return r; + return String(r); } String ToLower(const char *s, byte charset) @@ -2176,7 +2176,7 @@ int l = (int)strlen(s); StringBuffer r(l); ToLower(r, s, l, charset); - return r; + return String(r); } String ToAscii(const char *s, byte charset) @@ -2187,7 +2187,7 @@ int l = (int)strlen(s); StringBuffer r(l); ToAscii(r, s, l, charset); - return r; + return String(r); } String ToUpper(const String& s, byte charset) @@ -2198,7 +2198,7 @@ int l = s.GetLength(); StringBuffer r(l); ToUpper(r, s, l, charset); - return r; + return String(r); } String ToLower(const String& s, byte charset) @@ -2209,7 +2209,7 @@ int l = s.GetLength(); StringBuffer r(l); ToLower(r, s, l, charset); - return r; + return String(r); } String ToAscii(const String& s, byte charset) @@ -2220,7 +2220,7 @@ int l = s.GetLength(); StringBuffer r(l); ToAscii(r, s, l, charset); - return r; + return String(r); } String ToUpperAscii(const String& s, byte charset) @@ -2231,7 +2231,7 @@ int l = s.GetLength(); StringBuffer r(l); ToAscii(r, s, l, charset); - return r; + return String(r); } String ToLowerAscii(const String& s, byte charset) @@ -2242,7 +2242,7 @@ int l = s.GetLength(); StringBuffer r(l); ToAscii(r, s, l, charset); - return r; + return String(r); } bool IsDoubleWidth(int c) Index: Core/Format.cpp =================================================================== --- Core/Format.cpp (revision 15120) +++ Core/Format.cpp (working copy) @@ -64,7 +64,7 @@ if(dwd < width) memset(o, lpad, pad); memcpy8(o + pad, p, dwd); - return out; + return String(out); } String FormatInt(int i) @@ -382,7 +382,7 @@ } out.Cat(flags & FD_CAP_E ? 'E' : 'e'); out.Cat(FormatIntDec(exp, fill_exp, '0', flags & FD_SIGN_EXP)); - return out; + return String(out); } String FormatDate(Date date, const char *format, int language) @@ -577,7 +577,7 @@ StringBuffer q; q.SetLength(1000); q.SetLength(sprintf(q, '%' + f.format + f.id, (int)f.arg)); - return q; + return String(q); } String Int64Formatter(const Formatting& f) @@ -585,7 +585,7 @@ StringBuffer q; q.SetLength(1000); q.SetLength(sprintf(q, '%' + f.format + f.id, (int64)f.arg)); - return q; + return String(q); } String IntLowerAlphaFormatter(const Formatting& f) @@ -1148,7 +1148,7 @@ x.Cat('%'); x.Cat(*text++); } - return x; + return String(x); } } Index: Core/Huge.cpp =================================================================== --- Core/Huge.cpp (revision 15120) +++ Core/Huge.cpp (working copy) @@ -41,7 +41,7 @@ Panic("String is too big!"); StringBuffer sb((int)size); Get(~sb, 0, size); - return sb; + return String(sb); } } \ No newline at end of file Index: Core/InetUtil.cpp =================================================================== --- Core/InetUtil.cpp (revision 15120) +++ Core/InetUtil.cpp (working copy) @@ -124,7 +124,7 @@ else out << '%' << hex_digits[(*p >> 4) & 15] << hex_digits[*p & 15]; } - return out; + return String(out); } String UrlEncode(const char *s, int len) @@ -156,7 +156,7 @@ } else out.Cat(*p); - return out; + return String(out); } String UrlDecode(const char *s, int len) @@ -179,7 +179,7 @@ r.Cat(s[0]); len++; } - else + else if(s[0] == '\r') ; else @@ -209,7 +209,7 @@ } s++; } - return r; + return String(r); } String QPDecode(const char *s, bool underscore_to_space) @@ -232,7 +232,7 @@ else r.Cat(c); } - return r; + return String(r); } String Base64Encode(const char *_b, const char *_e) @@ -272,7 +272,7 @@ p[2] = encoder[(b[1] << 2) & 0x3C]; p[3] = '='; } - return s; + return String(s); } String Base64Encode(const char *b, int len) @@ -330,7 +330,7 @@ out.Cat((c[2] << 6) | (c[3] >> 0)); } } - return out; + return String(out); } String Base64Decode(const char *s, int len) Index: Core/Socket.cpp =================================================================== --- Core/Socket.cpp (revision 15120) +++ Core/Socket.cpp (working copy) @@ -834,7 +834,7 @@ if(!done && IsEof()) return String::GetVoid(); out.SetLength(done); - return out; + return String(out); } bool TcpSocket::GetAll(void *buffer, int len) Index: Core/SplitMerge.cpp =================================================================== --- Core/SplitMerge.cpp (revision 15120) +++ Core/SplitMerge.cpp (working copy) @@ -173,7 +173,7 @@ r.Cat(im[i]); next = true; } - return r; + return T(r); } String Join(const Vector& im, const String& delim, bool ignoreempty) { Index: Core/Stream.cpp =================================================================== --- Core/Stream.cpp (revision 15120) +++ Core/Stream.cpp (working copy) @@ -176,7 +176,7 @@ StringBuffer b(size); int n = Get(~b, size); b.SetCount(n); - return b; + return String(b); } String Stream::GetAll(int size) @@ -1218,7 +1218,7 @@ StringBuffer s((int)size); in.Get(s, (int)size); if(!in.IsError()) - return s; + return String(s); } } return String::GetVoid(); Index: Core/Utf.cpp =================================================================== --- Core/Utf.cpp (revision 15120) +++ Core/Utf.cpp (working copy) @@ -53,7 +53,7 @@ StringBuffer r; r.Reserve(len); FromUtf16_([&](const wchar *, dword code) { ToUtf8_([&](char c) { r.Cat(c); }, code); }, s, len); - return r; + return String(r); } int Utf16Len(const dword *s, int len) @@ -76,7 +76,7 @@ r.Reserve(len); for(const dword *lim = s + len; s < lim; s++) ToUtf16_([&](wchar c) { r.Cat(c); }, *s); - return r; + return WString(r); } int Utf16Len(const char *s, int len) @@ -95,7 +95,7 @@ { WStringBuffer r; FromUtf8_([&](const byte *, dword code) { ToUtf16_([&](wchar c) { r.Cat(c); }, code); }, s, len); - return r; + return WString(r); } int Utf32Len(const char *s, int len) @@ -146,7 +146,7 @@ while(s < lim) *t++ = (byte)*s < 128 ? *s++ : ToAscii(FetchUtf8(s, lim)); r.SetLength(int(t - ~r)); - return r; + return String(r); } String Utf8ToUpperAscii(const String& src) @@ -160,7 +160,7 @@ *t++ = (byte)*s <= 'Z' ? *s++ : ToUpperAscii(FetchUtf8(s, lim)); } r.SetLength(int(t - ~r)); - return r; + return String(r); } String Utf8ToLowerAscii(const String& src) @@ -173,7 +173,7 @@ while(s < lim) *t++ = ToLowerAscii(FetchUtf8(s, lim)); r.SetLength(int(t - ~r)); - return r; + return String(r); } }; Index: Core/Util.cpp =================================================================== --- Core/Util.cpp (revision 15120) +++ Core/Util.cpp (working copy) @@ -392,13 +392,13 @@ for(;;) { for(int q = 0; q < sep; q++) { if(i >= count) - return b; + return String(b); *t++ = itoc[(s[i] & 0xf0) >> 4]; *t++ = itoc[s[i] & 0x0f]; i++; } if(i >= count) - return b; + return String(b); *t++ = sepchr; } } @@ -467,7 +467,7 @@ else r.Cat(*s++); } - return r; + return String(r); } String NormalizeSpaces(const char *s, const char *end) @@ -485,7 +485,7 @@ else r.Cat(*s++); } - return r; + return String(r); } String CsvString(const String& text) @@ -569,7 +569,7 @@ else result.Cat(b, s); } - return result; + return String(result); } int ChNoInvalid(int c) @@ -599,7 +599,7 @@ if(q <= 0) return src; b.SetCount(q); - return b; + return String(b); } String ToSystemCharset(const String& src) Index: Core/Vcont.cpp =================================================================== --- Core/Vcont.cpp (revision 15120) +++ Core/Vcont.cpp (working copy) @@ -107,7 +107,7 @@ StringBuffer ss; for(int i = GetLast(); i >= 0; i--) ss << FormatIntHex(bp[i]); - return ss; + return String(ss); } void Bits::Serialize(Stream& s) Index: Core/Win32Util.cpp =================================================================== --- Core/Win32Util.cpp (revision 15120) +++ Core/Win32Util.cpp (working copy) @@ -61,7 +61,7 @@ StringBuffer temp(count); for(char *p = temp, *e = p + count; p < e;) *p++ = (char)*buffer++; - return temp; + return String(temp); } String AsString(const wchar_t *buffer, const wchar_t *end) { @@ -90,7 +90,7 @@ len--; raw_len.SetLength(len); RegCloseKey(key); - return raw_len; + return String(raw_len); } int GetWinRegInt(const char *value, const char *path, HKEY base_key, dword wow) { Index: Core/XML.cpp =================================================================== --- Core/XML.cpp (revision 15120) +++ Core/XML.cpp (working copy) @@ -24,7 +24,7 @@ StringBuffer result; for(; *s; s++) sDeXmlChar(result, *s, charset, escapelf); - return result; + return String(result); } String DeXml(const char *s, const char *end, byte charset, bool escapelf) @@ -34,7 +34,7 @@ StringBuffer result; for(; s < end; s++) sDeXmlChar(result, *s, charset, escapelf); - return result; + return String(result); } String DeXml(const String& s, byte charset, bool escapelf) @@ -51,7 +51,7 @@ if(standalone) r << " standalone=\"" << standalone << "\""; r << " ?>\r\n"; - return r; + return String(r); } String XmlPI(const char *text) @@ -58,7 +58,7 @@ { StringBuffer r; r << "\r\n"; - return r; + return String(r); } String XmlDecl(const char *text) @@ -65,7 +65,7 @@ { StringBuffer r; r << "\r\n"; - return r; + return String(r); } String XmlDocType(const char *text) @@ -82,7 +82,7 @@ { StringBuffer out; out << "\r\n"; - return out; + return String(out); } String XmlTag::operator()() @@ -120,7 +120,7 @@ else if(first) { r << text << end; - return r; + return String(r); } first = false; wasslash = false; @@ -142,7 +142,7 @@ if(!first) r << "\r\n"; r << end; - return r; + return String(r); } String XmlTag::Text(const char *text, byte charset) @@ -707,7 +707,7 @@ out.Cat(t); else if(IsEnd()) { PassEnd(); - return out; + return String(out); } else Skip(); Index: Core/parser.cpp =================================================================== --- Core/parser.cpp (revision 15120) +++ Core/parser.cpp (working copy) @@ -196,7 +196,7 @@ result.Cat(*term++); } DoSpaces(); - return result; + return String(result); } bool CParser::IsInt() const { @@ -381,7 +381,7 @@ if(*term == delim) { term++; DoSpaces(); - return result; + return String(result); } else if(*term == '\\') { @@ -452,16 +452,16 @@ if((byte)*term < ' ' && *term != '\t') { if(chkend) { ThrowError("Unterminated string"); - return result; + return String(result); } if(*term == '\0') - return result; + return String(result); } result.Cat(*term++); } } DoSpaces(); - return result; + return String(result); } String CParser::ReadOneString(bool chkend) @@ -700,7 +700,7 @@ s++; } t.Cat('\"'); - return t; + return String(t); } String AsCString(const char *s, int linemax, const char *linepfx, dword flags) Index: Core/z.cpp =================================================================== --- Core/z.cpp (revision 15120) +++ Core/z.cpp (working copy) @@ -490,7 +490,7 @@ int clen = LZ4_compress_default((const char *)s, ~b + sizeof(int), sz, (int)maxsize); b.SetCount(clen + sizeof(int)); b.Shrink(); - return b; + return String(b); } String FastCompress(const String& s) @@ -503,7 +503,7 @@ int sz = *(int *)~data; StringBuffer b(sz); LZ4_decompress_safe(~data + sizeof(int), b, data.GetCount() - sizeof(int), sz); - return b; + return String(b); } // following function is used in both plugin/lz4 and plugin/zstd Index: CppBase/Parser.cpp =================================================================== --- CppBase/Parser.cpp (revision 15120) +++ CppBase/Parser.cpp (working copy) @@ -483,7 +483,7 @@ spc = true; p++; } - return r; + return String(r); } String Parser::Name(String& name, bool& castoper, bool& oper) Index: CppBase/cpp.cpp =================================================================== --- CppBase/cpp.cpp (revision 15120) +++ CppBase/cpp.cpp (working copy) @@ -100,7 +100,7 @@ prefix_macro = bid; else prefix_macro = String(' ', 1) + bid; // do not want to emit grounding in body - return r; + return String(r); } else if(*s == '\"' || *s == '\'') @@ -147,7 +147,7 @@ else r.Cat(*s++); } - return r; + return String(r); } void Cpp::DoFlatInclude(const String& header_path) Index: CtrlCore/MetaFile.cpp =================================================================== --- CtrlCore/MetaFile.cpp (revision 15120) +++ CtrlCore/MetaFile.cpp (working copy) @@ -130,7 +130,7 @@ int size = ::GetEnhMetaFileBits(hemf, 0, 0); StringBuffer b(size); ::GetEnhMetaFileBits(hemf, size, (BYTE *)~b); - return b; + return String(b); } void WinMetaFile::Serialize(Stream& s) { Index: CtrlCore/Win32Clip.cpp =================================================================== --- CtrlCore/Win32Clip.cpp (revision 15120) +++ CtrlCore/Win32Clip.cpp (working copy) @@ -408,7 +408,7 @@ byte *p = (byte *)~b; memcpy(p, &header, sizeof(header)); memcpy(p + sizeof(header), ~img, 4 * img.GetLength()); - return b; + return String(b); } String sImage(const Value& image) Index: CtrlLib/ChWin32.cpp =================================================================== --- CtrlLib/ChWin32.cpp (revision 15120) +++ CtrlLib/ChWin32.cpp (working copy) @@ -194,7 +194,7 @@ RawCat(key, part); RawCat(key, state); RawCat(key, sz); - return key; + return String(key); } virtual Image Make() const { Rect rr(sz); Index: CtrlLib/Text.cpp =================================================================== --- CtrlLib/Text.cpp (revision 15120) +++ CtrlLib/Text.cpp (working copy) @@ -678,7 +678,7 @@ if(size == 0) break; pos = 0; } - return r; + return WString(r); } String TextCtrl::Get(int64 pos, int size, byte charset) const @@ -707,7 +707,7 @@ if(size == 0) break; pos = 0; } - return r; + return String(r); } return FromUnicode(GetW(pos, size), charset); } Index: Draw/DrawText.cpp =================================================================== --- Draw/DrawText.cpp (revision 15120) +++ Draw/DrawText.cpp (working copy) @@ -17,7 +17,7 @@ *t++ = *s++; n--; } - return b; + return WString(b); } #endif return ToUnicode(s, n, cs); Index: Draw/ImageBlit.cpp =================================================================== --- Draw/ImageBlit.cpp (revision 15120) +++ Draw/ImageBlit.cpp (working copy) @@ -79,7 +79,7 @@ } } } - return r; + return String(r); } int Premultiply(RGBA *t, const RGBA *s, int len) Index: Draw/MakeCache.cpp =================================================================== --- Draw/MakeCache.cpp (revision 15120) +++ Draw/MakeCache.cpp (working copy) @@ -13,7 +13,7 @@ s.Cat(typeid(*m).name()); RawCat(s, paintonly); s.Cat(m->Key()); - return s; + return String(s); } virtual int Make(Value& object) const { Image img = m->Make(); @@ -140,7 +140,7 @@ RawCat(h, sz.cy); RawCat(h, img.GetSerialId()); RawCat(h, filter); - return h; + return String(h); } virtual Image Make() const { @@ -195,7 +195,7 @@ StringBuffer h; RawCat(h, color); RawCat(h, img.GetSerialId()); - return h; + return String(h); } virtual Image Make() const { Index: Draw/SDrawText.cpp =================================================================== --- Draw/SDrawText.cpp (revision 15120) +++ Draw/SDrawText.cpp (working copy) @@ -28,7 +28,7 @@ RawCat(h, angle); RawCat(h, color); RawCat(h, yy); - return h; + return String(h); } virtual Image Make() const { Index: Esc/EscArray.cpp =================================================================== --- Esc/EscArray.cpp (revision 15120) +++ Esc/EscArray.cpp (working copy) @@ -106,7 +106,7 @@ s.Cat(c); } } - return s; + return WString(s); } void EscValue::InitString(const WString& s) Index: Esc/EscValue.cpp =================================================================== --- Esc/EscValue.cpp (revision 15120) +++ Esc/EscValue.cpp (working copy) @@ -280,7 +280,7 @@ r << lambda->arg[i]; } r << ")\n" << lambda->code; - return r; + return String(r); case ESC_MAP: r << ind << "{ "; int c = min(map->map.GetCount(), 100); Index: Oracle/Oci8.cpp =================================================================== --- Oracle/Oci8.cpp (revision 15120) +++ Oracle/Oci8.cpp (working copy) @@ -1707,7 +1707,7 @@ out.SetCount(nchars); Seek(0); Stream::Get(out, 2 * nchars); - return out; + return WString(out); } void OracleClob::Write(const WString& w) Index: PdfDraw/PdfDraw.cpp =================================================================== --- PdfDraw/PdfDraw.cpp (revision 15120) +++ PdfDraw/PdfDraw.cpp (working copy) @@ -277,7 +277,7 @@ b.Cat(*s++); } b.Cat(')'); - return b; + return String(b); } void PdfDraw::PutFontHeight(int fi, double ht) Index: RichText/EncodeHTML.cpp =================================================================== --- RichText/EncodeHTML.cpp (revision 15120) +++ RichText/EncodeHTML.cpp (working copy) @@ -363,7 +363,7 @@ PNGEncoder png; png.SaveFile(AppendFileName(outdir, lname), object.ToImage(psz)); } - return html; + return String(html); } String EncodeHtml(const RichText& text, Index& css, Index: RichText/EncodeQtf.cpp =================================================================== --- RichText/EncodeQtf.cpp (revision 15120) +++ RichText/EncodeQtf.cpp (working copy) @@ -562,7 +562,7 @@ r.Cat(*s); } } - return r; + return String(r); } String DeQtfLf(const char *s) { @@ -580,7 +580,7 @@ r.Cat("-|"); s++; } - return r; + return String(r); } RichText AsRichText(const RichObject& obj) Index: RichText/ParaPaint.cpp =================================================================== --- RichText/ParaPaint.cpp (revision 15120) +++ RichText/ParaPaint.cpp (working copy) @@ -141,7 +141,7 @@ RawCat(b, object.GetSerialId()); RawCat(b, sz); RawCat(b, context); - return b; + return String(b); } Image RichObjectImageMaker::Make() const Index: Sql/SqlCode.cpp =================================================================== --- Sql/SqlCode.cpp (revision 15120) +++ Sql/SqlCode.cpp (working copy) @@ -10,7 +10,7 @@ StringBuffer b(sizeof(T) + 1); b[0] = code; memcpy(~b + 1, &value, sizeof(T)); - return b; + return String(b); } template @@ -327,7 +327,7 @@ b.Reserve(s.GetLength() + 100); const char *q = s; SqlCompile(q, &b, dialect, NULL); - return b; + return String(b); } #ifndef NOAPPSQL @@ -370,7 +370,7 @@ b[0] = code; memcpy(~b + 1, &l, sizeof(int)); memcpy(~b + 1 + sizeof(int), s, l); - return b; + return String(b); } String SqlFormat(const char *s, int l) Index: Sql/SqlSet.cpp =================================================================== --- Sql/SqlSet.cpp (revision 15120) +++ Sql/SqlSet.cpp (working copy) @@ -48,7 +48,7 @@ return text; StringBuffer out; out << SqlCode(cond, "(")() << text << SqlCode(cond, ")")(); - return out; + return String(out); } SqlSet& SqlSet::Cat(const SqlVal& val) { Index: Sql/SqlVal.cpp =================================================================== --- Sql/SqlVal.cpp (revision 15120) +++ Sql/SqlVal.cpp (working copy) @@ -77,7 +77,7 @@ return text; StringBuffer out; out << SqlCode(cond, "(")() << text << SqlCode(cond, ")")(); - return out; + return String(out); } void SqlS::Init(const SqlS& a, const char *o, int olen, const SqlS& b, int pr, int prb) Index: ide/Browser/CodeRef.cpp =================================================================== --- ide/Browser/CodeRef.cpp (revision 15120) +++ ide/Browser/CodeRef.cpp (working copy) @@ -158,7 +158,7 @@ } s++; } - return r; + return String(r); } static int sSplitT(int c) { Index: ide/Browser/File.cpp =================================================================== --- ide/Browser/File.cpp (revision 15120) +++ ide/Browser/File.cpp (working copy) @@ -97,7 +97,7 @@ StringBuffer r; r << "topic " << AsCString(title) << ";\r\n"; r << AsQTF(text, CHARSET_UTF8, QTF_BODY|QTF_ALL_STYLES|QTF_CRLF); - return r; + return String(r); } String WriteTopicI(const char *title, const RichText& text) @@ -121,7 +121,7 @@ r << "\r\n"; } r << "\r\n\r\n"; - return r; + return String(r); } void SaveGroupInc(const String& grouppath) Index: ide/Core/Core.cpp =================================================================== --- ide/Core/Core.cpp (revision 15120) +++ ide/Core/Core.cpp (working copy) @@ -532,7 +532,7 @@ "int " << ident << "_length = " << b_length << ";\n\n"; } } - return fo; + return String(fo); } void CopyFile(const String& d, const String& s, bool brc) Index: ide/Core/Package.cpp =================================================================== --- ide/Core/Package.cpp (revision 15120) +++ ide/Core/Package.cpp (working copy) @@ -14,7 +14,7 @@ while(IsUppValueChar(p.PeekChar())) v.Cat(p.GetChar()); p.Spaces(); - return v; + return String(v); } static bool sMatchOr(CParser& p, const Vector& flag); Index: ide/idetool.cpp =================================================================== --- ide/idetool.cpp (revision 15120) +++ ide/idetool.cpp (working copy) @@ -325,7 +325,7 @@ r.SetCount(s.GetCount()); for(int i = 0; i < s.GetCount(); i++) r[i] = IsUpper(s[i]) ? ToLower(s[i]) : ToUpper(s[i]); - return r; + return WString(r); } void Ide::SwapCase() Index: plugin/bmp/Icon.cpp =================================================================== --- plugin/bmp/Icon.cpp (revision 15120) +++ plugin/bmp/Icon.cpp (working copy) @@ -216,7 +216,7 @@ Poke32le(entry + OFFSETOF(BMP_ICONDIRENTRY, dwImageOffset), out_offset); } } - return out; + return String(out); } }