+ /* 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 kernel and initrd in current directory\n");
+ if (access (kernel_name, F_OK) == 0 && access (initrd_name, F_OK) == 0) {
+ kernel = safe_strdup (g, kernel_name);
+ initrd = safe_strdup (g, initrd_name);
+ break;
+ }
+ }
+ /* Look at <path>/kernel etc. */
+ else {
+ 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);
+
+ if (g->verbose)
+ fprintf (stderr, "looking for %s and %s\n", kernel, initrd);
+
+ if (access (kernel, F_OK) == 0 && access (initrd, F_OK) == 0)
+ break;
+ free (kernel);
+ free (initrd);
+ kernel = initrd = NULL;
+ }
+
+ pelem = pend + 1;
+ } while (pmore);
+
+ free (path);
+
+ if (kernel == NULL || initrd == NULL) {
+ error (g, "cannot find %s or %s on LIBGUESTFS_PATH (current path = %s)",
+ kernel_name, initrd_name, g->path);
+ goto cleanup0;
+ }
+