Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F149818535
D24916.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
1 KB
Referenced Files
None
Subscribers
None
D24916.diff
View Options
Index: head/lib/libc/stdio/fgetln.3
===================================================================
--- head/lib/libc/stdio/fgetln.3
+++ head/lib/libc/stdio/fgetln.3
@@ -28,7 +28,7 @@
.\" @(#)fgetln.3 8.3 (Berkeley) 4/19/94
.\" $FreeBSD$
.\"
-.Dd February 15, 2016
+.Dd June 11, 2020
.Dt FGETLN 3
.Os
.Sh NAME
@@ -126,3 +126,33 @@
.Fn fgetln
function first appeared in
.Bx 4.4 .
+.Sh CAVEATS
+Since the returned buffer is not a C string (it is not NUL terminated), a
+common practice is to replace the newline character with
+.Sq \e0 .
+However, if the last line in a file does not contain a newline,
+the returned text won't contain a newline either.
+The following code demonstrates how to deal with this problem by allocating a
+temporary buffer:
+.Bd -literal
+ char *buf, *lbuf;
+ size_t len;
+
+ lbuf = NULL;
+ while ((buf = fgetln(fp, &len)) != NULL) {
+ if (buf[len - 1] == '\en')
+ buf[len - 1] = '\e0';
+ else {
+ /* EOF without EOL, copy and add the NUL */
+ if ((lbuf = malloc(len + 1)) == NULL)
+ err(1, NULL);
+ memcpy(lbuf, buf, len);
+ lbuf[len] = '\e0';
+ buf = lbuf;
+ }
+ printf("%s\en", buf);
+ }
+ free(lbuf);
+ if (ferror(fp))
+ err(1, "fgetln");
+.Ed
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Mar 28, 8:16 AM (1 h, 44 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
30434312
Default Alt Text
D24916.diff (1 KB)
Attached To
Mode
D24916: Add Caveats Section to fgetln(3)
Attached
Detach File
Event Timeline
Log In to Comment