mirror of
https://github.com/stefanocasazza/ULib.git
synced 2025-10-05 19:18:01 +08:00
optimizations + bug fixing
This commit is contained in:
parent
01a9d05b5b
commit
1cc10c952b
|
@ -321,6 +321,8 @@ extern U_EXPORT int32_t u_printf_string_max_length;
|
||||||
|
|
||||||
U_EXPORT void u__printf(int fd, const char* restrict format, ...);
|
U_EXPORT void u__printf(int fd, const char* restrict format, ...);
|
||||||
U_EXPORT void u_internal_print(bool abrt, const char* restrict format, ...);
|
U_EXPORT void u_internal_print(bool abrt, const char* restrict format, ...);
|
||||||
|
|
||||||
|
U_EXPORT uint32_t u_sprintc( char* restrict buffer, unsigned char c);
|
||||||
U_EXPORT uint32_t u__snprintf( char* restrict buffer, uint32_t buffer_size, const char* restrict format, ...);
|
U_EXPORT uint32_t u__snprintf( char* restrict buffer, uint32_t buffer_size, const char* restrict format, ...);
|
||||||
U_EXPORT uint32_t u__vsnprintf(char* restrict buffer, uint32_t buffer_size, const char* restrict format, va_list argp);
|
U_EXPORT uint32_t u__vsnprintf(char* restrict buffer, uint32_t buffer_size, const char* restrict format, va_list argp);
|
||||||
|
|
||||||
|
|
|
@ -24,14 +24,13 @@ extern "C" {
|
||||||
* ---------------------------------------------------------------------------
|
* ---------------------------------------------------------------------------
|
||||||
* Encode-Decode escape sequences into a buffer, the following are recognized:
|
* Encode-Decode escape sequences into a buffer, the following are recognized:
|
||||||
* ---------------------------------------------------------------------------
|
* ---------------------------------------------------------------------------
|
||||||
* \0 NUL
|
|
||||||
* \r CR carriage return (\015 13 D)
|
|
||||||
* \n LF newline (\012 10 A)
|
|
||||||
* \t HT horizontal tab (\011 9 9)
|
|
||||||
* \b BS backspace (\010 8 8)
|
|
||||||
* \f FF formfeed (\014 12 C)
|
|
||||||
* \v VT vertical tab (\013 11 B)
|
|
||||||
* \a BEL (\007 7 7)
|
* \a BEL (\007 7 7)
|
||||||
|
* \b BS backspace (\010 8 8)
|
||||||
|
* \t HT horizontal tab (\011 9 9)
|
||||||
|
* \n LF newline (\012 10 A)
|
||||||
|
* \v VT vertical tab (\013 11 B)
|
||||||
|
* \f FF formfeed (\014 12 C)
|
||||||
|
* \r CR carriage return (\015 13 D)
|
||||||
* \e ESC character (\033 27 1B)
|
* \e ESC character (\033 27 1B)
|
||||||
*
|
*
|
||||||
* \u four-hex-digits (unicode char)
|
* \u four-hex-digits (unicode char)
|
||||||
|
@ -41,10 +40,7 @@ extern "C" {
|
||||||
* ---------------------------------------------------------------------------
|
* ---------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
U_EXPORT uint32_t u_sprintc(char* restrict buffer, unsigned char c);
|
U_EXPORT uint32_t u_escape_encode(const unsigned char* restrict s, uint32_t n, char* restrict result, uint32_t max_length);
|
||||||
U_EXPORT unsigned char u_escape_decode_ptr(const char** restrict s);
|
|
||||||
|
|
||||||
U_EXPORT uint32_t u_escape_encode(const unsigned char* restrict s, uint32_t n, char* restrict result, uint32_t max_length, bool json);
|
|
||||||
U_EXPORT uint32_t u_escape_decode(const char* restrict s, uint32_t n, unsigned char* restrict result);
|
U_EXPORT uint32_t u_escape_decode(const char* restrict s, uint32_t n, unsigned char* restrict result);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
|
@ -495,6 +495,7 @@ protected:
|
||||||
private:
|
private:
|
||||||
static void appendNode(UValue* parent, UValue* child);
|
static void appendNode(UValue* parent, UValue* child);
|
||||||
static bool readValue(UTokenizer& tok, UValue* value) U_NO_EXPORT;
|
static bool readValue(UTokenizer& tok, UValue* value) U_NO_EXPORT;
|
||||||
|
static uint32_t emitString(const unsigned char* ptr, uint32_t sz, char* presult) U_NO_EXPORT;
|
||||||
|
|
||||||
template <class T> friend class UVector;
|
template <class T> friend class UVector;
|
||||||
template <class T> friend class UHashMap;
|
template <class T> friend class UHashMap;
|
||||||
|
|
|
@ -77,6 +77,7 @@ class UDES3;
|
||||||
class UHTTP;
|
class UHTTP;
|
||||||
class UValue;
|
class UValue;
|
||||||
class UCache;
|
class UCache;
|
||||||
|
class UValue;
|
||||||
class UString;
|
class UString;
|
||||||
class UBase64;
|
class UBase64;
|
||||||
class UEscape;
|
class UEscape;
|
||||||
|
@ -612,6 +613,7 @@ private:
|
||||||
friend class UDES3;
|
friend class UDES3;
|
||||||
friend class UHTTP;
|
friend class UHTTP;
|
||||||
friend class UCache;
|
friend class UCache;
|
||||||
|
friend class UValue;
|
||||||
friend class UString;
|
friend class UString;
|
||||||
friend class UBase64;
|
friend class UBase64;
|
||||||
friend class UEscape;
|
friend class UEscape;
|
||||||
|
|
|
@ -22,14 +22,13 @@
|
||||||
* ---------------------------------------------------------------------------
|
* ---------------------------------------------------------------------------
|
||||||
* Encode-Decode escape sequences into a buffer, the following are recognized:
|
* Encode-Decode escape sequences into a buffer, the following are recognized:
|
||||||
* ---------------------------------------------------------------------------
|
* ---------------------------------------------------------------------------
|
||||||
* \0 NUL
|
|
||||||
* \r CR carriage return (\015 13 D)
|
|
||||||
* \n LF newline (\012 10 A)
|
|
||||||
* \t HT horizontal tab (\011 9 9)
|
|
||||||
* \b BS backspace (\010 8 8)
|
|
||||||
* \f FF formfeed (\014 12 C)
|
|
||||||
* \v VT vertical tab (\013 11 B)
|
|
||||||
* \a BEL (\007 7 7)
|
* \a BEL (\007 7 7)
|
||||||
|
* \b BS backspace (\010 8 8)
|
||||||
|
* \t HT horizontal tab (\011 9 9)
|
||||||
|
* \n LF newline (\012 10 A)
|
||||||
|
* \v VT vertical tab (\013 11 B)
|
||||||
|
* \f FF formfeed (\014 12 C)
|
||||||
|
* \r CR carriage return (\015 13 D)
|
||||||
* \e ESC character (\033 27 1B)
|
* \e ESC character (\033 27 1B)
|
||||||
*
|
*
|
||||||
* \u four-hex-digits (unicode char)
|
* \u four-hex-digits (unicode char)
|
||||||
|
@ -41,21 +40,21 @@
|
||||||
|
|
||||||
struct U_EXPORT UEscape {
|
struct U_EXPORT UEscape {
|
||||||
|
|
||||||
static void encode(const char* s, uint32_t n, UString& buffer, bool json = false)
|
static void encode(const char* s, uint32_t n, UString& buffer)
|
||||||
{
|
{
|
||||||
U_TRACE(0, "UEscape::encode(%.*S,%u,%p,%b)", n, s, n, &buffer, json)
|
U_TRACE(0, "UEscape::encode(%.*S,%u,%p)", n, s, n, &buffer)
|
||||||
|
|
||||||
U_ASSERT(buffer.uniq())
|
U_ASSERT(buffer.uniq())
|
||||||
U_ASSERT(buffer.capacity() >= n)
|
U_ASSERT(buffer.capacity() >= n)
|
||||||
|
|
||||||
uint32_t sz = buffer.size();
|
uint32_t sz = buffer.size();
|
||||||
|
|
||||||
buffer.rep->_length = sz + u_escape_encode((const unsigned char*)s, n, buffer.c_pointer(sz), buffer.space(), json);
|
buffer.rep->_length = sz + u_escape_encode((const unsigned char*)s, n, buffer.c_pointer(sz), buffer.space());
|
||||||
|
|
||||||
U_INTERNAL_DUMP("buffer(%u) = %#V", buffer.size(), buffer.rep)
|
U_INTERNAL_DUMP("buffer(%u) = %#V", buffer.size(), buffer.rep)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void encode(const UString& s, UString& buffer, bool json = false) { encode(U_STRING_TO_PARAM(s), buffer, json); }
|
static void encode(const UString& s, UString& buffer) { encode(U_STRING_TO_PARAM(s), buffer); }
|
||||||
|
|
||||||
static void decode(const char* s, uint32_t n, UString& buffer)
|
static void decode(const char* s, uint32_t n, UString& buffer)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1248,6 +1248,129 @@ void u_internal_print(bool abrt, const char* restrict format, ...)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* --------------------------------------------------------------------
|
||||||
|
* Encode escape sequences into a buffer, the following are recognized:
|
||||||
|
* --------------------------------------------------------------------
|
||||||
|
* \a BEL (\007 7 7)
|
||||||
|
* \b BS backspace (\010 8 8)
|
||||||
|
* \t HT horizontal tab (\011 9 9)
|
||||||
|
* \n LF newline (\012 10 A)
|
||||||
|
* \v VT vertical tab (\013 11 B)
|
||||||
|
* \f FF formfeed (\014 12 C)
|
||||||
|
* \r CR carriage return (\015 13 D)
|
||||||
|
* \e ESC character (\033 27 1B)
|
||||||
|
*
|
||||||
|
* \DDD number formed of 1-3 octal digits
|
||||||
|
* --------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
uint32_t u_sprintc(char* restrict out, unsigned char c)
|
||||||
|
{
|
||||||
|
char* restrict cp;
|
||||||
|
|
||||||
|
U_INTERNAL_TRACE("u_sprintc(%d)", c)
|
||||||
|
|
||||||
|
if (c < 32)
|
||||||
|
{
|
||||||
|
*out++ = '\\';
|
||||||
|
|
||||||
|
switch (c)
|
||||||
|
{
|
||||||
|
case '\a': // 0x07
|
||||||
|
{
|
||||||
|
*out = 'a';
|
||||||
|
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
case '\b': // 0x08
|
||||||
|
{
|
||||||
|
*out = 'b';
|
||||||
|
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
case '\t': // 0x09
|
||||||
|
{
|
||||||
|
*out = 't';
|
||||||
|
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
case '\n': // 0x0A
|
||||||
|
{
|
||||||
|
*out = 'n';
|
||||||
|
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
case '\v': // 0x0B
|
||||||
|
{
|
||||||
|
*out = 'v';
|
||||||
|
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
case '\f': // 0x0C
|
||||||
|
{
|
||||||
|
*out = 'f';
|
||||||
|
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
case '\r': // 0x0D
|
||||||
|
{
|
||||||
|
*out = 'r';
|
||||||
|
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
case '\033': // 0x1B
|
||||||
|
{
|
||||||
|
*out = 'e';
|
||||||
|
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
default: goto next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (c == '"' || // 0x22
|
||||||
|
c == '\\') // 0x5C
|
||||||
|
{
|
||||||
|
*out++ = '\\';
|
||||||
|
*out = c;
|
||||||
|
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (c > 126)
|
||||||
|
{
|
||||||
|
*out++ = '\\';
|
||||||
|
|
||||||
|
/* \DDD number formed of 1-3 octal digits */
|
||||||
|
next:
|
||||||
|
cp = out + 3;
|
||||||
|
|
||||||
|
do {
|
||||||
|
*--cp = (c & 7) + '0';
|
||||||
|
|
||||||
|
c >>= 3;
|
||||||
|
}
|
||||||
|
while (c);
|
||||||
|
|
||||||
|
while (--cp >= out) *cp = '0';
|
||||||
|
|
||||||
|
return 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
*out = c;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef _MSWINDOWS_
|
#ifndef _MSWINDOWS_
|
||||||
static const char* tab_color[] = { U_RESET_STR,
|
static const char* tab_color[] = { U_RESET_STR,
|
||||||
U_BLACK_STR, U_RED_STR, U_GREEN_STR, U_YELLOW_STR,
|
U_BLACK_STR, U_RED_STR, U_GREEN_STR, U_YELLOW_STR,
|
||||||
|
|
|
@ -18,120 +18,13 @@
|
||||||
#include <ulib/base/utility.h>
|
#include <ulib/base/utility.h>
|
||||||
#include <ulib/base/coder/escape.h>
|
#include <ulib/base/coder/escape.h>
|
||||||
|
|
||||||
/**
|
uint32_t u_escape_encode(const unsigned char* restrict inptr, uint32_t len, char* restrict out, uint32_t max_output)
|
||||||
* ---------------------------------------------------------------------------
|
|
||||||
* Encode-Decode escape sequences into a buffer, the following are recognized:
|
|
||||||
* ---------------------------------------------------------------------------
|
|
||||||
* \0 NUL
|
|
||||||
* \r CR carriage return (\015 13 D)
|
|
||||||
* \n LF newline (\012 10 A)
|
|
||||||
* \t HT horizontal tab (\011 9 9)
|
|
||||||
* \b BS backspace (\010 8 8)
|
|
||||||
* \f FF formfeed (\014 12 C)
|
|
||||||
* \v VT vertical tab (\013 11 B)
|
|
||||||
* \a BEL (\007 7 7)
|
|
||||||
* \e ESC character (\033 27 1B)
|
|
||||||
*
|
|
||||||
* \u four-hex-digits (unicode char)
|
|
||||||
* \^C C = any letter (Control code)
|
|
||||||
* \xDD number formed of 1-2 hex digits
|
|
||||||
* \DDD number formed of 1-3 octal digits
|
|
||||||
* ---------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
uint32_t u_sprintc(char* restrict _buffer, unsigned char c)
|
|
||||||
{
|
{
|
||||||
U_INTERNAL_TRACE("u_sprintc(%d)", c)
|
|
||||||
|
|
||||||
switch (c)
|
|
||||||
{
|
|
||||||
case '\r':
|
|
||||||
{
|
|
||||||
*_buffer++ = '\\';
|
|
||||||
*_buffer = 'r';
|
|
||||||
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
case '\n':
|
|
||||||
{
|
|
||||||
*_buffer++ = '\\';
|
|
||||||
*_buffer = 'n';
|
|
||||||
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
case '\t':
|
|
||||||
{
|
|
||||||
*_buffer++ = '\\';
|
|
||||||
*_buffer = 't';
|
|
||||||
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
case '\b':
|
|
||||||
{
|
|
||||||
*_buffer++ = '\\';
|
|
||||||
*_buffer = 'b';
|
|
||||||
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
case '\f':
|
|
||||||
{
|
|
||||||
*_buffer++ = '\\';
|
|
||||||
*_buffer = 'f';
|
|
||||||
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
case '"':
|
|
||||||
case '\\':
|
|
||||||
{
|
|
||||||
*_buffer++ = '\\';
|
|
||||||
*_buffer = c;
|
|
||||||
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
if (c < 32 ||
|
|
||||||
c > 126)
|
|
||||||
{
|
|
||||||
/* \DDD number formed of 1-3 octal digits */
|
|
||||||
|
|
||||||
char* restrict cp = _buffer + 4;
|
|
||||||
|
|
||||||
*_buffer = '\\';
|
|
||||||
|
|
||||||
do {
|
|
||||||
*--cp = (c & 7) + '0';
|
|
||||||
|
|
||||||
c >>= 3;
|
|
||||||
}
|
|
||||||
while (c);
|
|
||||||
|
|
||||||
while (--cp > _buffer) *cp = '0';
|
|
||||||
|
|
||||||
return 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
*_buffer = c;
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t u_escape_encode(const unsigned char* restrict inptr, uint32_t len, char* restrict out, uint32_t max_output, bool json)
|
|
||||||
{
|
|
||||||
unsigned char c;
|
|
||||||
const unsigned char* restrict inend = inptr + len;
|
const unsigned char* restrict inend = inptr + len;
|
||||||
char* restrict outptr = out;
|
char* restrict outptr = out;
|
||||||
char* restrict outend = out + (max_output - 4);
|
char* restrict outend = out + (max_output - 4);
|
||||||
|
|
||||||
U_INTERNAL_TRACE("u_escape_encode(%.*s,%u,%p,%u,%d)", U_min(len,128), inptr, len, out, max_output, json)
|
U_INTERNAL_TRACE("u_escape_encode(%.*s,%u,%p,%u)", U_min(len,128), inptr, len, out, max_output)
|
||||||
|
|
||||||
U_INTERNAL_ASSERT_POINTER(out)
|
U_INTERNAL_ASSERT_POINTER(out)
|
||||||
U_INTERNAL_ASSERT_POINTER(inptr)
|
U_INTERNAL_ASSERT_POINTER(inptr)
|
||||||
|
@ -140,59 +33,10 @@ uint32_t u_escape_encode(const unsigned char* restrict inptr, uint32_t len, char
|
||||||
|
|
||||||
while (inptr < inend)
|
while (inptr < inend)
|
||||||
{
|
{
|
||||||
c = *inptr++;
|
outptr += u_sprintc(outptr, *inptr++);
|
||||||
|
|
||||||
if (c >= 32 &&
|
|
||||||
c <= 126)
|
|
||||||
{
|
|
||||||
if (u__isquote(c))
|
|
||||||
{
|
|
||||||
*outptr++ = '\\';
|
|
||||||
|
|
||||||
/* check for \u four-hex-digits (unicode char) */
|
|
||||||
|
|
||||||
if (json &&
|
|
||||||
c == '\\' &&
|
|
||||||
*inptr == 'u')
|
|
||||||
{
|
|
||||||
c = 'u';
|
|
||||||
|
|
||||||
++inptr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
*outptr++ = c;
|
|
||||||
|
|
||||||
goto check_max_output;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (json)
|
|
||||||
{
|
|
||||||
/* \u four-hex-digits (unicode char) */
|
|
||||||
|
|
||||||
*outptr++ = '\\';
|
|
||||||
*outptr++ = 'u';
|
|
||||||
*outptr++ = '0';
|
|
||||||
*outptr++ = '0';
|
|
||||||
*outptr++ = u_hex_upper[((c >> 4) & 0x0F)];
|
|
||||||
*outptr++ = u_hex_upper[( c & 0x0F)];
|
|
||||||
|
|
||||||
# ifdef DEBUG
|
|
||||||
goto check_max_output;
|
|
||||||
# else
|
|
||||||
continue;
|
|
||||||
# endif
|
|
||||||
}
|
|
||||||
|
|
||||||
outptr += u_sprintc(outptr, c);
|
|
||||||
|
|
||||||
check_max_output:
|
|
||||||
if (outptr >= outend)
|
if (outptr >= outend)
|
||||||
{
|
{
|
||||||
# ifdef DEBUG
|
|
||||||
if (json) U_INTERNAL_ASSERT_MSG(false, "overflow in encoding json string...")
|
|
||||||
# endif
|
|
||||||
|
|
||||||
*outptr++ = '.';
|
*outptr++ = '.';
|
||||||
*outptr++ = '.';
|
*outptr++ = '.';
|
||||||
*outptr++ = '.';
|
*outptr++ = '.';
|
||||||
|
@ -207,84 +51,29 @@ check_max_output:
|
||||||
return (outptr - out);
|
return (outptr - out);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* the s pointer is advanced past the escape sequence */
|
/**
|
||||||
|
* --------------------------------------------------------------------
|
||||||
unsigned char u_escape_decode_ptr(const char** restrict s)
|
* Decode escape sequences into a buffer, the following are recognized:
|
||||||
{
|
* --------------------------------------------------------------------
|
||||||
const char* restrict t = *s;
|
* \a BEL (\007 7 7)
|
||||||
int c = *t++;
|
* \b BS backspace (\010 8 8)
|
||||||
|
* \t HT horizontal tab (\011 9 9)
|
||||||
U_INTERNAL_TRACE("u_escape_decode_ptr(%s)", *s)
|
* \n LF newline (\012 10 A)
|
||||||
|
* \v VT vertical tab (\013 11 B)
|
||||||
switch (c)
|
* \f FF formfeed (\014 12 C)
|
||||||
{
|
* \r CR carriage return (\015 13 D)
|
||||||
case 'r': c = '\r'; break;
|
* \e ESC character (\033 27 1B)
|
||||||
case 'n': c = '\n'; break;
|
*
|
||||||
case 't': c = '\t'; break;
|
* \u four-hex-digits (unicode char)
|
||||||
case 'b': c = '\b'; break;
|
* \^C C = any letter (Control code)
|
||||||
case 'f': c = '\f'; break;
|
* \xDD number formed of 1-2 hex digits
|
||||||
case 'v': c = '\v'; break;
|
* \DDD number formed of 1-3 octal digits
|
||||||
case 'a': c = '\a'; break;
|
* ---------------------------------------------------------------------------
|
||||||
case 'e': c = '\033'; break;
|
*/
|
||||||
|
|
||||||
/* check control code */
|
|
||||||
|
|
||||||
case '^': c = u__toupper(*t++) - '@'; break;
|
|
||||||
|
|
||||||
/* check sequenza escape esadecimale */
|
|
||||||
|
|
||||||
case 'x':
|
|
||||||
{
|
|
||||||
if (u__isxdigit(*t))
|
|
||||||
{
|
|
||||||
c = u__hexc2int(*t++);
|
|
||||||
if (u__isxdigit(*t)) c = (c << 4) | u__hexc2int(*t++);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
/* check sequenza escape ottale */
|
|
||||||
|
|
||||||
case '0': case '1': case '2': case '3':
|
|
||||||
case '4': case '5': case '6': case '7':
|
|
||||||
{
|
|
||||||
c -= '0';
|
|
||||||
|
|
||||||
if (u__isoctal(*t))
|
|
||||||
{
|
|
||||||
c = (c << 3) | u__octc2int(*t++);
|
|
||||||
if (u__isoctal(*t)) c = (c << 3) | u__octc2int(*t++);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
/* \u four-hex-digits (unicode char) */
|
|
||||||
|
|
||||||
case 'u':
|
|
||||||
{
|
|
||||||
U_INTERNAL_ASSERT_EQUALS(t[0], '0')
|
|
||||||
U_INTERNAL_ASSERT_EQUALS(t[1], '0')
|
|
||||||
|
|
||||||
t += 2;
|
|
||||||
|
|
||||||
U_INTERNAL_ASSERT(u__isxdigit(t[0]))
|
|
||||||
U_INTERNAL_ASSERT(u__isxdigit(t[1]))
|
|
||||||
|
|
||||||
c = ((u__hexc2int(t[0]) & 0x0F) << 4) |
|
|
||||||
(u__hexc2int(t[1]) & 0x0F);
|
|
||||||
|
|
||||||
t += 2;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
*s = t;
|
|
||||||
|
|
||||||
return (unsigned char)c;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t u_escape_decode(const char* restrict inptr, uint32_t len, unsigned char* restrict out)
|
uint32_t u_escape_decode(const char* restrict inptr, uint32_t len, unsigned char* restrict out)
|
||||||
{
|
{
|
||||||
|
int c;
|
||||||
char* p;
|
char* p;
|
||||||
const char* restrict inend = inptr + len;
|
const char* restrict inend = inptr + len;
|
||||||
unsigned char* restrict outptr = out;
|
unsigned char* restrict outptr = out;
|
||||||
|
@ -324,14 +113,80 @@ uint32_t u_escape_decode(const char* restrict inptr, uint32_t len, unsigned char
|
||||||
{
|
{
|
||||||
u__memcpy(outptr, p, 6, __PRETTY_FUNCTION__);
|
u__memcpy(outptr, p, 6, __PRETTY_FUNCTION__);
|
||||||
|
|
||||||
inptr = p + 6;
|
inptr = p+6;
|
||||||
outptr += 6;
|
outptr += 6;
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
inptr = p + 1;
|
inptr = p+1;
|
||||||
*outptr++ = u_escape_decode_ptr((const char** restrict)&inptr);
|
c = *inptr++;
|
||||||
|
|
||||||
|
U_INTERNAL_PRINT("c = %d", c)
|
||||||
|
|
||||||
|
switch (c)
|
||||||
|
{
|
||||||
|
case 'a': c = '\a'; break;
|
||||||
|
case 'b': c = '\b'; break;
|
||||||
|
case 't': c = '\t'; break;
|
||||||
|
case 'n': c = '\n'; break;
|
||||||
|
case 'v': c = '\v'; break;
|
||||||
|
case 'f': c = '\f'; break;
|
||||||
|
case 'r': c = '\r'; break;
|
||||||
|
case 'e': c = '\033'; break;
|
||||||
|
|
||||||
|
/* check control code */
|
||||||
|
|
||||||
|
case '^': c = u__toupper(*inptr++) - '@'; break;
|
||||||
|
|
||||||
|
/* check sequenza escape esadecimale */
|
||||||
|
|
||||||
|
case 'x':
|
||||||
|
{
|
||||||
|
if (u__isxdigit(*inptr))
|
||||||
|
{
|
||||||
|
c = u__hexc2int(*inptr++);
|
||||||
|
if (u__isxdigit(*inptr)) c = (c << 4) | u__hexc2int(*inptr++);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* check sequenza escape ottale */
|
||||||
|
|
||||||
|
case '0': case '1': case '2': case '3':
|
||||||
|
case '4': case '5': case '6': case '7':
|
||||||
|
{
|
||||||
|
c -= '0';
|
||||||
|
|
||||||
|
if (u__isoctal(*inptr))
|
||||||
|
{
|
||||||
|
c = (c << 3) | u__octc2int(*inptr++);
|
||||||
|
if (u__isoctal(*inptr)) c = (c << 3) | u__octc2int(*inptr++);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* \u four-hex-digits (unicode char) */
|
||||||
|
|
||||||
|
case 'u':
|
||||||
|
{
|
||||||
|
U_INTERNAL_ASSERT_EQUALS(inptr[0], '0')
|
||||||
|
U_INTERNAL_ASSERT_EQUALS(inptr[1], '0')
|
||||||
|
|
||||||
|
inptr += 2;
|
||||||
|
|
||||||
|
U_INTERNAL_ASSERT(u__isxdigit(inptr[0]))
|
||||||
|
U_INTERNAL_ASSERT(u__isxdigit(inptr[1]))
|
||||||
|
|
||||||
|
c = ((u__hexc2int(inptr[0]) & 0x0F) << 4) |
|
||||||
|
(u__hexc2int(inptr[1]) & 0x0F);
|
||||||
|
|
||||||
|
inptr += 2;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
*outptr++ = c;
|
||||||
}
|
}
|
||||||
|
|
||||||
*outptr = 0;
|
*outptr = 0;
|
||||||
|
|
|
@ -212,7 +212,11 @@ void UTrace::trace_sysreturn(bool error, const char* format, ...)
|
||||||
u_errno = errno;
|
u_errno = errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (errno != EAGAIN) U_WARNING("%s", buffer_syscall);
|
if (errno != EAGAIN &&
|
||||||
|
strstr(buffer_syscall, "::getenv") == 0)
|
||||||
|
{
|
||||||
|
U_WARNING("%s", buffer_syscall);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -567,6 +567,97 @@ uint32_t UValue::getMemberNames(UVector<UString>& members) const
|
||||||
U_RETURN(_size);
|
U_RETURN(_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t UValue::emitString(const unsigned char* inptr, uint32_t len, char* out)
|
||||||
|
{
|
||||||
|
U_TRACE(0, "UValue::emitString(%.*S,%u,%p)", len, inptr, len, out)
|
||||||
|
|
||||||
|
U_INTERNAL_ASSERT_POINTER(out)
|
||||||
|
U_INTERNAL_ASSERT_POINTER(inptr)
|
||||||
|
|
||||||
|
const unsigned char* restrict inend = inptr + len;
|
||||||
|
char* restrict outptr = out;
|
||||||
|
|
||||||
|
*outptr++ = '"';
|
||||||
|
|
||||||
|
while (inptr < inend)
|
||||||
|
{
|
||||||
|
unsigned char c = *inptr++;
|
||||||
|
|
||||||
|
if (c < 32)
|
||||||
|
{
|
||||||
|
switch (c)
|
||||||
|
{
|
||||||
|
case '\b': // 0x08
|
||||||
|
{
|
||||||
|
*outptr++ = '\\';
|
||||||
|
*outptr++ = 'b';
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
case '\t': // 0x09
|
||||||
|
{
|
||||||
|
*outptr++ = '\\';
|
||||||
|
*outptr++ = 't';
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
case '\n': // 0x0A
|
||||||
|
{
|
||||||
|
*outptr++ = '\\';
|
||||||
|
*outptr++ = 'n';
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
case '\f': // 0x0C
|
||||||
|
{
|
||||||
|
*outptr++ = '\\';
|
||||||
|
*outptr++ = 'f';
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
case '\r': // 0x0D
|
||||||
|
{
|
||||||
|
*outptr++ = '\\';
|
||||||
|
*outptr++ = 'r';
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
default: goto next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (c <= 126)
|
||||||
|
{
|
||||||
|
if (c == '"' || // 0x22
|
||||||
|
c == '\\') // 0x5C
|
||||||
|
{
|
||||||
|
*outptr++ = '\\';
|
||||||
|
}
|
||||||
|
|
||||||
|
*outptr++ = c;
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
next: // \u four-hex-digits (unicode char)
|
||||||
|
|
||||||
|
*(int32_t*)outptr = U_MULTICHAR_CONSTANT32('\\','u','0','0');
|
||||||
|
|
||||||
|
outptr[4] = u_hex_upper[((c >> 4) & 0x0F)];
|
||||||
|
outptr[5] = u_hex_upper[( c & 0x0F)];
|
||||||
|
|
||||||
|
outptr += 6;
|
||||||
|
}
|
||||||
|
|
||||||
|
*outptr++ = '"';
|
||||||
|
|
||||||
|
U_RETURN(outptr - out);
|
||||||
|
}
|
||||||
|
|
||||||
void UValue::stringify(UString& result, UValue& _value)
|
void UValue::stringify(UString& result, UValue& _value)
|
||||||
{
|
{
|
||||||
U_TRACE(0, "UValue::stringify(%V,%p)", result.rep, &_value)
|
U_TRACE(0, "UValue::stringify(%V,%p)", result.rep, &_value)
|
||||||
|
@ -601,7 +692,6 @@ void UValue::stringify(UString& result, UValue& _value)
|
||||||
const char* ch;
|
const char* ch;
|
||||||
char buffer[32];
|
char buffer[32];
|
||||||
UString* pstring;
|
UString* pstring;
|
||||||
const char* keyptr;
|
|
||||||
const char* last_nonzero;
|
const char* last_nonzero;
|
||||||
uint32_t n, pos, sz, keysz;
|
uint32_t n, pos, sz, keysz;
|
||||||
|
|
||||||
|
@ -703,7 +793,7 @@ next:
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (c == '.') n = last_nonzero - buffer + 2; // Truncate zeroes to save bytes in output, but keep one)
|
if (c == '.') n = last_nonzero - buffer + 2; // Truncate zeroes to save bytes in output, but keep one
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -716,9 +806,11 @@ next:
|
||||||
case_string:
|
case_string:
|
||||||
pstring = _value.getString();
|
pstring = _value.getString();
|
||||||
|
|
||||||
(void) result.reserve(result.size() + pstring->size() * 6);
|
(void) result.reserve((sz = result.size()) + (keysz = pstring->size()) * 6);
|
||||||
|
|
||||||
UEscape::encode(*pstring, result, true);
|
presult = result.c_pointer(sz);
|
||||||
|
|
||||||
|
result.rep->_length = sz + emitString((const unsigned char*)pstring->data(), keysz, presult);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -743,14 +835,9 @@ case_object:
|
||||||
|
|
||||||
for (UValue* member = _value.children.head; member; member = member->next)
|
for (UValue* member = _value.children.head; member; member = member->next)
|
||||||
{
|
{
|
||||||
sz = result.size();
|
|
||||||
|
|
||||||
U_INTERNAL_ASSERT_POINTER(member->key)
|
U_INTERNAL_ASSERT_POINTER(member->key)
|
||||||
|
|
||||||
keysz = member->key->size();
|
(void) result.reserve((sz = result.size()) + (keysz = member->key->size()) * 6);
|
||||||
keyptr = member->key->data();
|
|
||||||
|
|
||||||
(void) result.reserve(sz + keysz * 6);
|
|
||||||
|
|
||||||
presult = result.c_pointer(sz);
|
presult = result.c_pointer(sz);
|
||||||
|
|
||||||
|
@ -762,11 +849,11 @@ case_object:
|
||||||
*presult++ = ',';
|
*presult++ = ',';
|
||||||
}
|
}
|
||||||
|
|
||||||
pos = u_escape_encode((const unsigned char*)keyptr, keysz, presult, result.space(), true);
|
pos = emitString((const unsigned char*)member->key->data(), keysz, presult);
|
||||||
|
|
||||||
presult[pos] = ':';
|
presult[pos] = ':';
|
||||||
|
|
||||||
result.size_adjust(sz + 1 + pos);
|
result.rep->_length = sz + pos + 1;
|
||||||
|
|
||||||
stringify(result, *member);
|
stringify(result, *member);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1532,10 +1532,11 @@ void UNoCatPlugIn::addPeerInfo(time_t logout)
|
||||||
|
|
||||||
char* ptr;
|
char* ptr;
|
||||||
char buffer[64];
|
char buffer[64];
|
||||||
UString info = (*vinfo_data)[U_peer_index_AUTH];
|
UString info = (*vinfo_data)[U_peer_index_AUTH],
|
||||||
|
str = UStringExt::substitute(peer->mac, ':', U_CONSTANT_TO_PARAM("%3A"));
|
||||||
uint32_t sz = info.size();
|
uint32_t sz = info.size();
|
||||||
|
|
||||||
U_INTERNAL_DUMP("U_peer_index_AUTH = %u info = %V", U_peer_index_AUTH, info.rep)
|
U_INTERNAL_DUMP("U_peer_index_AUTH = %u info = %V peer->ip = %V", U_peer_index_AUTH, info.rep, peer->ip.rep)
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------------------------------------------------------------------
|
||||||
// $1 -> mac
|
// $1 -> mac
|
||||||
|
@ -1552,10 +1553,10 @@ void UNoCatPlugIn::addPeerInfo(time_t logout)
|
||||||
|
|
||||||
(void) info.reserve(sz + 200);
|
(void) info.reserve(sz + 200);
|
||||||
|
|
||||||
info.snprintf_add("%sMac=%.*s&ip=%v&", (sz ? "&" : ""), u_url_encode((const unsigned char*)U_STRING_TO_PARAM(peer->mac), (unsigned char*)buffer), buffer, peer->ip.rep);
|
info.snprintf_add("%sMac=%v&ip=%v&", (sz ? "&" : ""), str.rep, peer->ip.rep);
|
||||||
|
|
||||||
info.snprintf_add("gateway=%.*s&ap=%v%%40%v&User=",
|
info.snprintf_add("gateway=%.*s&ap=%v%%40%v&User=",
|
||||||
u_url_encode((const unsigned char*)U_STRING_TO_PARAM(peer->gateway), (unsigned char*)buffer), buffer, peer->label.rep, UServer_Base::IP_address);
|
u_url_encode((const unsigned char*)U_STRING_TO_PARAM(peer->gateway), (unsigned char*)buffer), buffer, peer->label.rep, UServer_Base::IP_address->rep);
|
||||||
|
|
||||||
info.snprintf_add("%.*s&logout=", u_url_encode((const unsigned char*)U_STRING_TO_PARAM(peer->user), (unsigned char*)buffer), buffer);
|
info.snprintf_add("%.*s&logout=", u_url_encode((const unsigned char*)U_STRING_TO_PARAM(peer->user), (unsigned char*)buffer), buffer);
|
||||||
|
|
||||||
|
@ -1625,7 +1626,7 @@ bool UModNoCatPeer::checkPeerInfo(bool btraffic)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
U_INTERNAL_DUMP("UNoCatPlugIn::peer_present_in_arp_cache = %V peer->ifname = %V", UNoCatPlugIn::peer_present_in_arp_cache, ifname.rep)
|
U_INTERNAL_DUMP("UNoCatPlugIn::peer_present_in_arp_cache = %V peer->ifname = %V", UNoCatPlugIn::peer_present_in_arp_cache->rep, ifname.rep)
|
||||||
|
|
||||||
if (ctraffic == 0) time_no_traffic += (u_now->tv_sec - ctime);
|
if (ctraffic == 0) time_no_traffic += (u_now->tv_sec - ctime);
|
||||||
|
|
||||||
|
@ -2658,7 +2659,7 @@ google: (void) buffer.assign(U_CONSTANT_TO_PARAM("http://www.google.com"));
|
||||||
{
|
{
|
||||||
UString printable(data.size() * 4);
|
UString printable(data.size() * 4);
|
||||||
|
|
||||||
UEscape::encode(data, printable, false);
|
UEscape::encode(data, printable);
|
||||||
|
|
||||||
ULog::log("%sauth message: %v", UServer_Base::mod_name[0], printable.rep);
|
ULog::log("%sauth message: %v", UServer_Base::mod_name[0], printable.rep);
|
||||||
}
|
}
|
||||||
|
|
|
@ -185,7 +185,7 @@ public:
|
||||||
|
|
||||||
UString tmp(token.size() * 4);
|
UString tmp(token.size() * 4);
|
||||||
|
|
||||||
UEscape::encode(token, tmp, false);
|
UEscape::encode(token, tmp);
|
||||||
|
|
||||||
(void) buffer.reserve(tmp.size() + 100U);
|
(void) buffer.reserve(tmp.size() + 100U);
|
||||||
|
|
||||||
|
@ -510,7 +510,7 @@ public:
|
||||||
|
|
||||||
UString encoded(header.size() * 4);
|
UString encoded(header.size() * 4);
|
||||||
|
|
||||||
UEscape::encode(header, encoded, false);
|
UEscape::encode(header, encoded);
|
||||||
|
|
||||||
UString tmp(encoded.size() + 100U);
|
UString tmp(encoded.size() + 100U);
|
||||||
|
|
||||||
|
|
|
@ -10008,7 +10008,7 @@ U_EXPORT ostream& operator<<(ostream& os, const UHTTP::UFileCacheData& d)
|
||||||
d.mime_index == U_jpg ||
|
d.mime_index == U_jpg ||
|
||||||
d.mime_index == U_ico
|
d.mime_index == U_ico
|
||||||
? u_base64_encode((const unsigned char*)U_STRING_TO_PARAM(str), (unsigned char*)buffer)
|
? u_base64_encode((const unsigned char*)U_STRING_TO_PARAM(str), (unsigned char*)buffer)
|
||||||
: u_escape_encode((const unsigned char*)U_STRING_TO_PARAM(str), buffer, sizeof(buffer), false));
|
: u_escape_encode((const unsigned char*)U_STRING_TO_PARAM(str), buffer, sizeof(buffer)));
|
||||||
|
|
||||||
os.put('\n');
|
os.put('\n');
|
||||||
os.write(buffer, pos);
|
os.write(buffer, pos);
|
||||||
|
@ -10016,7 +10016,7 @@ U_EXPORT ostream& operator<<(ostream& os, const UHTTP::UFileCacheData& d)
|
||||||
|
|
||||||
str = d.array->at(1); // header
|
str = d.array->at(1); // header
|
||||||
|
|
||||||
pos = u_escape_encode((const unsigned char*)U_STRING_TO_PARAM(str), buffer, sizeof(buffer), false);
|
pos = u_escape_encode((const unsigned char*)U_STRING_TO_PARAM(str), buffer, sizeof(buffer));
|
||||||
|
|
||||||
os.put('\n');
|
os.put('\n');
|
||||||
os.write(buffer, pos);
|
os.write(buffer, pos);
|
||||||
|
@ -10035,7 +10035,7 @@ U_EXPORT ostream& operator<<(ostream& os, const UHTTP::UFileCacheData& d)
|
||||||
|
|
||||||
str = d.array->at(3); // gzip(header)
|
str = d.array->at(3); // gzip(header)
|
||||||
|
|
||||||
pos = u_escape_encode((const unsigned char*)U_STRING_TO_PARAM(str), buffer, sizeof(buffer), false);
|
pos = u_escape_encode((const unsigned char*)U_STRING_TO_PARAM(str), buffer, sizeof(buffer));
|
||||||
|
|
||||||
os.put('\n');
|
os.put('\n');
|
||||||
os.write(buffer, pos);
|
os.write(buffer, pos);
|
||||||
|
|
|
@ -99,7 +99,7 @@ U_EXPORT ostream& operator<<(ostream& os, const UXMLElement& e)
|
||||||
(void) os.write(U_CONSTANT_TO_PARAM(" VALUE = "));
|
(void) os.write(U_CONSTANT_TO_PARAM(" VALUE = "));
|
||||||
|
|
||||||
char buffer[4096];
|
char buffer[4096];
|
||||||
uint32_t len = u_escape_encode((const unsigned char*)U_STRING_TO_PARAM(e.value), buffer, sizeof(buffer), false);
|
uint32_t len = u_escape_encode((const unsigned char*)U_STRING_TO_PARAM(e.value), buffer, sizeof(buffer));
|
||||||
|
|
||||||
(void) os.write(buffer, len);
|
(void) os.write(buffer, len);
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,11 +27,14 @@ static int display_char(char* output, int what)
|
||||||
{
|
{
|
||||||
switch (what)
|
switch (what)
|
||||||
{
|
{
|
||||||
case '\r': return sprintf(output, "\\r");
|
case '\a': return sprintf(output, "\\a");
|
||||||
case '\n': return sprintf(output, "\\n");
|
|
||||||
case '\t': return sprintf(output, "\\t");
|
|
||||||
case '\b': return sprintf(output, "\\b");
|
case '\b': return sprintf(output, "\\b");
|
||||||
|
case '\t': return sprintf(output, "\\t");
|
||||||
|
case '\n': return sprintf(output, "\\n");
|
||||||
|
case '\v': return sprintf(output, "\\v");
|
||||||
case '\f': return sprintf(output, "\\f");
|
case '\f': return sprintf(output, "\\f");
|
||||||
|
case '\r': return sprintf(output, "\\r");
|
||||||
|
case '\033': return sprintf(output, "\\e");
|
||||||
case '\\': return sprintf(output, "\\\\");
|
case '\\': return sprintf(output, "\\\\");
|
||||||
case '"': return sprintf(output, "\\\"");
|
case '"': return sprintf(output, "\\\"");
|
||||||
default:
|
default:
|
||||||
|
@ -145,7 +148,7 @@ int main(int argc, char* argv[])
|
||||||
u__snprintf(buffer, 4096, "test - %r", EX_PROTOCOL);
|
u__snprintf(buffer, 4096, "test - %r", EX_PROTOCOL);
|
||||||
if (strcmp(buf, buffer)) goto failed;
|
if (strcmp(buf, buffer)) goto failed;
|
||||||
|
|
||||||
len = u_escape_encode((unsigned char*)U_CONSTANT_TO_PARAM("stringa che continua 01234567890"), buf, 25, false);
|
len = u_escape_encode((unsigned char*)U_CONSTANT_TO_PARAM("stringa che continua 01234567890"), buf, 25);
|
||||||
buf[len] = '\0';
|
buf[len] = '\0';
|
||||||
strcpy(buffer, "\"stringa che continua...\"");
|
strcpy(buffer, "\"stringa che continua...\"");
|
||||||
if (strcmp(buf, buffer)) goto failed;
|
if (strcmp(buf, buffer)) goto failed;
|
||||||
|
@ -165,8 +168,6 @@ int main(int argc, char* argv[])
|
||||||
|
|
||||||
for (c = 0; c < 256; ++c) ptr += u_sprintc(ptr, c);
|
for (c = 0; c < 256; ++c) ptr += u_sprintc(ptr, c);
|
||||||
|
|
||||||
/* u_sprintc() = \\000\\001\\002\\003\\004\\005\\006\\007\\b\\t\\n\\013\\f\\r\\016\\017\\020\\021\\022\\023\\024\\025\\026\\027\\030\\031\\032\\033\\034\\035\\036\\037 !\"#$%%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\177\\200\\201\\202\\203\\204\\205\\206\\207\\210\\211\\212\\213\\214\\215\\216\\217\\220\\221\\222\\223\\224\\225\\226\\227\\230\\231\\232\\233\\234\\235\\236\\237\\240\\241\\242\\243\\244\\245\\246\\247\\250\\251\\252\\253\\254\\255\\256\\257\\260\\261\\262\\263\\264\\265\\266\\267\\270\\271\\272\\273\\274\\275\\276\\277\\300\\301\\302\\303\\304\\305\\306\\307\\310\\311\\312\\313\\314\\315\\316\\317\\320\\321\\322\\323\\324\\325\\326\\327\\330\\331\\332\\333\\334\\335\\336\\337\\340\\341\\342\\343\\344\\345\\346\\347\\350\\351\\352\\353\\354\\355\\356\\357\\360\\361\\362\\363\\364\\365\\366\\367\\370\\371\\372\\373\\374\\375\\376\\377; */
|
|
||||||
|
|
||||||
if (strcmp(buf, buffer)) goto failed;
|
if (strcmp(buf, buffer)) goto failed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,20 +1,19 @@
|
||||||
test_memerror: WARNING: 17/05/15 20:15:45 (pid 8956) we are going to allocate 64 MB (pid 8956) - address space usage: 122.45 MBytes - rss usage: 7.90 MBytes
|
test_memerror: WARNING: 30/05/15 16:03:57 (pid 19575) we are going to allocate 64 MB (pid 19575) - address space usage: 122.48 MBytes - rss usage: 7.78 MBytes
|
||||||
test_memerror: WARNING: 17/05/15 20:15:45 (pid 8956) ::getenv("TMPDIR") = (null)
|
{Call main(1,0x7fffd71b9218)
|
||||||
{Call main(1,0x7ffd1c0202d8)
|
|
||||||
test_memerror: ERROR ON MEMORY
|
test_memerror: ERROR ON MEMORY
|
||||||
-------------------------------------
|
-------------------------------------
|
||||||
pid: 8956
|
pid: 19575
|
||||||
file: test_memerror.cpp
|
file: test_memerror.cpp
|
||||||
line: 26
|
line: 26
|
||||||
function: UInt::operator int() const
|
function: UInt::operator int() const
|
||||||
assertion: "((this)->memory.invariant())" [pobj = 0x1f627a0 _this = (nil) - FMR]
|
assertion: "((this)->memory.invariant())" [pobj = 0x24717a0 _this = (nil) - FMR]
|
||||||
-------------------------------------
|
-------------------------------------
|
||||||
test_memerror: ERROR ON MEMORY
|
test_memerror: ERROR ON MEMORY
|
||||||
-------------------------------------
|
-------------------------------------
|
||||||
pid: 8956
|
pid: 19575
|
||||||
file: ../../include/ulib/debug/error_memory.h
|
file: ../../include/ulib/debug/error_memory.h
|
||||||
line: 28
|
line: 28
|
||||||
function: UMemoryError::~UMemoryError()
|
function: UMemoryError::~UMemoryError()
|
||||||
assertion: "(invariant())" [pobj = 0x7ffd1c01f9c0 _this = 0xa1b2c3d000000ff - ABW]
|
assertion: "(invariant())" [pobj = 0x7fffd71b8900 _this = 0xa1b2c3d000000ff - ABW]
|
||||||
-------------------------------------
|
-------------------------------------
|
||||||
}Return main(1,0x7ffd1c0202d8) = 0
|
}Return main(1,0x7fffd71b9218) = 0
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
test_trace: WARNING: (pid 18895) we are going to allocate 64 MB (pid 18895) - address space usage: 115.60 MBytes - rss usage: 7.36 MBytes
|
test_trace: WARNING: 30/05/15 16:03:58 (pid 19663) we are going to allocate 64 MB (pid 19663) - address space usage: 122.40 MBytes - rss usage: 7.77 MBytes
|
||||||
test_trace: WARNING: (pid 18895) ::getenv("TMPDIR") = (null)
|
|
||||||
{Call main(2)
|
{Call main(2)
|
||||||
{Call routine1(2,3)
|
{Call routine1(2,3)
|
||||||
}Return routine1(2,3) = 6
|
}Return routine1(2,3) = 6
|
||||||
c = 6
|
c = 6
|
||||||
::signal(4,0x401660) = (nil)
|
::signal(4,0x401710) = (nil)
|
||||||
{Call manage_sigpipe(4)
|
{Call manage_sigpipe(4)
|
||||||
::open("/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp"...,2,438) = -1 - ENOENT (2, No such file or directory)
|
::open("/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp/tmp"...,2,438) = -1 - ENOENT (2, No such file or directory)
|
||||||
::open("tmp/prova",66,438) = 5
|
::open("tmp/prova",66,438) = 5
|
||||||
|
@ -12,10 +11,10 @@ test_trace: WARNING: (pid 18895) ::getenv("TMPDIR") = (null)
|
||||||
::raise(4) = 0
|
::raise(4) = 0
|
||||||
result raise() = 0
|
result raise() = 0
|
||||||
test_stat() = -1
|
test_stat() = -1
|
||||||
test_stat() = 0
|
|
||||||
test_stat() = 0
|
|
||||||
test_stat() = 0
|
|
||||||
test_stat() = -1
|
test_stat() = -1
|
||||||
|
test_stat() = 0
|
||||||
|
test_stat() = 0
|
||||||
|
test_stat() = 0
|
||||||
::malloc(1000) = (nil) - ENOMEM (12, Cannot allocate memory)
|
::malloc(1000) = (nil) - ENOMEM (12, Cannot allocate memory)
|
||||||
malloc() = (nil)
|
malloc() = (nil)
|
||||||
}Return main(2) = 0
|
}Return main(2) = 0
|
||||||
|
|
|
@ -2,7 +2,7 @@ userver {
|
||||||
|
|
||||||
PORT 8080
|
PORT 8080
|
||||||
PREFORK_CHILD 4
|
PREFORK_CHILD 4
|
||||||
TCP_LINGER_SET -2
|
TCP_LINGER_SET 0
|
||||||
LISTEN_BACKLOG 256
|
LISTEN_BACKLOG 256
|
||||||
DOCUMENT_ROOT benchmark/FrameworkBenchmarks/ULib/www
|
DOCUMENT_ROOT benchmark/FrameworkBenchmarks/ULib/www
|
||||||
PID_FILE benchmark/FrameworkBenchmarks/ULib/userver_tcp.pid
|
PID_FILE benchmark/FrameworkBenchmarks/ULib/userver_tcp.pid
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
start_msg file_config
|
start_msg file_config
|
||||||
|
|
||||||
#UTRACE="0 10M 0"
|
#UTRACE="0 10M -1"
|
||||||
#UOBJDUMP="0 100k 10"
|
#UOBJDUMP="0 100k 10"
|
||||||
#USIMERR="error.sim"
|
#USIMERR="error.sim"
|
||||||
export UTRACE UOBJDUMP USIMERR
|
export UTRACE UOBJDUMP USIMERR
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
start_msg json
|
start_msg json
|
||||||
|
|
||||||
#UTRACE="0 100M 0"
|
UTRACE="0 100M 0"
|
||||||
#UOBJDUMP="0 100k 10"
|
#UOBJDUMP="0 100k 10"
|
||||||
#USIMERR="error.sim"
|
#USIMERR="error.sim"
|
||||||
export UTRACE UOBJDUMP USIMERR
|
export UTRACE UOBJDUMP USIMERR
|
||||||
|
|
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user