X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Ftinfo%2Fcaptoinfo.c;h=4959edc72a1efde65303afb716088963149aca19;hp=db46e2096903912075e52385c377ac0928ad632a;hb=90d42867e1296bc79021006a92032c76e59068b6;hpb=8554ac8f8bb70116fbc962f529168d273e950e2b diff --git a/ncurses/tinfo/captoinfo.c b/ncurses/tinfo/captoinfo.c index db46e209..4959edc7 100644 --- a/ncurses/tinfo/captoinfo.c +++ b/ncurses/tinfo/captoinfo.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1998-2011,2012 Free Software Foundation, Inc. * + * Copyright (c) 1998-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 * @@ -93,7 +93,7 @@ #include #include -MODULE_ID("$Id: captoinfo.c,v 1.75 2012/11/24 20:48:54 tom Exp $") +MODULE_ID("$Id: captoinfo.c,v 1.79 2017/02/11 20:08:49 tom Exp $") #define MAX_PUSHED 16 /* max # args we can push onto the stack */ @@ -239,7 +239,7 @@ getparm(int parm, int n) parm = 1; } - while (n--) { + while (n-- > 0) { dp = save_string(dp, "%p"); dp = save_char(dp, '0' + parm); } @@ -248,7 +248,7 @@ getparm(int parm, int n) if (n > 1) { _nc_warning("string may not be optimal"); dp = save_string(dp, "%Pa"); - while (n--) { + while (n-- > 0) { dp = save_string(dp, "%ga"); } } @@ -525,17 +525,20 @@ bcd_expression(const char *str) static char * save_tc_char(char *bufptr, int c1) { - char temp[80]; - if (is7bits(c1) && isprint(c1)) { if (c1 == ':' || c1 == '\\') bufptr = save_char(bufptr, '\\'); bufptr = save_char(bufptr, c1); } else { - if (c1 == (c1 & 0x1f)) /* iscntrl() returns T on 255 */ - _nc_STRCPY(temp, unctrl((chtype) c1), sizeof(temp)); - else - _nc_SPRINTF(temp, _nc_SLIMIT(sizeof(temp)) "\\%03o", c1); + char temp[80]; + + if (c1 == (c1 & 0x1f)) { /* iscntrl() returns T on 255 */ + _nc_SPRINTF(temp, _nc_SLIMIT(sizeof(temp)) + "%.20s", unctrl((chtype) c1)); + } else { + _nc_SPRINTF(temp, _nc_SLIMIT(sizeof(temp)) + "\\%03o", c1); + } bufptr = save_string(bufptr, temp); } return bufptr; @@ -622,13 +625,15 @@ _nc_infotocap(const char *cap GCC_UNUSED, const char *str, int const parameteriz } else if (str[1] == ',') { bufptr = save_char(bufptr, *++str); } else { - int xx1, xx2; + int xx1; bufptr = save_char(bufptr, *str++); xx1 = *str; if (_nc_strict_bsd) { + if (isdigit(UChar(xx1))) { int pad = 0; + int xx2; if (!isdigit(UChar(str[1]))) pad = 2;