On Wed, Dec 23, 2015 at 02:45:20PM +0300, Andrei Borzenkov wrote:
> On Wed, Dec 23, 2015 at 12:49 PM, Michael Chang <mch...@suse.com> wrote:
> > The grub-emu's grub_exit function will exit immediately without any
> > housekeeping work for restoring terminal settings and leaves unusable
> > terminal in the end. Fix the problem by calling grub_reboot to allow
> > doing the housekeeping work and restoring the terminal settings.
> >
> > ---
> >  grub-core/commands/minicmd.c | 4 ++++
> >  1 file changed, 4 insertions(+)
> >
> > diff --git a/grub-core/commands/minicmd.c b/grub-core/commands/minicmd.c
> > index a3a1182..63ffeb5 100644
> > --- a/grub-core/commands/minicmd.c
> > +++ b/grub-core/commands/minicmd.c
> > @@ -181,7 +181,11 @@ grub_mini_cmd_exit (struct grub_command *cmd 
> > __attribute__ ((unused)),
> >                     int argc __attribute__ ((unused)),
> >                     char *argv[] __attribute__ ((unused)))
> >  {
> > +#if defined (GRUB_MACHINE_EMU)
> > +  grub_reboot ();
> > +#else
> >    grub_exit ();
> > +#endif
> >    /* Not reached.  */
> >  }
> >
> 
> No, please. Just make EMU grub_exit do the right thing (assuming it is
> the right thing :)

I'm not sure it's right thing either, that's why I was not trying to
modify grub_exit because EMU shares it with utils, as souce file
grub-core/kern/emu/misc.c is also part of libgrubkern.a used also in
other platforms.

But anyway, please check attached patch again, which tries to separate
the EMU's grub_exit with the one in libgrubkern.a. 

Thanks.
diff --git a/grub-core/kern/emu/main.c b/grub-core/kern/emu/main.c
index 4b50913..221aa12 100644
--- a/grub-core/kern/emu/main.c
+++ b/grub-core/kern/emu/main.c
@@ -66,6 +66,12 @@ grub_reboot (void)
 }
 
 void
+grub_exit (void)
+{
+  grub_reboot ();
+}
+
+void
 grub_machine_init (void)
 {
 }
diff --git a/grub-core/kern/emu/misc.c b/grub-core/kern/emu/misc.c
index bb606da..9353fa7 100644
--- a/grub-core/kern/emu/misc.c
+++ b/grub-core/kern/emu/misc.c
@@ -134,11 +134,13 @@ xasprintf (const char *fmt, ...)
 }
 #endif
 
+#if !defined (GRUB_MACHINE_EMU) || defined (GRUB_UTIL)
 void
 grub_exit (void)
 {
   exit (1);
 }
+#endif
 
 grub_uint64_t
 grub_get_time_ms (void)
_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to