No implementation or spec requires *n to be 0 to allocate a new buffer: * musl checks for !*lineptr (and sets *n=0 for later allocations) * glibc checks for !*lineptr || !*n (but only because it allocates early) * NetBSD checks for !*lineptr (and sets *n=0 for later allocations; but specifies *n => mlen(*lineptr) >= *n as a precondition, to which this appears to be an exception) * FreeBSD checks for !*lineptr and sets *n=0 (and specifies !*lineptr as sufficient) * Lastly, POSIX.1-2017 specifies: > If *n is non-zero, the application shall ensure that *lineptr > either points to an object of size at least *n bytes, > or is a null pointer. Signed-off-by: Ahelenia Ziemiańska <nabijaczleweli@xxxxxxxxxxxxxxxxxx> --- man3/getline.3 | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/man3/getline.3 b/man3/getline.3 index a32d7e770..d6db42611 100644 --- a/man3/getline.3 +++ b/man3/getline.3 @@ -60,8 +60,7 @@ one was found. If .I "*lineptr" is set to NULL and -.I *n -is set 0 before the call, then +before the call, then .BR getline () will allocate a buffer for storing the line. This buffer should be freed by the user program -- 2.20.1
Attachment:
signature.asc
Description: PGP signature