]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* grub-core/fs/fat.c (grub_fat_iterate_dir_next): Don't stop on a space
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Mon, 25 Jun 2012 15:47:52 +0000 (17:47 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Mon, 25 Jun 2012 15:47:52 +0000 (17:47 +0200)
character but still remove trainling spaces.
(grub_fat_label): Ignore archive flag.

ChangeLog
grub-core/fs/fat.c

index 2b229ee8d646730185696a35236dad27801d30ff..ca8b4abe06be6d58ac34e3601ac3864aaf4e1dd9 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2012-06-25  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * grub-core/fs/fat.c (grub_fat_iterate_dir_next): Don't stop on a space
+       character but still remove trainling spaces.
+       (grub_fat_label): Ignore archive flag.
+
 2012-06-25  Vladimir Serbinenko  <phcoder@gmail.com>
 
        * grub-core/loader/i386/linux.c (grub_cmd_initrd): Avoid unnecessarry
index 003dbd86ca7c522c6f9a29a1d0da250cf19deee9..119fc945f224df258893835e29a3d7e9390d1a8c 100644 (file)
@@ -798,22 +798,36 @@ grub_fat_iterate_dir_next (grub_disk_t disk, struct grub_fat_data *data,
       filep = ctxt->filename;
       if (ctxt->dir.attr & GRUB_FAT_ATTR_VOLUME_ID)
        {
-         for (i = 0; i < sizeof (ctxt->dir.name) && ctxt->dir.name[i]
-                && ! grub_isspace (ctxt->dir.name[i]); i++)
+         for (i = 0; i < sizeof (ctxt->dir.name) && ctxt->dir.name[i]; i++)
            *filep++ = ctxt->dir.name[i];
+         while (i > 0 && ctxt->dir.name[i - 1] == ' ')
+           {
+             filep--;
+             i--;
+           }
        }
       else
        {
-         for (i = 0; i < 8 && ctxt->dir.name[i] && ! grub_isspace (ctxt->dir.name[i]); i++)
+         for (i = 0; i < 8 && ctxt->dir.name[i]; i++)
            *filep++ = grub_tolower (ctxt->dir.name[i]);
+         while (i > 0 && ctxt->dir.name[i - 1] == ' ')
+           {
+             filep--;
+             i--;
+           }
 
-         *filep = '.';
+         *filep++ = '.';
 
-         for (i = 8; i < 11 && ctxt->dir.name[i] && ! grub_isspace (ctxt->dir.name[i]); i++)
-           *++filep = grub_tolower (ctxt->dir.name[i]);
+         for (i = 8; i < 11 && ctxt->dir.name[i]; i++)
+           *filep++ = grub_tolower (ctxt->dir.name[i]);
+         while (i > 8 && ctxt->dir.name[i - 1] == ' ')
+           {
+             filep--;
+             i--;
+           }
 
-         if (*filep != '.')
-           filep++;
+         if (i == 8)
+           filep--;
        }
       *filep = '\0';
       return GRUB_ERR_NONE;
@@ -1117,7 +1131,7 @@ grub_fat_label (grub_device_t device, char **label)
     goto fail;
 
   while (!(err = grub_fat_iterate_dir_next (disk, data, &ctxt)))
-    if (ctxt.dir.attr == GRUB_FAT_ATTR_VOLUME_ID)
+    if ((ctxt.dir.attr & ~GRUB_FAT_ATTR_ARCHIVE) == GRUB_FAT_ATTR_VOLUME_ID)
       {
        *label = grub_strdup (ctxt.filename);
        break;