On Wed, 4 Jul 2007 20:58:11 +0200
Harald Küthe <[EMAIL PROTECTED]> wrote:
> > Try this: in init.c, add "else" clause as shown below:
> > 
> > static void console_init(void)
> > {
> >         struct serial_struct sr;
> >         char *s;
> > 
> >         s = getenv("CONSOLE");
> >         if (!s) s = getenv("console");
> >         if (s) {
> >                 int fd = open(s, O_RDWR | O_NONBLOCK | O_NOCTTY);
> >                 if (fd >= 0) {
> >                         dup2(fd, 0);
> >                         dup2(fd, 1);
> >                         dup2(fd, 2);
> >                         while (fd > 2) close(fd--);
> >                 }
> >                 messageD(L_LOG, "console='%s'", s);
> > +        } else {
> > +               /* Make sure fd 0,1,2 are not closed */
> > +               bb_sanitize_stdio();
> >         }
> > 
> > If it helps, I will add it in 1.6.2.
> > --
> > vda
> 
> This works, thank you for your help.
> I found out that in kernel 2.4.34 the kernel commandline argument
> "console=" is processed by the kernel itsself and therefore not
> transferred into the environment. So getenv("CONSOLE"); and
> getenv("console"); always return null. Linux-2.6.15 look similar

Why don't you use the ttyname function? That always points to the
correct tty used. On Gentoo in sysinit and boot it returns /dev/console
and in runlevel 3 (default) it returns /dev/tty1

char *tty = ttyname (fileno (stdout));
if (tty) {
        ... /* same as above */
} else {
        /* Make sure fd 0,1,2 are not closed */
        bb_sanitize_stdio();
}

Thanks

Roy
_______________________________________________
busybox mailing list
[email protected]
http://busybox.net/cgi-bin/mailman/listinfo/busybox

Reply via email to