merged changes from RC_1_0
This commit is contained in:
@@ -556,6 +556,60 @@ namespace libtorrent
|
||||
return line_len;
|
||||
}
|
||||
|
||||
void escape_string(std::string& ret, char const* str, int len)
|
||||
{
|
||||
for (int i = 0; i < len; ++i)
|
||||
{
|
||||
if (str[i] >= 32 && str[i] < 127)
|
||||
{
|
||||
ret += str[i];
|
||||
}
|
||||
else
|
||||
{
|
||||
char tmp[5];
|
||||
snprintf(tmp, sizeof(tmp), "\\x%02x", (unsigned char)str[i]);
|
||||
ret += tmp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void print_string(std::string& ret, char const* str, int len, bool single_line)
|
||||
{
|
||||
bool printable = true;
|
||||
for (int i = 0; i < len; ++i)
|
||||
{
|
||||
char c = str[i];
|
||||
if (c >= 32 && c < 127) continue;
|
||||
printable = false;
|
||||
break;
|
||||
}
|
||||
ret += "'";
|
||||
if (printable)
|
||||
{
|
||||
if (single_line && len > 30)
|
||||
{
|
||||
ret.append(str, 14);
|
||||
ret += "...";
|
||||
ret.append(str + len-14, 14);
|
||||
}
|
||||
else
|
||||
ret.append(str, len);
|
||||
ret += "'";
|
||||
return;
|
||||
}
|
||||
if (single_line && len > 20)
|
||||
{
|
||||
escape_string(ret, str, 9);
|
||||
ret += "...";
|
||||
escape_string(ret, str + len - 9, 9);
|
||||
}
|
||||
else
|
||||
{
|
||||
escape_string(ret, str, len);
|
||||
}
|
||||
ret += "'";
|
||||
}
|
||||
|
||||
std::string print_entry(lazy_entry const& e, bool single_line, int indent)
|
||||
{
|
||||
char indent_str[200];
|
||||
@@ -576,56 +630,7 @@ namespace libtorrent
|
||||
}
|
||||
case lazy_entry::string_t:
|
||||
{
|
||||
bool printable = true;
|
||||
char const* str = e.string_ptr();
|
||||
for (int i = 0; i < e.string_length(); ++i)
|
||||
{
|
||||
char c = str[i];
|
||||
if (c >= 32 && c < 127) continue;
|
||||
printable = false;
|
||||
break;
|
||||
}
|
||||
ret += "'";
|
||||
if (printable)
|
||||
{
|
||||
if (single_line && e.string_length() > 30)
|
||||
{
|
||||
ret.append(e.string_ptr(), 14);
|
||||
ret += "...";
|
||||
ret.append(e.string_ptr() + e.string_length()-14, 14);
|
||||
}
|
||||
else
|
||||
ret.append(e.string_ptr(), e.string_length());
|
||||
ret += "'";
|
||||
return ret;
|
||||
}
|
||||
if (single_line && e.string_length() > 20)
|
||||
{
|
||||
for (int i = 0; i < 9; ++i)
|
||||
{
|
||||
char tmp[5];
|
||||
snprintf(tmp, sizeof(tmp), "%02x", (unsigned char)str[i]);
|
||||
ret += tmp;
|
||||
}
|
||||
ret += "...";
|
||||
for (int i = e.string_length() - 9
|
||||
, len(e.string_length()); i < len; ++i)
|
||||
{
|
||||
char tmp[5];
|
||||
snprintf(tmp, sizeof(tmp), "%02x", (unsigned char)str[i]);
|
||||
ret += tmp;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < e.string_length(); ++i)
|
||||
{
|
||||
char tmp[5];
|
||||
snprintf(tmp, sizeof(tmp), "%02x", (unsigned char)str[i]);
|
||||
ret += tmp;
|
||||
}
|
||||
}
|
||||
ret += "'";
|
||||
print_string(ret, e.string_ptr(), e.string_length(), single_line);
|
||||
return ret;
|
||||
}
|
||||
case lazy_entry::list_t:
|
||||
@@ -654,9 +659,8 @@ namespace libtorrent
|
||||
{
|
||||
if (i == 0 && one_liner) ret += " ";
|
||||
std::pair<std::string, lazy_entry const*> ent = e.dict_at(i);
|
||||
ret += "'";
|
||||
ret += ent.first;
|
||||
ret += "': ";
|
||||
print_string(ret, ent.first.c_str(), ent.first.size(), true);
|
||||
ret += ": ";
|
||||
ret += print_entry(*ent.second, single_line, indent + 2);
|
||||
if (i < e.dict_size() - 1) ret += (one_liner?", ":indent_str);
|
||||
else ret += (one_liner?" ":indent_str+1);
|
||||
|
Reference in New Issue
Block a user