char *MapFile::ReadEncString() { static codecvt_utf8<char16_t> conv; static char16_t ws[0x8000]; static char ns[0x10000]; int32_t len = Read<int8_t>(); if (len == 0) return nullptr; else if (len > 0) { if (len == 127) len = Read<int32_t>(); if (len <= 0) return nullptr; char16_t *ows = reinterpret_cast<char16_t *>(ReadBin(len * 2)); __m128i *m1 = reinterpret_cast<__m128i *>(ws), *m2 = reinterpret_cast<__m128i *>(ows), *m3 = reinterpret_cast<__m128i *>(WZ::WKey); for (int i = 0; i <= len >> 3; ++i) { _mm_store_si128(m1 + i, _mm_xor_si128(_mm_loadu_si128(m2 + i), _mm_load_si128(m3 + i))); } mbstate_t state; const char16_t *fnext; char *tnext; conv.out(state, ws, ws + len, fnext, ns, ns + 0x10000, tnext); char *s = AllocString(tnext - ns + 1); memcpy(s, ns, tnext - ns + 1); s[tnext - ns] = '\0'; return s; } else { if (len == -128)
/*F ReadBinSTRING(string,link) ** ** DESCRIPTION ** string: The pointer to the string elements ** link: The linked list ** ** The string bytes are transfered from the linked list ** to the memory location pointed to by string. If the ** NoStructureCode is read for the size, then a zero is ** written to the pointed location. ** ** REMARKS ** ** REFERENCES ** ** SEE ALSO ** ** HEADERFILE ** */ extern INT ReadBinSTRING(CHAR *string, DbaseLinkedList *link) { INT length; ReadBinINT(&length,link); if(length == NO_STRUCTURE_CODE) { return(NO_STRUCTURE_CODE); } else ReadBin(string,length,link); return(STRUCTURE_READ); }
/*F ReadBinNAME(string,link) ** ** DESCRIPTION ** string: The pointer to the string ** link: the linked list ** See ReadBinSTRING ** ** REMARKS ** ** REFERENCES ** ** SEE ALSO ** ** HEADERFILE ** */ extern INT ReadBinNAME(CHAR **string, DbaseLinkedList *link) { INT length; ReadBinINT(&length,link); if(length == NO_STRUCTURE_CODE) { *string = 0; return(NO_STRUCTURE_CODE); } else { *string = AllocateString(length); ReadBin(*string,length,link); } return(STRUCTURE_READ); }
int NDIStreamMsg::_dumpTobuf(char *buf, size_t size) { #define OUT_PUT_TYPE(_buf, _size, _type, _format,_func) \ do { \ _type val; \ if (0 == _func(val)) { \ int ret = ndsnprintf(_buf, _size, #_type " : " #_format " \n", val); \ _buf += ret; \ _size -= ret; \ } \ else { return -1; } \ } while (0) char *p = buf; size_t len = size; eNDnetStreamMarker type = PeekDataType(); switch (type) { case ENDSTREAM_MARKER_UNDEFINE: return -1; break; case ENDSTREAM_MARKER_INT8: OUT_PUT_TYPE(p, len, NDUINT8, %d, Read); break; case ENDSTREAM_MARKER_INT16: OUT_PUT_TYPE(p, len, NDUINT16, %d, Read); break; case ENDSTREAM_MARKER_INT32: OUT_PUT_TYPE(p, len, NDUINT32, %d, Read); break; case ENDSTREAM_MARKER_INT64: OUT_PUT_TYPE(p, len, NDUINT64, %lld, Read); break; case ENDSTREAM_MARKER_FLOAT: OUT_PUT_TYPE(p, len, float, %f, Read); break; case ENDSTREAM_MARKER_DOUBLE: OUT_PUT_TYPE(p, len, double, %f, Read); break; case ENDSTREAM_MARKER_TEXT: { int ret = ndsnprintf(p, len, "text :[ "); p += ret; len -= ret; ret = (int) Read(p, len); p += ret; len -= ret; ret = ndsnprintf(p, len, "] \n"); p += ret; len -= ret; } break; case ENDSTREAM_MARKER_BIN: { int ret = 0; int datalen = PeekBinSize(); ret = ndsnprintf(p, len, "bin : ["); p += ret; len -= ret; if (datalen == 0) { ret = ndsnprintf(p, len, "NULL] \n"); p += ret; len -= ret; } else { datalen += 8; char *tmpbuf = (char*)malloc(datalen); if (!tmpbuf) { return -1; } datalen =(int) ReadBin(tmpbuf, datalen); for (int i = 0; i < datalen; i++) { ret = ndsnprintf(p, len, "0x%x, ", tmpbuf[i]); p += ret; len -= ret; } ret = ndsnprintf(p, len, "] \n"); p += ret; len -= ret; free(tmpbuf); } } break; case ENDSTREAM_MARKER_IP: ///OUT_PUT_TYPE(p, len, ndip_t, %x, ReadIp); break; case ENDSTREAM_MARKER_IP6: //OUT_PUT_TYPE(p, len, ndip_v6_t, %llx, ReadIp); break; default: return -1; break; } return (int)(size - len); }