1
0
mirror of https://github.com/stefanocasazza/ULib.git synced 2025-09-28 19:05:55 +08:00

optimizations + bug fixing

This commit is contained in:
stefanocasazza 2015-06-01 15:20:33 +02:00
parent 01a9d05b5b
commit 1cc10c952b
20 changed files with 399 additions and 330 deletions

View File

@ -319,8 +319,10 @@ extern U_EXPORT int32_t u_printf_string_max_length;
/* NB: u_printf(), u_vsnprintf and u_snprintf conflit with /usr/include/unicode/urename.h */
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__printf(int fd, 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__vsnprintf(char* restrict buffer, uint32_t buffer_size, const char* restrict format, va_list argp);

View File

@ -24,27 +24,23 @@ extern "C" {
* ---------------------------------------------------------------------------
* 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)
* \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)
*
* \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
* \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
* ---------------------------------------------------------------------------
*/
U_EXPORT uint32_t u_sprintc(char* restrict buffer, unsigned char c);
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_encode(const unsigned char* restrict s, uint32_t n, char* restrict result, uint32_t max_length);
U_EXPORT uint32_t u_escape_decode(const char* restrict s, uint32_t n, unsigned char* restrict result);
#ifdef __cplusplus

View File

@ -495,6 +495,7 @@ protected:
private:
static void appendNode(UValue* parent, UValue* child);
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 UHashMap;

View File

@ -77,6 +77,7 @@ class UDES3;
class UHTTP;
class UValue;
class UCache;
class UValue;
class UString;
class UBase64;
class UEscape;
@ -612,6 +613,7 @@ private:
friend class UDES3;
friend class UHTTP;
friend class UCache;
friend class UValue;
friend class UString;
friend class UBase64;
friend class UEscape;

View File

@ -22,40 +22,39 @@
* ---------------------------------------------------------------------------
* 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)
* \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)
*
* \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
* \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
* ---------------------------------------------------------------------------
*/
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.capacity() >= n)
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)
}
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)
{

View File

@ -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_
static const char* tab_color[] = { U_RESET_STR,
U_BLACK_STR, U_RED_STR, U_GREEN_STR, U_YELLOW_STR,

View File

@ -18,120 +18,13 @@
#include <ulib/base/utility.h>
#include <ulib/base/coder/escape.h>
/**
* ---------------------------------------------------------------------------
* 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)
uint32_t u_escape_encode(const unsigned char* restrict inptr, uint32_t len, char* restrict out, uint32_t max_output)
{
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;
char* restrict outptr = out;
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(inptr)
@ -140,59 +33,10 @@ uint32_t u_escape_encode(const unsigned char* restrict inptr, uint32_t len, char
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)
{
# ifdef DEBUG
if (json) U_INTERNAL_ASSERT_MSG(false, "overflow in encoding json string...")
# endif
*outptr++ = '.';
*outptr++ = '.';
*outptr++ = '.';
@ -207,84 +51,29 @@ check_max_output:
return (outptr - out);
}
/* the s pointer is advanced past the escape sequence */
unsigned char u_escape_decode_ptr(const char** restrict s)
{
const char* restrict t = *s;
int c = *t++;
U_INTERNAL_TRACE("u_escape_decode_ptr(%s)", *s)
switch (c)
{
case 'r': c = '\r'; break;
case 'n': c = '\n'; break;
case 't': c = '\t'; break;
case 'b': c = '\b'; break;
case 'f': c = '\f'; break;
case 'v': c = '\v'; break;
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;
}
/**
* --------------------------------------------------------------------
* Decode 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)
*
* \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_escape_decode(const char* restrict inptr, uint32_t len, unsigned char* restrict out)
{
int c;
char* p;
const char* restrict inend = inptr + len;
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__);
inptr = p + 6;
inptr = p+6;
outptr += 6;
continue;
}
inptr = p + 1;
*outptr++ = u_escape_decode_ptr((const char** restrict)&inptr);
inptr = p+1;
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;

View File

@ -212,7 +212,11 @@ void UTrace::trace_sysreturn(bool error, const char* format, ...)
u_errno = errno;
}
if (errno != EAGAIN) U_WARNING("%s", buffer_syscall);
if (errno != EAGAIN &&
strstr(buffer_syscall, "::getenv") == 0)
{
U_WARNING("%s", buffer_syscall);
}
}
}

View File

@ -567,6 +567,97 @@ uint32_t UValue::getMemberNames(UVector<UString>& members) const
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)
{
U_TRACE(0, "UValue::stringify(%V,%p)", result.rep, &_value)
@ -601,7 +692,6 @@ void UValue::stringify(UString& result, UValue& _value)
const char* ch;
char buffer[32];
UString* pstring;
const char* keyptr;
const char* last_nonzero;
uint32_t n, pos, sz, keysz;
@ -703,7 +793,7 @@ next:
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;
}
@ -716,9 +806,11 @@ next:
case_string:
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;
@ -743,14 +835,9 @@ case_object:
for (UValue* member = _value.children.head; member; member = member->next)
{
sz = result.size();
U_INTERNAL_ASSERT_POINTER(member->key)
keysz = member->key->size();
keyptr = member->key->data();
(void) result.reserve(sz + keysz * 6);
(void) result.reserve((sz = result.size()) + (keysz = member->key->size()) * 6);
presult = result.c_pointer(sz);
@ -762,11 +849,11 @@ case_object:
*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] = ':';
result.size_adjust(sz + 1 + pos);
result.rep->_length = sz + pos + 1;
stringify(result, *member);
}

View File

@ -1532,10 +1532,11 @@ void UNoCatPlugIn::addPeerInfo(time_t logout)
char* ptr;
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();
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
@ -1552,10 +1553,10 @@ void UNoCatPlugIn::addPeerInfo(time_t logout)
(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=",
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);
@ -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);
@ -2658,7 +2659,7 @@ google: (void) buffer.assign(U_CONSTANT_TO_PARAM("http://www.google.com"));
{
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);
}

View File

@ -185,7 +185,7 @@ public:
UString tmp(token.size() * 4);
UEscape::encode(token, tmp, false);
UEscape::encode(token, tmp);
(void) buffer.reserve(tmp.size() + 100U);
@ -510,7 +510,7 @@ public:
UString encoded(header.size() * 4);
UEscape::encode(header, encoded, false);
UEscape::encode(header, encoded);
UString tmp(encoded.size() + 100U);

View File

@ -10008,7 +10008,7 @@ U_EXPORT ostream& operator<<(ostream& os, const UHTTP::UFileCacheData& d)
d.mime_index == U_jpg ||
d.mime_index == U_ico
? 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.write(buffer, pos);
@ -10016,7 +10016,7 @@ U_EXPORT ostream& operator<<(ostream& os, const UHTTP::UFileCacheData& d)
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.write(buffer, pos);
@ -10035,7 +10035,7 @@ U_EXPORT ostream& operator<<(ostream& os, const UHTTP::UFileCacheData& d)
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.write(buffer, pos);

View File

@ -99,7 +99,7 @@ U_EXPORT ostream& operator<<(ostream& os, const UXMLElement& e)
(void) os.write(U_CONSTANT_TO_PARAM(" VALUE = "));
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);
}

View File

@ -27,13 +27,16 @@ static int display_char(char* output, int what)
{
switch (what)
{
case '\r': return sprintf(output, "\\r");
case '\n': return sprintf(output, "\\n");
case '\t': return sprintf(output, "\\t");
case '\b': return sprintf(output, "\\b");
case '\f': return sprintf(output, "\\f");
case '\\': return sprintf(output, "\\\\");
case '"': return sprintf(output, "\\\"");
case '\a': return sprintf(output, "\\a");
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 '\r': return sprintf(output, "\\r");
case '\033': return sprintf(output, "\\e");
case '\\': return sprintf(output, "\\\\");
case '"': return sprintf(output, "\\\"");
default:
if ((what<32) || (what>126)) return sprintf(output, "\\%03o", (unsigned char)what);
else return sprintf(output, "%c", what);
@ -145,7 +148,7 @@ int main(int argc, char* argv[])
u__snprintf(buffer, 4096, "test - %r", EX_PROTOCOL);
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';
strcpy(buffer, "\"stringa che continua...\"");
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);
/* 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;
}

View File

@ -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: 17/05/15 20:15:45 (pid 8956) ::getenv("TMPDIR") = (null)
{Call main(1,0x7ffd1c0202d8)
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
{Call main(1,0x7fffd71b9218)
test_memerror: ERROR ON MEMORY
-------------------------------------
pid: 8956
pid: 19575
file: test_memerror.cpp
line: 26
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
-------------------------------------
pid: 8956
pid: 19575
file: ../../include/ulib/debug/error_memory.h
line: 28
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

View File

@ -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: (pid 18895) ::getenv("TMPDIR") = (null)
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
{Call main(2)
{Call routine1(2,3)
}Return routine1(2,3) = 6
c = 6
::signal(4,0x401660) = (nil)
::signal(4,0x401710) = (nil)
{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/prova",66,438) = 5
@ -12,10 +11,10 @@ test_trace: WARNING: (pid 18895) ::getenv("TMPDIR") = (null)
::raise(4) = 0
result raise() = 0
test_stat() = -1
test_stat() = 0
test_stat() = 0
test_stat() = 0
test_stat() = -1
test_stat() = 0
test_stat() = 0
test_stat() = 0
::malloc(1000) = (nil) - ENOMEM (12, Cannot allocate memory)
malloc() = (nil)
}Return main(2) = 0

View File

@ -2,7 +2,7 @@ userver {
PORT 8080
PREFORK_CHILD 4
TCP_LINGER_SET -2
TCP_LINGER_SET 0
LISTEN_BACKLOG 256
DOCUMENT_ROOT benchmark/FrameworkBenchmarks/ULib/www
PID_FILE benchmark/FrameworkBenchmarks/ULib/userver_tcp.pid

View File

@ -6,7 +6,7 @@
start_msg file_config
#UTRACE="0 10M 0"
#UTRACE="0 10M -1"
#UOBJDUMP="0 100k 10"
#USIMERR="error.sim"
export UTRACE UOBJDUMP USIMERR

View File

@ -6,7 +6,7 @@
start_msg json
#UTRACE="0 100M 0"
UTRACE="0 100M 0"
#UOBJDUMP="0 100k 10"
#USIMERR="error.sim"
export UTRACE UOBJDUMP USIMERR

File diff suppressed because one or more lines are too long