X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Fbase%2Flib_insnstr.c;h=ff1ae573a576d73b07efb3f7418db0b481aaccf8;hp=8ee26a8091c1ef5d20140d457ed42571072fb920;hb=HEAD;hpb=b86393354bb86154b7b860989e5ed8655611d30b diff --git a/ncurses/base/lib_insnstr.c b/ncurses/base/lib_insnstr.c index 8ee26a80..caec48e8 100644 --- a/ncurses/base/lib_insnstr.c +++ b/ncurses/base/lib_insnstr.c @@ -1,5 +1,6 @@ /**************************************************************************** - * Copyright (c) 2004-2016,2018 Free Software Foundation, Inc. * + * Copyright 2018-2022,2023 Thomas E. Dickey * + * Copyright 2004-2009,2016 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 * @@ -40,7 +41,7 @@ #include #include -MODULE_ID("$Id: lib_insnstr.c,v 1.6 2018/03/10 20:13:59 Gyorgy.Jeney Exp $") +MODULE_ID("$Id: lib_insnstr.c,v 1.10 2023/11/21 21:58:03 tom Exp $") NCURSES_EXPORT(int) winsnstr(WINDOW *win, const char *s, int n) @@ -50,7 +51,7 @@ winsnstr(WINDOW *win, const char *s, int n) T((T_CALLED("winsnstr(%p,%s,%d)"), (void *) win, _nc_visbufn(s, n), n)); - if (win != 0 && str != 0) { + if (win != 0 && str != 0 && n != 0) { SCREEN *sp = _nc_screen_of(win); #if USE_WIDEC_SUPPORT /* @@ -69,6 +70,7 @@ winsnstr(WINDOW *win, const char *s, int n) init_mb(state); n3 = mbstowcs(buffer, s, nn); if (n3 != (size_t) (-1)) { + buffer[n3] = '\0'; code = wins_nwstr(win, buffer, (int) n3); } free(buffer); @@ -81,7 +83,7 @@ winsnstr(WINDOW *win, const char *s, int n) NCURSES_SIZE_T ox = win->_curx; const unsigned char *cp; - for (cp = str; (n <= 0 || (cp - str) < n) && *cp; cp++) { + for (cp = str; (n < 0 || (cp - str) < n) && *cp; cp++) { _nc_insert_ch(sp, win, (chtype) UChar(*cp)); } win->_curx = ox;