int main (int argc, char *argv[]) { char *root_dev = 0; char *dir = DEFAULT_DIRECTORY; char *dev_map = DEFAULT_DEVICE_MAP; volatile int hold = 0; int opt; set_program_name (argv[0]); while ((opt = getopt_long (argc, argv, "r:d:m:vH:hV", options, 0)) != -1) switch (opt) { case 'r': root_dev = optarg; break; case 'd': dir = optarg; break; case 'm': dev_map = optarg; break; case 'v': verbosity++; break; case 'H': hold = (optarg ? atoi (optarg) : -1); break; case 'h': return usage (0); case 'V': printf ("%s (%s) %s\n", program_name, PACKAGE_NAME, PACKAGE_VERSION); return 0; default: return usage (1); } if (optind < argc) { fprintf (stderr, "Unknown extra argument `%s'.\n", argv[optind]); return usage (1); } /* Wait until the ARGS.HOLD variable is cleared by an attached debugger. */ if (hold && verbosity > 0) printf ("Run \"gdb %s %d\", and set ARGS.HOLD to zero.\n", program_name, (int) getpid ()); while (hold) { if (hold > 0) hold--; sleep (1); } signal (SIGINT, SIG_IGN); grub_console_init (); grub_host_init (); grub_hostfs_init (); /* XXX: This is a bit unportable. */ grub_util_biosdisk_init (dev_map); #if GRUB_NO_MODULES grub_init_all (); #endif /* Make sure that there is a root device. */ if (! root_dev) { char *device_name = grub_guess_root_device (dir); if (! device_name) grub_util_error ("cannot find a device for %s", dir); root_dev = grub_util_get_grub_dev (device_name); if (! root_dev) { grub_util_info ("guessing the root device failed, because of `%s'", grub_errmsg); grub_util_error ("cannot guess the root device. Specify the option `--root-device'"); } } if (strcmp (root_dev, "host") == 0) dir = xstrdup (dir); else dir = grub_make_system_path_relative_to_its_root (dir); prefix = xmalloc (strlen (root_dev) + 2 + strlen (dir) + 1); sprintf (prefix, "(%s)%s", root_dev, dir); free (dir); /* Start GRUB! */ if (setjmp (main_env) == 0) grub_main (); #if GRUB_NO_MODULES grub_fini_all (); #endif grub_hostfs_fini (); grub_host_fini (); grub_machine_fini (); return 0; }
int main (int argc, char *argv[]) { char *dev_map = DEFAULT_DEVICE_MAP; volatile int hold = 0; int opt; set_program_name (argv[0]); dir = xstrdup (DEFAULT_DIRECTORY); while ((opt = getopt_long (argc, argv, "r:d:m:vH:hV", options, 0)) != -1) switch (opt) { case 'r': free (root_dev); root_dev = xstrdup (optarg); break; case 'd': free (dir); dir = xstrdup (optarg); break; case 'm': dev_map = optarg; break; case 'v': verbosity++; break; case 'H': hold = (optarg ? atoi (optarg) : -1); break; case 'h': return usage (0); case 'V': printf ("%s (%s) %s\n", program_name, PACKAGE_NAME, PACKAGE_VERSION); return 0; default: return usage (1); } if (optind < argc) { fprintf (stderr, "Unknown extra argument `%s'.\n", argv[optind]); return usage (1); } /* Wait until the ARGS.HOLD variable is cleared by an attached debugger. */ if (hold && verbosity > 0) printf ("Run \"gdb %s %d\", and set ARGS.HOLD to zero.\n", program_name, (int) getpid ()); while (hold) { if (hold > 0) hold--; sleep (1); } signal (SIGINT, SIG_IGN); grub_emu_init (); grub_console_init (); grub_host_init (); /* XXX: This is a bit unportable. */ grub_util_biosdisk_init (dev_map); grub_init_all (); grub_hostfs_init (); grub_emu_post_init (); /* Make sure that there is a root device. */ if (! root_dev) root_dev = grub_strdup ("host"); dir = xstrdup (dir); /* Start GRUB! */ if (setjmp (main_env) == 0) grub_main (); grub_fini_all (); grub_hostfs_fini (); grub_host_fini (); grub_machine_fini (); return 0; }