static void process_input_dir (const char *input_dir, enum grub_install_plat platform) { char *platsub = grub_install_get_platform_name (platform); char *grubdir = grub_util_path_concat (3, rootdir, subdir, platsub); char *load_cfg = grub_util_path_concat (2, grubdir, "load.cfg"); char *prefix; char *output; char *grub_cfg; FILE *cfg; grub_install_copy_files (input_dir, base, platform); grub_util_unlink (load_cfg); if (debug_image) { FILE *f = grub_util_fopen (load_cfg, "wb"); if (!f) grub_util_error (_("cannot open `%s': %s"), load_cfg, strerror (errno)); fprintf (f, "set debug='%s'\n", debug_image); fclose (f); } else { free (load_cfg); load_cfg = 0; } prefix = xasprintf ("/%s", subdir); if (!targets[platform].mkimage_target) grub_util_error (_("unsupported platform %s"), platsub); grub_cfg = grub_util_path_concat (2, grubdir, "grub.cfg"); cfg = grub_util_fopen (grub_cfg, "wb"); if (!cfg) grub_util_error (_("cannot open `%s': %s"), grub_cfg, strerror (errno)); fprintf (cfg, "source %s/grub.cfg", subdir); fclose (cfg); grub_install_push_module (targets[platform].netmodule); output = grub_util_path_concat_ext (2, grubdir, "core", targets[platform].ext); grub_install_make_image_wrap (input_dir, prefix, output, 0, load_cfg, targets[platform].mkimage_target, 0); grub_install_pop_module (); /* TRANSLATORS: First %s is replaced by platform name. Second one by filename. */ printf (_("Netboot directory for %s created. Configure your DHCP server to point to %s\n"), platsub, output); free (platsub); free (output); free (prefix); free (grub_cfg); free (grubdir); }
int main (int argc, char *argv[]) { const char *pkglibdir; grub_util_host_init (&argc, &argv); grub_util_disable_fd_syncs (); rootdir = xstrdup ("/srv/tftp"); pkglibdir = grub_util_get_pkglibdir (); subdir = grub_util_path_concat (2, GRUB_BOOT_DIR_NAME, GRUB_DIR_NAME); argp_parse (&argp, argc, argv, 0, 0, 0); base = grub_util_path_concat (2, rootdir, subdir); /* Create the GRUB directory if it is not present. */ grub_install_mkdir_p (base); grub_install_push_module ("tftp"); if (!grub_install_source_directory) { enum grub_install_plat plat; for (plat = 0; plat < GRUB_INSTALL_PLATFORM_MAX; plat++) if (targets[plat].mkimage_target) { char *platdir = grub_util_path_concat (2, pkglibdir, grub_install_get_platform_name (plat)); grub_util_info ("Looking for `%s'", platdir); if (!grub_util_is_directory (platdir)) { free (platdir); continue; } process_input_dir (platdir, plat); } } else { enum grub_install_plat plat; plat = grub_install_get_target (grub_install_source_directory); process_input_dir (grub_install_source_directory, plat); } return 0; }
static void xorriso_link (const char *from, const char *to) { char *tof = grub_util_path_concat (2, iso9660_dir, to); char *val = xasprintf ("%s=%s", from, tof); xorriso_push (val); free (val); free (tof); }