123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- #include <config.h>
- #include <config-util.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <string.h>
- #include <errno.h>
- #include <stdint.h>
- #include <grub/util/misc.h>
- #include <grub/emu/hostdisk.h>
- #include <grub/emu/getroot.h>
- #include <fs_info.h>
- #include <Drivers.h>
- #include <StorageDefs.h>
- enum grub_dev_abstraction_types
- grub_util_get_dev_abstraction_os (const char *os_dev __attribute__((unused)))
- {
- return GRUB_DEV_ABSTRACTION_NONE;
- }
- int
- grub_util_pull_device_os (const char *os_dev __attribute__ ((unused)),
- enum grub_dev_abstraction_types ab __attribute__ ((unused)))
- {
- return 0;
- }
- char *
- grub_util_get_grub_dev_os (const char *os_dev __attribute__ ((unused)))
- {
- return NULL;
- }
- char **
- grub_guess_root_devices (const char *dir_in)
- {
- dev_t dv = dev_for_path (dir_in);
- fs_info inf;
- char **ret;
- if (fs_stat_dev (dv, &inf) != B_OK)
- return NULL;
- ret = xmalloc (2 * sizeof (ret[0]));
- ret[0] = xstrdup (inf.device_name);
- ret[1] = NULL;
- return ret;
- }
- grub_disk_addr_t
- grub_util_find_partition_start_os (const char *dev)
- {
- partition_info part;
- grub_disk_addr_t ret;
- int fd = open (dev, O_RDONLY);
- if (fd < 0)
- return 0;
- if (ioctl (fd, B_GET_PARTITION_INFO, &part, sizeof (part)) < 0)
- {
- close (fd);
- return 0;
- }
- ret = part.offset;
- close (fd);
- fd = open (part.device, O_RDONLY);
- device_geometry geo;
- if (ioctl (fd, B_GET_GEOMETRY, &geo, sizeof (geo)) < 0)
- return 0;
- ret /= geo.bytes_per_sector ? : 512;
- close (fd);
- return ret;
- }
- char *
- grub_util_part_to_disk (const char *os_dev,
- struct stat *st __attribute__ ((unused)),
- int *is_part)
- {
- char *ret;
- partition_info part;
- int fd = open (os_dev, O_RDONLY);
- *is_part = 0;
- if (fd < 0)
- return xstrdup (os_dev);
- if (ioctl (fd, B_GET_PARTITION_INFO, &part, sizeof (part)) < 0)
- {
- close (fd);
- return xstrdup (os_dev);
- }
- ret = xstrdup (part.device);
- close (fd);
- *is_part=1;
- return ret;
- }
- int
- grub_util_biosdisk_is_floppy (grub_disk_t disk)
- {
- const char *dname;
- dname = grub_util_biosdisk_get_osdev (disk);
- return (strncmp (dname, "/dev/disk/floppy/", sizeof ("/dev/disk/floppy/") - 1)
- == 0);
- }
|