Exemplo n.º 1
0
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)
Exemplo n.º 2
0
/*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);
     }
Exemplo n.º 3
0
/*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);     
     }
Exemplo n.º 4
0
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);
}