Mercurial > illumos > illumos-gate
changeset 2703:333cd67fe595
6468291 init s on a pseudo terminal takes two tries
author | vikram |
---|---|
date | Sat, 09 Sep 2006 12:20:02 -0700 |
parents | d92a4e3ea90c |
children | bac0ea518d0f |
files | usr/src/cmd/init/init.c |
diffstat | 1 files changed, 9 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/cmd/init/init.c Fri Sep 08 16:31:23 2006 -0700 +++ b/usr/src/cmd/init/init.c Sat Sep 09 12:20:02 2006 -0700 @@ -3515,14 +3515,16 @@ ADT_FAIL_VALUE_BAD_TTY, argv[1]); exit(1); } - if (stat(ln, &sconbuf) != -1 && - stat(SYSCON, &conbuf) != -1 && - sconbuf.st_rdev != conbuf.st_rdev && - sconbuf.st_ino != conbuf.st_ino) { + + if ((stat(ln, &sconbuf) != -1) && + (stat(SYSCON, &conbuf) == -1 || + sconbuf.st_rdev != conbuf.st_rdev)) { /* + * /dev/syscon needs to change. * Unlink /dev/syscon and relink it to the current line. */ - if (unlink(SYSCON) == FAILURE) { + if (lstat(SYSCON, &conbuf) != -1 && + unlink(SYSCON) == FAILURE) { perror("Can't unlink /dev/syscon"); (void) fprintf(stderr, "Run command on the system console.\n"); @@ -3530,9 +3532,9 @@ ADT_FAIL_VALUE_PROGRAM, argv[1]); exit(1); } - if (link(ln, SYSCON) == FAILURE) { + if (symlink(ln, SYSCON) == FAILURE) { (void) fprintf(stderr, - "Can't link /dev/syscon to %s: %s", ln, + "Can't symlink /dev/syscon to %s: %s", ln, strerror(errno)); /* Try to leave a syscon */