X-Git-Url: http://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Ftrace%2Fvisbuf.c;h=aca8affc4fa1b11a27dbcb37873b6e3f1e4bd83d;hp=66d0c8a797ffde2fbf3b3751491ede1fe66b2295;hb=HEAD;hpb=76a479337308b4b5e749fa8c38b7b7f482998c5b;ds=sidebyside diff --git a/ncurses/trace/visbuf.c b/ncurses/trace/visbuf.c index 66d0c8a7..590e4230 100644 --- a/ncurses/trace/visbuf.c +++ b/ncurses/trace/visbuf.c @@ -1,5 +1,6 @@ /**************************************************************************** - * Copyright (c) 2001-2014,2016 Free Software Foundation, Inc. * + * Copyright 2019-2021,2023 Thomas E. Dickey * + * Copyright 2001-2016,2017 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * @@ -42,7 +43,7 @@ #include #include -MODULE_ID("$Id: visbuf.c,v 1.47 2016/05/28 23:29:37 tom Exp $") +MODULE_ID("$Id: visbuf.c,v 1.54 2023/05/27 20:13:10 tom Exp $") #define NUM_VISBUFS 4 @@ -66,7 +67,9 @@ static const char r_brace[] = StringOf(R_BRACE); static char * _nc_vischar(char *tp, unsigned c LIMIT_ARG) { - if (c == '"' || c == '\\') { + if (tp == NULL) { + return NULL; + } else if (c == '"' || c == '\\') { *tp++ = '\\'; *tp++ = (char) c; } else if (is7bits((int) c) && (isgraph((int) c) || c == ' ')) { @@ -80,6 +83,9 @@ _nc_vischar(char *tp, unsigned c LIMIT_ARG) } else if (c == '\b') { *tp++ = '\\'; *tp++ = 'b'; + } else if (c == '\t') { + *tp++ = '\\'; + *tp++ = 't'; } else if (c == '\033') { *tp++ = '\\'; *tp++ = 'e'; @@ -279,7 +285,7 @@ _nc_viswibuf(const wint_t *buf) /* use these functions for displaying parts of a line within a window */ NCURSES_EXPORT(const char *) -_nc_viscbuf2(int bufnum, const NCURSES_CH_T * buf, int len) +_nc_viscbuf2(int bufnum, const NCURSES_CH_T *buf, int len) { char *result = _nc_trace_buf(bufnum, (size_t) BUFSIZ); @@ -333,9 +339,10 @@ _nc_viscbuf2(int bufnum, const NCURSES_CH_T * buf, int len) PUTC_n = (int) wcrtomb(PUTC_buf, buf[j].chars[PUTC_i], &PUT_st); if (PUTC_n <= 0 || buf[j].chars[PUTC_i] > 255) { - sprintf(temp, "{%d:\\u%x}", - wcwidth(buf[j].chars[PUTC_i]), - buf[j].chars[PUTC_i]); + _nc_SPRINTF(temp, _nc_SLIMIT(sizeof(temp)) + "{%d:\\u%lx}", + _nc_wacs_width(buf[j].chars[PUTC_i]), + (unsigned long) buf[j].chars[PUTC_i]); (void) _nc_trace_bufcat(bufnum, temp); break; } @@ -366,7 +373,7 @@ _nc_viscbuf2(int bufnum, const NCURSES_CH_T * buf, int len) } NCURSES_EXPORT(const char *) -_nc_viscbuf(const NCURSES_CH_T * buf, int len) +_nc_viscbuf(const NCURSES_CH_T *buf, int len) { return _nc_viscbuf2(0, buf, len); }