]> git.proxmox.com Git - grub2.git/blame - grub-core/osdep/haiku/getroot.c
Import grub2_2.02+dfsg1.orig.tar.xz
[grub2.git] / grub-core / osdep / haiku / getroot.c
CommitLineData
4d8d554a
CW
1#include <config.h>
2#include <config-util.h>
3#include <sys/types.h>
4#include <sys/stat.h>
5#include <string.h>
6#include <errno.h>
7#include <stdint.h>
8#include <grub/util/misc.h>
9#include <grub/emu/hostdisk.h>
10#include <grub/emu/getroot.h>
11#include <fs_info.h>
12#include <Drivers.h>
13#include <StorageDefs.h>
14
15enum grub_dev_abstraction_types
16grub_util_get_dev_abstraction_os (const char *os_dev __attribute__((unused)))
17{
18 return GRUB_DEV_ABSTRACTION_NONE;
19}
20
21int
22grub_util_pull_device_os (const char *os_dev __attribute__ ((unused)),
23 enum grub_dev_abstraction_types ab __attribute__ ((unused)))
24{
25 return 0;
26}
27
28char *
29grub_util_get_grub_dev_os (const char *os_dev __attribute__ ((unused)))
30{
31 return NULL;
32}
33
34char **
35grub_guess_root_devices (const char *dir_in)
36{
37 dev_t dv = dev_for_path (dir_in);
38 fs_info inf;
39 char **ret;
40 if (fs_stat_dev (dv, &inf) != B_OK)
41 return NULL;
42 ret = xmalloc (2 * sizeof (ret[0]));
43 ret[0] = xstrdup (inf.device_name);
44 ret[1] = NULL;
45 return ret;
46}
47
48grub_disk_addr_t
49grub_util_find_partition_start_os (const char *dev)
50{
51 partition_info part;
52 grub_disk_addr_t ret;
53 int fd = open (dev, O_RDONLY);
54 if (fd < 0)
55 return 0;
56 if (ioctl (fd, B_GET_PARTITION_INFO, &part, sizeof (part)) < 0)
57 {
58 close (fd);
59 return 0;
60 }
61 ret = part.offset;
62 close (fd);
63 fd = open (part.device, O_RDONLY);
64
65 device_geometry geo;
66 if (ioctl (fd, B_GET_GEOMETRY, &geo, sizeof (geo)) < 0)
67 return 0;
68 ret /= geo.bytes_per_sector ? : 512;
69 close (fd);
70 return ret;
71}
72
73char *
74grub_util_part_to_disk (const char *os_dev,
75 struct stat *st __attribute__ ((unused)),
76 int *is_part)
77{
78 char *ret;
79 partition_info part;
80 int fd = open (os_dev, O_RDONLY);
81 *is_part = 0;
82
83 if (fd < 0)
84 return xstrdup (os_dev);
85 if (ioctl (fd, B_GET_PARTITION_INFO, &part, sizeof (part)) < 0)
86 {
87 close (fd);
88 return xstrdup (os_dev);
89 }
90 ret = xstrdup (part.device);
91 close (fd);
92 *is_part=1;
93 return ret;
94}
95
96int
97grub_util_biosdisk_is_floppy (grub_disk_t disk)
98{
99 const char *dname;
100
101 dname = grub_util_biosdisk_get_osdev (disk);
102
103 return (strncmp (dname, "/dev/disk/floppy/", sizeof ("/dev/disk/floppy/") - 1)
104 == 0);
105}