Move stat () and device mode checking into OS-dependent files as
long as performance doesn't suffer.
This commit is contained in:
parent
a4012f0764
commit
cd78a56fb2
10 changed files with 93 additions and 71 deletions
|
@ -57,6 +57,13 @@ grub_util_part_to_disk (const char *os_dev, struct stat *st,
|
|||
int *is_part)
|
||||
{
|
||||
char *path = xstrdup (os_dev);
|
||||
|
||||
if (! S_ISCHR (st->st_mode))
|
||||
{
|
||||
*is_part = 0;
|
||||
return path;
|
||||
}
|
||||
|
||||
if (strncmp ("/dev/", path, 5) == 0)
|
||||
{
|
||||
char *p;
|
||||
|
|
|
@ -65,6 +65,13 @@ grub_util_part_to_disk (const char *os_dev, struct stat *st,
|
|||
int *is_part)
|
||||
{
|
||||
int rawpart = -1;
|
||||
|
||||
if (! S_ISCHR (st->st_mode))
|
||||
{
|
||||
*is_part = 0;
|
||||
return xstrdup (os_dev);
|
||||
}
|
||||
|
||||
# ifdef HAVE_GETRAWPARTITION
|
||||
rawpart = getrawpartition();
|
||||
# endif /* HAVE_GETRAWPARTITION */
|
||||
|
|
|
@ -321,6 +321,13 @@ grub_util_devmapper_part_to_disk (struct stat *st,
|
|||
int
|
||||
grub_util_device_is_mapped_stat (struct stat *st)
|
||||
{
|
||||
#if GRUB_DISK_DEVS_ARE_CHAR
|
||||
if (! S_ISCHR (st->st_mode))
|
||||
#else
|
||||
if (! S_ISBLK (st->st_mode))
|
||||
#endif
|
||||
return 0;
|
||||
|
||||
if (!grub_device_mapper_supported ())
|
||||
return 0;
|
||||
|
||||
|
|
|
@ -72,6 +72,13 @@ grub_util_device_is_mapped (const char *dev)
|
|||
if (stat (dev, &st) < 0)
|
||||
return 0;
|
||||
|
||||
#if GRUB_DISK_DEVS_ARE_CHAR
|
||||
if (! S_ISCHR (st.st_mode))
|
||||
#else
|
||||
if (! S_ISBLK (st.st_mode))
|
||||
#endif
|
||||
return 0;
|
||||
|
||||
return dm_is_dm_major (major (st.st_rdev));
|
||||
}
|
||||
|
||||
|
|
|
@ -115,6 +115,13 @@ grub_util_part_to_disk (const char *os_dev, struct stat *st,
|
|||
int *is_part)
|
||||
{
|
||||
char *out, *out2;
|
||||
|
||||
if (! S_ISCHR (st->st_mode))
|
||||
{
|
||||
*is_part = 0;
|
||||
return xstrdup (os_dev);
|
||||
}
|
||||
|
||||
if (strncmp (os_dev, "/dev/", sizeof ("/dev/") - 1) != 0)
|
||||
return xstrdup (os_dev);
|
||||
grub_util_follow_gpart_up (os_dev + sizeof ("/dev/") - 1, NULL, &out);
|
||||
|
|
|
@ -143,13 +143,19 @@ is_fulldisk (const char *child, const char *parent)
|
|||
|
||||
char *
|
||||
grub_util_part_to_disk (const char *os_dev,
|
||||
struct stat *st __attribute__ ((unused)),
|
||||
struct stat *st,
|
||||
int *is_part)
|
||||
{
|
||||
char *path;
|
||||
grub_disk_addr_t offset;
|
||||
char *p;
|
||||
|
||||
if (! S_ISBLK (st->st_mode))
|
||||
{
|
||||
*is_part = 0;
|
||||
return xstrdup (os_dev);
|
||||
}
|
||||
|
||||
if (!grub_util_hurd_get_disk_info (os_dev, NULL, &offset, NULL, &path))
|
||||
return xstrdup (os_dev);
|
||||
|
||||
|
|
|
@ -541,6 +541,12 @@ grub_util_part_to_disk (const char *os_dev, struct stat *st,
|
|||
{
|
||||
char *path = xmalloc (PATH_MAX);
|
||||
|
||||
if (! S_ISBLK (st->st_mode))
|
||||
{
|
||||
*is_part = 0;
|
||||
return xstrdup (os_dev);
|
||||
}
|
||||
|
||||
if (! realpath (os_dev, path))
|
||||
return NULL;
|
||||
|
||||
|
|
|
@ -54,10 +54,17 @@
|
|||
|
||||
char *
|
||||
grub_util_part_to_disk (const char *os_dev,
|
||||
struct stat *st __attribute__ ((unused)),
|
||||
struct stat *st,
|
||||
int *is_part)
|
||||
{
|
||||
char *colon = grub_strrchr (os_dev, ':');
|
||||
|
||||
if (! S_ISCHR (st->st_mode))
|
||||
{
|
||||
*is_part = 0;
|
||||
return xstrdup (os_dev);
|
||||
}
|
||||
|
||||
if (grub_memcmp (os_dev, "/devices", sizeof ("/devices") - 1) == 0
|
||||
&& colon)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue