Simplify is_my_tty()
This commit will serve to document why we shouldn't worry about the truncation in the call to strlcpy(3). Since we have one more byte in tmptty than in full_tty, truncation will produce a string that is at least one byte longer than full_tty. Such a string could never compare equal, so we're actually handling the truncation in a clever way. Maybe too clever, but that's why I'm documenting it here. Now, about the simplification itself: Since we made sure that both full_tty and tmptty are null-terminated, we can call strcmp(3) instead of strncmp(3). We can also simplify the return logic avoiding one branch. Cc: Paul Eggert <eggert@cs.ucla.edu> Signed-off-by: Alejandro Colomar <alx@kernel.org> Reviewed-by: Iker Pedrosa <ipedrosa@redhat.com>
This commit is contained in:
parent
e27ca53091
commit
1d7d94ed7d
@ -32,7 +32,7 @@ static bool is_my_tty (const char tty[UT_LINESIZE])
|
|||||||
{
|
{
|
||||||
char full_tty[STRLEN("/dev/") + UT_LINESIZE + 1];
|
char full_tty[STRLEN("/dev/") + UT_LINESIZE + 1];
|
||||||
/* tmptty shall be bigger than full_tty */
|
/* tmptty shall be bigger than full_tty */
|
||||||
static char tmptty[sizeof (full_tty)+1];
|
static char tmptty[sizeof(full_tty) + 1];
|
||||||
|
|
||||||
full_tty[0] = '\0';
|
full_tty[0] = '\0';
|
||||||
if (tty[0] != '/')
|
if (tty[0] != '/')
|
||||||
@ -42,17 +42,15 @@ static bool is_my_tty (const char tty[UT_LINESIZE])
|
|||||||
if ('\0' == tmptty[0]) {
|
if ('\0' == tmptty[0]) {
|
||||||
const char *tname = ttyname (STDIN_FILENO);
|
const char *tname = ttyname (STDIN_FILENO);
|
||||||
if (NULL != tname)
|
if (NULL != tname)
|
||||||
(void) strlcpy (tmptty, tname, sizeof tmptty);
|
(void) strlcpy (tmptty, tname, sizeof(tmptty));
|
||||||
}
|
}
|
||||||
|
|
||||||
if ('\0' == tmptty[0]) {
|
if ('\0' == tmptty[0]) {
|
||||||
(void) puts (_("Unable to determine your tty name."));
|
(void) puts (_("Unable to determine your tty name."));
|
||||||
exit (EXIT_FAILURE);
|
exit (EXIT_FAILURE);
|
||||||
} else if (strncmp (full_tty, tmptty, sizeof (tmptty)) != 0) {
|
|
||||||
return false;
|
|
||||||
} else {
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return strcmp (full_tty, tmptty) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user