Further refinements of ptsname_r(3) interface:

- Hide ptsname_r under __BSD_VISIBLE for now as the specification
   is not finalized at this time.
 - Keep Symbol.map sorted.
 - Avoid the interposing of ptsname_r(3) from an user application
   from breaking ptsname(3) by making the implementation a static
   method and call the static function from ptsname(3) instead.

Reported by:	kib
Reviewed by:	kib, jilles
MFC after:	2 weeks
Differential Revision:	https://reviews.freebsd.org/D26845
This commit is contained in:
Xin LI 2020-10-20 01:29:45 +00:00
parent bce74ff0ce
commit 5011fb430a
3 changed files with 18 additions and 10 deletions

View File

@ -211,7 +211,6 @@ double drand48(void);
double erand48(unsigned short[3]); double erand48(unsigned short[3]);
/* char *fcvt(double, int, int * __restrict, int * __restrict); */ /* char *fcvt(double, int, int * __restrict, int * __restrict); */
/* char *gcvt(double, int, int * __restrict, int * __restrict); */ /* char *gcvt(double, int, int * __restrict, int * __restrict); */
int grantpt(int);
char *initstate(unsigned int, char *, size_t); char *initstate(unsigned int, char *, size_t);
long jrand48(unsigned short[3]); long jrand48(unsigned short[3]);
char *l64a(long); char *l64a(long);
@ -223,9 +222,6 @@ char *mktemp(char *);
#endif #endif
long mrand48(void); long mrand48(void);
long nrand48(unsigned short[3]); long nrand48(unsigned short[3]);
int posix_openpt(int);
char *ptsname(int);
int ptsname_r(int, char *, size_t);
int putenv(char *); int putenv(char *);
long random(void); long random(void);
unsigned short unsigned short
@ -233,8 +229,18 @@ unsigned short
char *setstate(/* const */ char *); char *setstate(/* const */ char *);
void srand48(long); void srand48(long);
void srandom(unsigned int); void srandom(unsigned int);
#endif /* __XSI_VISIBLE */
#if __XSI_VISIBLE
int grantpt(int);
int posix_openpt(int);
char *ptsname(int);
int unlockpt(int); int unlockpt(int);
#endif /* __XSI_VISIBLE */ #endif /* __XSI_VISIBLE */
#if __BSD_VISIBLE
/* ptsname_r will be included in POSIX issue 8 */
int ptsname_r(int, char *, size_t);
#endif
#if __BSD_VISIBLE #if __BSD_VISIBLE
extern const char *malloc_conf; extern const char *malloc_conf;

View File

@ -122,10 +122,10 @@ FBSD_1.5 {
}; };
FBSD_1.6 { FBSD_1.6 {
ptsname_r;
qsort_s; qsort_s;
rand; rand;
srand; srand;
ptsname_r;
}; };
FBSDprivate_1.0 { FBSDprivate_1.0 {

View File

@ -76,7 +76,7 @@ __strong_reference(__isptmaster, unlockpt);
* associated with the specified master. * associated with the specified master.
*/ */
int int
ptsname_r(int fildes, char *buffer, size_t buflen) __ptsname_r(int fildes, char *buffer, size_t buflen)
{ {
if (buflen <= sizeof(_PATH_DEV)) { if (buflen <= sizeof(_PATH_DEV)) {
@ -101,6 +101,8 @@ ptsname_r(int fildes, char *buffer, size_t buflen)
return (0); return (0);
} }
__strong_reference(__ptsname_r, ptsname_r);
/* /*
* ptsname(): return the pathname of the slave pseudo-terminal device * ptsname(): return the pathname of the slave pseudo-terminal device
* associated with the specified master. * associated with the specified master.
@ -108,10 +110,10 @@ ptsname_r(int fildes, char *buffer, size_t buflen)
char * char *
ptsname(int fildes) ptsname(int fildes)
{ {
static char pt_slave[sizeof _PATH_DEV + SPECNAMELEN]; static char pt_slave[sizeof(_PATH_DEV) + SPECNAMELEN];
if (ptsname_r(fildes, pt_slave, sizeof(pt_slave)) == 0) if (__ptsname_r(fildes, pt_slave, sizeof(pt_slave)) == 0)
return (pt_slave); return (pt_slave);
else
return (NULL); return (NULL);
} }