curs_getstr 3x
-
+
@@ -67,7 +70,7 @@
The function getstr is equivalent to a series of calls to getch, until
a newline or carriage return is received (the terminating character is
not included in the returned string). The resulting value is placed in
- the area pointed to by the character pointer str.
+ the area pointed to by the character pointer str, followed by a NUL.
wgetnstr reads at most n characters, thus preventing a possible over-
flow of the input buffer. Any attempt to enter more characters (other
@@ -122,6 +125,48 @@
The functions getnstr, mvgetnstr, and mvwgetnstr were present but not
documented in SVr4.
+ X/Open Curses, Issue 5 (2007) stated that these functions "read at most
+ n bytes" but did not state whether the terminating NUL is counted in
+ that limit. X/Open Curses, Issue 7 (2009) changed that to say they
+ "read at most n-1 bytes" to allow for the terminating NUL. As of 2018,
+ some implementations do, some do not count it:
+
+ o ncurses 6.1 and PDCurses do not count the NUL in the given limit,
+ while
+
+ o Solaris SVr4 and NetBSD curses count the NUL as part of the limit.
+
+ o Solaris xcurses provides both: its wide-character wget_nstr re-
+ serves a NUL, but its wgetnstr does not count the NUL consistently.
+
+ In SVr4 curses, a negative value of n tells wgetnstr to assume that the
+ caller's buffer is large enough to hold the result, i.e., to act like
+ wgetstr. X/Open Curses does not mention this (or anything related to
+ negative or zero values of n), however most implementations use the
+ feature, with different limits:
+
+ o Solaris SVr4 curses and PDCurses limit the result to 255 bytes.
+ Other Unix systems than Solaris are likely to use the same limit.
+
+ o Solaris xcurses limits the result to LINE_MAX bytes.
+
+ o NetBSD 7 assumes no particular limit for the result from wgetstr.
+ However, it limits the wgetnstr parameter n to ensure that it is
+ greater than zero.
+
+ A comment in NetBSD's source code states that this is specified in
+ SUSv2.
+
+ o ncurses (before 6.2) assumes no particular limit for the result
+ from wgetstr, and treats the n parameter of wgetnstr like SVr4
+ curses.
+
+ o ncurses 6.2 uses LINE_MAX, or a larger (system-dependent) value
+ which the sysconf function may provide. If neither LINE_MAX or
+ sysconf is available, ncurses uses the POSIX value for LINE_MAX (a
+ 2048 byte limit). In either case, it reserves a byte for the ter-
+ minating NUL.
+