- /* First search g->path for the supermin appliance, and try to
- * synthesize a kernel and initrd from that. If it fails, we
- * try the path search again looking for a backup ordinary
- * appliance.
- */
- pelem = path = safe_strdup (g, g->path);
- do {
- pend = strchrnul (pelem, ':');
- pmore = *pend == ':';
- *pend = '\0';
- len = pend - pelem;
-
- /* Empty element of "." means cwd. */
- if (len == 0 || (len == 1 && *pelem == '.')) {
- if (g->verbose)
- fprintf (stderr,
- "looking for supermin appliance in current directory\n");
- if (dir_contains_files (".",
- "supermin.d", "kmod.whitelist", NULL)) {
- if (build_supermin_appliance (g, ".", &kernel, &initrd) == -1)
- return -1;
- break;
- }
- }
- /* Look at <path>/supermin* etc. */
- else {
- if (g->verbose)
- fprintf (stderr, "looking for supermin appliance in %s\n", pelem);
-
- if (dir_contains_files (pelem,
- "supermin.d", "kmod.whitelist", NULL)) {
- if (build_supermin_appliance (g, pelem, &kernel, &initrd) == -1)
- return -1;
- break;
- }
- }
-
- pelem = pend + 1;
- } while (pmore);
-
- free (path);
-
- if (kernel == NULL || initrd == NULL) {
- /* Search g->path for the kernel and initrd. */
- pelem = path = safe_strdup (g, g->path);
- do {
- pend = strchrnul (pelem, ':');
- pmore = *pend == ':';
- *pend = '\0';
- len = pend - pelem;
-
- /* Empty element or "." means cwd. */
- if (len == 0 || (len == 1 && *pelem == '.')) {
- if (g->verbose)
- fprintf (stderr,
- "looking for appliance in current directory\n");
- if (dir_contains_files (".", kernel_name, initrd_name, NULL)) {
- kernel = safe_strdup (g, kernel_name);
- initrd = safe_strdup (g, initrd_name);
- break;
- }
- }
- /* Look at <path>/kernel etc. */
- else {
- if (g->verbose)
- fprintf (stderr, "looking for appliance in %s\n", pelem);
-
- if (dir_contains_files (pelem, kernel_name, initrd_name, NULL)) {
- kernel = safe_malloc (g, len + strlen (kernel_name) + 2);
- initrd = safe_malloc (g, len + strlen (initrd_name) + 2);
- sprintf (kernel, "%s/%s", pelem, kernel_name);
- sprintf (initrd, "%s/%s", pelem, initrd_name);
- break;
- }
- }