svn commit: r365506 - in head: include lib/libc/gen lib/libc/sys
Kyle Evans
kevans at FreeBSD.org
Wed Sep 9 18:07:15 UTC 2020
Author: kevans
Date: Wed Sep 9 18:07:13 2020
New Revision: 365506
URL: https://svnweb.freebsd.org/changeset/base/365506
Log:
getlogin_r: fix the type of len
getlogin_r is specified by POSIX to to take a size_t len, not int. Fix our
version to do the same, bump the symbol version due to ABI change and
provide compat.
This was reported to break compilation of Ruby 2.8.
Some discussion about the necessity of the ABI compat did take place in the
review. While many 64-bit platforms would likely be passing it in a 64-bit
register and zero-extended and thus, not notice ABI breakage, some do
sign-extend (e.g. mips).
PR: 247102
Submitted by: Bertram Scharpf <software at bertram-scharpf.de> (original)
Submitted by: cem (ABI compat)
MFC after: 1 week
Differential Revision: https://reviews.freebsd.org/D26335
Modified:
head/include/unistd.h
head/lib/libc/gen/Symbol.map
head/lib/libc/gen/getlogin.c
head/lib/libc/sys/getlogin.2
Modified: head/include/unistd.h
==============================================================================
--- head/include/unistd.h Wed Sep 9 16:35:51 2020 (r365505)
+++ head/include/unistd.h Wed Sep 9 18:07:13 2020 (r365506)
@@ -399,7 +399,7 @@ int ftruncate(int, off_t);
#endif
#if __POSIX_VISIBLE >= 199506
-int getlogin_r(char *, int);
+int getlogin_r(char *, size_t);
#endif
/* 1003.1-2001 */
Modified: head/lib/libc/gen/Symbol.map
==============================================================================
--- head/lib/libc/gen/Symbol.map Wed Sep 9 16:35:51 2020 (r365505)
+++ head/lib/libc/gen/Symbol.map Wed Sep 9 18:07:13 2020 (r365506)
@@ -156,7 +156,6 @@ FBSD_1.0 {
gethostname;
getloadavg;
getlogin;
- getlogin_r;
setnetgrent;
getnetgrent;
endnetgrent;
@@ -422,6 +421,7 @@ FBSD_1.5 {
};
FBSD_1.6 {
+ getlogin_r;
memalign;
scandir_b;
sigandset;
Modified: head/lib/libc/gen/getlogin.c
==============================================================================
--- head/lib/libc/gen/getlogin.c Wed Sep 9 16:35:51 2020 (r365505)
+++ head/lib/libc/gen/getlogin.c Wed Sep 9 18:07:13 2020 (r365506)
@@ -58,7 +58,7 @@ getlogin(void)
}
int
-getlogin_r(char *logname, int namelen)
+getlogin_r(char *logname, size_t namelen)
{
char tmpname[MAXLOGNAME];
int len;
@@ -75,3 +75,13 @@ getlogin_r(char *logname, int namelen)
strlcpy(logname, tmpname, len);
return (0);
}
+
+/* FreeBSD 12 and earlier compat. */
+int
+__getlogin_r_fbsd12(char *logname, int namelen)
+{
+ if (namelen < 1)
+ return (ERANGE);
+ return (getlogin_r(logname, namelen));
+}
+__sym_compat(getlogin_r, __getlogin_r_fbsd12, FBSD_1.0);
Modified: head/lib/libc/sys/getlogin.2
==============================================================================
--- head/lib/libc/sys/getlogin.2 Wed Sep 9 16:35:51 2020 (r365505)
+++ head/lib/libc/sys/getlogin.2 Wed Sep 9 18:07:13 2020 (r365506)
@@ -28,7 +28,7 @@
.\" @(#)getlogin.2 8.1 (Berkeley) 6/9/93
.\" $FreeBSD$
.\"
-.Dd June 9, 1993
+.Dd September 9, 2020
.Dt GETLOGIN 2
.Os
.Sh NAME
@@ -44,7 +44,7 @@
.Fn getlogin void
.In sys/param.h
.Ft int
-.Fn getlogin_r "char *name" "int len"
+.Fn getlogin_r "char *name" "size_t len"
.Ft int
.Fn setlogin "const char *name"
.Sh DESCRIPTION
More information about the svn-src-all
mailing list