Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Fix ttyslot namespace (bug 18547).
ttyslot (XPG4) calls the non-XPG4 functions endttyent, getttyent and
setttyent, which in turn bring in references to fgets_unlocked and
getttynam.  This patch fixes this by making these functions into weak
aliases and calling the __* names as needed.

Tested for x86_64 and x86 (testsuite, and that disassembly of
installed stripped shared libraries is unchanged by the patch).

	[BZ #18547]
	* misc/getttyent.c (getttynam): Rename to __getttynam and define
	as weak alias of __getttynam.  Use prototype function definition.
	Call __setttyent, __getttyent and __endttyent instead of
	setttyent, getttyent and endttyent.
	(getttyent): Rename to __getttyent and define as weak alias of
	__getttyent.  Call __setttyent instead of setttyent.  Call
	__fgets_unlocked instead of fgets_unlocked.
	(setttyent): Rename to __setttyent and define as weak alias of
	__setttyent.
	(endttyent): Rename to __endttyent and define as weak alias of
	__endttyent.
	* include/ttyent.h (__getttyent): Declare.  Use libc_hidden_proto.
	(__setttyent): Likewise.
	(__endttyent): Likewise.
	(getttyent): Don't use libc_hidden_proto.
	(setttyent): Likewise.
	(endttyent): Likewise.
	* misc/ttyslot.c (ttyslot): Call __setttyent, __getttyent and
	__endttyent instead of setttyent, getttyent and endttyent.
	* conform/Makefile (test-xfail-XPG4/unistd.h/linknamespace):
	Remove variable.
  • Loading branch information
Joseph Myers committed Jun 17, 2015
1 parent 0595c98 commit abccad0
Show file tree
Hide file tree
Showing 6 changed files with 50 additions and 22 deletions.
23 changes: 23 additions & 0 deletions ChangeLog
@@ -1,5 +1,28 @@
2015-06-17 Joseph Myers <joseph@codesourcery.com>

[BZ #18547]
* misc/getttyent.c (getttynam): Rename to __getttynam and define
as weak alias of __getttynam. Use prototype function definition.
Call __setttyent, __getttyent and __endttyent instead of
setttyent, getttyent and endttyent.
(getttyent): Rename to __getttyent and define as weak alias of
__getttyent. Call __setttyent instead of setttyent. Call
__fgets_unlocked instead of fgets_unlocked.
(setttyent): Rename to __setttyent and define as weak alias of
__setttyent.
(endttyent): Rename to __endttyent and define as weak alias of
__endttyent.
* include/ttyent.h (__getttyent): Declare. Use libc_hidden_proto.
(__setttyent): Likewise.
(__endttyent): Likewise.
(getttyent): Don't use libc_hidden_proto.
(setttyent): Likewise.
(endttyent): Likewise.
* misc/ttyslot.c (ttyslot): Call __setttyent, __getttyent and
__endttyent instead of setttyent, getttyent and endttyent.
* conform/Makefile (test-xfail-XPG4/unistd.h/linknamespace):
Remove variable.

[BZ #18546]
* socket/recv.c (__recv): Use libc_hidden_def.
* socket/socket.c (__socket): Likewise.
Expand Down
2 changes: 1 addition & 1 deletion NEWS
Expand Up @@ -22,7 +22,7 @@ Version 2.22
18324, 18333, 18346, 18397, 18409, 18410, 18412, 18418, 18422, 18434,
18444, 18468, 18469, 18470, 18479, 18483, 18495, 18496, 18497, 18498,
18507, 18512, 18519, 18520, 18522, 18527, 18528, 18529, 18530, 18532,
18533, 18534, 18536, 18539, 18540, 18542, 18544, 18545, 18546.
18533, 18534, 18536, 18539, 18540, 18542, 18544, 18545, 18546, 18547.

* Cache information can be queried via sysconf() function on s390 e.g. with
_SC_LEVEL1_ICACHE_SIZE as argument.
Expand Down
1 change: 0 additions & 1 deletion conform/Makefile
Expand Up @@ -345,4 +345,3 @@ test-xfail-XOPEN2K8/ndbm.h/linknamespace = yes

# Unsorted expected failures.
test-xfail-XPG3/unistd.h/linknamespace = yes
test-xfail-XPG4/unistd.h/linknamespace = yes
9 changes: 6 additions & 3 deletions include/ttyent.h
@@ -1,8 +1,11 @@
#ifndef _TTYENT_H
# include <misc/ttyent.h>

libc_hidden_proto (getttyent)
libc_hidden_proto (setttyent)
libc_hidden_proto (endttyent)
extern __typeof (getttyent) __getttyent __THROW;
libc_hidden_proto (__getttyent)
extern __typeof (setttyent) __setttyent __THROW;
libc_hidden_proto (__setttyent)
extern __typeof (endttyent) __endttyent __THROW;
libc_hidden_proto (__endttyent)

#endif
29 changes: 16 additions & 13 deletions misc/getttyent.c
Expand Up @@ -44,36 +44,36 @@ static char zapchar;
static FILE *tf;

struct ttyent *
getttynam(tty)
const char *tty;
__getttynam (const char *tty)
{
struct ttyent *t;

setttyent();
while ((t = getttyent()))
__setttyent();
while ((t = __getttyent()))
if (!strcmp(tty, t->ty_name))
break;
endttyent();
__endttyent();
return (t);
}
weak_alias (__getttynam, getttynam)

static char *skip (char *) __THROW internal_function;
static char *value (char *) __THROW internal_function;

struct ttyent *
getttyent (void)
__getttyent (void)
{
static struct ttyent tty;
int c;
char *p;
#define MAXLINELENGTH 100
static char line[MAXLINELENGTH];

if (!tf && !setttyent())
if (!tf && !__setttyent())
return (NULL);
flockfile (tf);
for (;;) {
if (!fgets_unlocked(p = line, sizeof(line), tf)) {
if (!__fgets_unlocked(p = line, sizeof(line), tf)) {
funlockfile (tf);
return (NULL);
}
Expand Down Expand Up @@ -131,7 +131,8 @@ getttyent (void)
*p = '\0';
return (&tty);
}
libc_hidden_def (getttyent)
libc_hidden_def (__getttyent)
weak_alias (__getttyent, getttyent)

#define QUOTED 1

Expand Down Expand Up @@ -184,7 +185,7 @@ value(p)
}

int
setttyent (void)
__setttyent (void)
{

if (tf) {
Expand All @@ -197,10 +198,11 @@ setttyent (void)
}
return (0);
}
libc_hidden_def (setttyent)
libc_hidden_def (__setttyent)
weak_alias (__setttyent, setttyent)

int
endttyent (void)
__endttyent (void)
{
int rval;

Expand All @@ -211,4 +213,5 @@ endttyent (void)
}
return (1);
}
libc_hidden_def (endttyent)
libc_hidden_def (__endttyent)
weak_alias (__endttyent, endttyent)
8 changes: 4 additions & 4 deletions misc/ttyslot.c
Expand Up @@ -53,20 +53,20 @@ ttyslot (void)

name = __alloca (buflen);

setttyent();
__setttyent();
for (cnt = 0; cnt < 3; ++cnt)
if (__ttyname_r (cnt, name, buflen) == 0) {
if ((p = rindex(name, '/')))
++p;
else
p = name;
for (slot = 1; (ttyp = getttyent()); ++slot)
for (slot = 1; (ttyp = __getttyent()); ++slot)
if (!strcmp(ttyp->ty_name, p)) {
endttyent();
__endttyent();
return(slot);
}
break;
}
endttyent();
__endttyent();
return(0);
}

0 comments on commit abccad0

Please sign in to comment.