2008-09-05 Bean <bean123ch@gmail.com>
* fs/fshelp.c (grub_fshelp_find_file): Handle case insensitive names. * fs/ntfs.c (list_file): Ignore names in DOS namespace, set the case insensitive bit for names in Win32 and Win32 & DOS namespace. * include/grub/fshelp.h (GRUB_FSHELP_CASE_INSENSITIVE): New macro. * include/grub/types.h (LONG_MAX): Likewise.
This commit is contained in:
parent
4ee5592137
commit
5926115732
5 changed files with 34 additions and 6 deletions
11
ChangeLog
11
ChangeLog
|
@ -1,3 +1,14 @@
|
|||
2008-09-05 Bean <bean123ch@gmail.com>
|
||||
|
||||
* fs/fshelp.c (grub_fshelp_find_file): Handle case insensitive names.
|
||||
|
||||
* fs/ntfs.c (list_file): Ignore names in DOS namespace, set the case
|
||||
insensitive bit for names in Win32 and Win32 & DOS namespace.
|
||||
|
||||
* include/grub/fshelp.h (GRUB_FSHELP_CASE_INSENSITIVE): New macro.
|
||||
|
||||
* include/grub/types.h (LONG_MAX): Likewise.
|
||||
|
||||
2008-09-04 Felix Zielcke <fzielcke@z-51.de>
|
||||
|
||||
* util/getroot.c: Include <config.h>.
|
||||
|
|
|
@ -80,14 +80,17 @@ grub_fshelp_find_file (const char *path, grub_fshelp_node_t rootnode,
|
|||
enum grub_fshelp_filetype filetype,
|
||||
grub_fshelp_node_t node)
|
||||
{
|
||||
if (type == GRUB_FSHELP_UNKNOWN || grub_strcmp (name, filename))
|
||||
if (filetype == GRUB_FSHELP_UNKNOWN ||
|
||||
(grub_strcmp (name, filename) &&
|
||||
(! (filetype & GRUB_FSHELP_CASE_INSENSITIVE) ||
|
||||
grub_strncasecmp (name, filename, LONG_MAX))))
|
||||
{
|
||||
grub_free (node);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* The node is found, stop iterating over the nodes. */
|
||||
type = filetype;
|
||||
type = filetype & ~GRUB_FSHELP_CASE_INSENSITIVE;
|
||||
oldnode = currnode;
|
||||
currnode = node;
|
||||
|
||||
|
|
18
fs/ntfs.c
18
fs/ntfs.c
|
@ -575,13 +575,20 @@ list_file (struct grub_ntfs_file *diro, char *pos,
|
|||
|
||||
while (1)
|
||||
{
|
||||
char *ustr;
|
||||
char *ustr, namespace;
|
||||
|
||||
if (pos[0xC] & 2) /* end signature */
|
||||
break;
|
||||
|
||||
np = pos + 0x52;
|
||||
ns = (unsigned char) *(np - 2);
|
||||
if (ns)
|
||||
np = pos + 0x50;
|
||||
ns = (unsigned char) *(np++);
|
||||
namespace = *(np++);
|
||||
|
||||
/*
|
||||
* Ignore files in DOS namespace, as they will reappear as Win32
|
||||
* names.
|
||||
*/
|
||||
if ((ns) && (namespace != 2))
|
||||
{
|
||||
enum grub_fshelp_filetype type;
|
||||
struct grub_ntfs_file *fdiro;
|
||||
|
@ -610,6 +617,9 @@ list_file (struct grub_ntfs_file *diro, char *pos,
|
|||
*grub_utf16_to_utf8 ((grub_uint8_t *) ustr, (grub_uint16_t *) np,
|
||||
ns) = '\0';
|
||||
|
||||
if (namespace)
|
||||
type |= GRUB_FSHELP_CASE_INSENSITIVE;
|
||||
|
||||
if (hook (ustr, type, fdiro))
|
||||
{
|
||||
grub_free (ustr);
|
||||
|
|
|
@ -26,6 +26,8 @@
|
|||
|
||||
typedef struct grub_fshelp_node *grub_fshelp_node_t;
|
||||
|
||||
#define GRUB_FSHELP_CASE_INSENSITIVE 0x100
|
||||
|
||||
enum grub_fshelp_filetype
|
||||
{
|
||||
GRUB_FSHELP_UNKNOWN,
|
||||
|
|
|
@ -94,8 +94,10 @@ typedef grub_int32_t grub_ssize_t;
|
|||
|
||||
#if GRUB_CPU_SIZEOF_VOID_P == 8
|
||||
# define ULONG_MAX 18446744073709551615UL
|
||||
# define LONG_MAX 9223372036854775807UL
|
||||
#else
|
||||
# define ULONG_MAX 4294967295UL
|
||||
# define LONG_MAX 2147483647UL
|
||||
#endif
|
||||
|
||||
/* The type for representing a file offset. */
|
||||
|
|
Loading…
Add table
Reference in a new issue