diff options
author | jcid <devnull@localhost> | 2008-04-07 18:55:14 +0200 |
---|---|---|
committer | jcid <devnull@localhost> | 2008-04-07 18:55:14 +0200 |
commit | 9388b5d4464d13117bcaad1fda1a1b7ebd8d0264 (patch) | |
tree | 8bb52fd9a34f8acd996eff309635b64594917f12 | |
parent | 56583b97209336f87a46bb1c2bd18a75b9fc588f (diff) |
- Added dStr_printable() to dlib.
-rw-r--r-- | ChangeLog | 2 | ||||
-rw-r--r-- | dlib/dlib.c | 34 | ||||
-rw-r--r-- | dlib/dlib.h | 1 | ||||
-rw-r--r-- | src/IO/IO.c | 3 | ||||
-rw-r--r-- | src/IO/http.c | 3 | ||||
-rw-r--r-- | src/capi.c | 3 |
6 files changed, 39 insertions, 7 deletions
@@ -87,7 +87,7 @@ dillo-fltk2 - Fixed a bug in Html_parse_entity. - Fixed a bug in a_Url_cmp. - Fixed a bug in Cookies_parse_one. Set it to a single return point too! - - Added dStr_memmem() to dlib. + - Added dStr_memmem() and dStr_printable() to dlib. - Fixed a decoding bug in the datauri dpi. Patches: place +- Fixed a problem with locally-installed dpis. diff --git a/dlib/dlib.c b/dlib/dlib.c index 862e642f..f01314eb 100644 --- a/dlib/dlib.c +++ b/dlib/dlib.c @@ -435,6 +435,40 @@ char *dStr_memmem(Dstr *haystack, Dstr *needle) } /* + * Return a printable representation of the provided Dstr, limited to a length + * of roughly maxlen. + * + * This is NOT threadsafe. + */ +const char *dStr_printable(Dstr *in, int maxlen) +{ + int i; + static const char *const HEX = "0123456789ABCDEF"; + static Dstr *out = NULL; + + if (in == NULL) + return NULL; + + if (out) + dStr_truncate(out, 0); + else + out = dStr_sized_new(in->len); + + for (i = 0; (i < in->len) && (out->len < maxlen); ++i) { + if (isprint(in->str[i]) || (in->str[i] == '\n')) { + dStr_append_c(out, in->str[i]); + } else { + dStr_append_l(out, "\\x", 2); + dStr_append_c(out, HEX[(in->str[i] >> 4) & 15]); + dStr_append_c(out, HEX[in->str[i] & 15]); + } + } + if (out->len >= maxlen) + dStr_append(out, "..."); + return out->str; +} + +/* *- dList --------------------------------------------------------------------- */ diff --git a/dlib/dlib.h b/dlib/dlib.h index 7bcac739..cd3b9fc5 100644 --- a/dlib/dlib.h +++ b/dlib/dlib.h @@ -108,6 +108,7 @@ void dStr_sprintf (Dstr *ds, const char *format, ...); void dStr_sprintfa (Dstr *ds, const char *format, ...); int dStr_cmp(Dstr *ds1, Dstr *ds2); char *dStr_memmem(Dstr *haystack, Dstr *needle); +const char *dStr_printable(Dstr *in, int maxlen); /* *-- dList -------------------------------------------------------------------- diff --git a/src/IO/IO.c b/src/IO/IO.c index 2e09c1b0..4b24c774 100644 --- a/src/IO/IO.c +++ b/src/IO/IO.c @@ -354,9 +354,8 @@ void a_IO_ccc(int Op, int Branch, int Dir, ChainLink *Info, case OpAbort: io = Info->LocalKey; if (io->Buf->len > 0) { - /* MSG can be truncated by embedded NULLs */ MSG_WARN("IO_write, closing with pending data not sent\n"); - MSG_WARN(" \"%s\"\n", io->Buf->str); + MSG_WARN(" \"%s\"\n", dStr_printable(io->Buf, 2048)); } /* close FD, remove from ValidIOs and remove its watch */ IO_close_fd(io, IO_StopRdWr); diff --git a/src/IO/http.c b/src/IO/http.c index 8ccb015c..a6acc031 100644 --- a/src/IO/http.c +++ b/src/IO/http.c @@ -278,8 +278,7 @@ Dstr *a_Http_make_query_str(const DilloUrl *url, bool_t use_proxy) dStr_free(s_port, TRUE); dStr_free(full_path, TRUE); dStr_free(proxy_auth, TRUE); - /* debug msg will fail on embedded NULLs */ - DEBUG_MSG(4, "Query:\n%s", query->str); + DEBUG_MSG(4, "Query:\n%s\n", dStr_printable(query, 8192)); return query; } @@ -228,8 +228,7 @@ static int Capi_dpi_verify_request(DilloWeb *web) MSG("Capi_dpi_verify_request: Permission Denied!\n"); MSG(" URL_STR : %s\n", URL_STR(web->url)); if (URL_FLAGS(web->url) & URL_Post) { - /* MSG will fail on embedded NULLs */ - MSG(" URL_DATA: %s\n", URL_DATA(web->url)->str); + MSG(" URL_DATA: %s\n", dStr_printable(URL_DATA(web->url), 1024)); } } return allow; |