]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* grub-core/fs/affs.c (grub_affs_read_symlink): Convert latin1 into
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Mon, 7 May 2012 20:00:19 +0000 (22:00 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Mon, 7 May 2012 20:00:19 +0000 (22:00 +0200)
UTF-8.

ChangeLog
grub-core/fs/affs.c

index e65f6da640cfa51e3cdabbc7b36c3f5785a414ab..b474cff45e3d04735511320279dc3edb09e2cf3f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2012-05-07  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * grub-core/fs/affs.c (grub_affs_read_symlink): Convert latin1 into
+       UTF-8.
+
 2012-05-07  Vladimir Serbinenko  <phcoder@gmail.com>
 
        * grub-core/fs/sfs.c (grub_sfs_read_symlink): Convert latin1 into
index 67d08d55f8c08a1c8691ff8db5bbfc0f058db1c8..9291552b8696c935aa6bbb29a7efd8819aa6bfce 100644 (file)
@@ -263,24 +263,31 @@ static char *
 grub_affs_read_symlink (grub_fshelp_node_t node)
 {
   struct grub_affs_data *data = node->data;
-  char *symlink;
+  grub_uint8_t *latin1, *utf8;
   const grub_size_t symlink_size = (data->blocksize * GRUB_DISK_SECTOR_SIZE
                                    - 225);
 
-  symlink = grub_malloc (symlink_size + 1);
-  if (!symlink)
+  latin1 = grub_malloc (symlink_size);
+  if (!latin1)
     return 0;
 
   grub_disk_read (data->disk, node->block, GRUB_AFFS_SYMLINK_OFFSET,
-                 symlink_size, symlink);
+                 symlink_size, latin1);
   if (grub_errno)
     {
-      grub_free (symlink);
+      grub_free (latin1);
       return 0;
     }
-  symlink[symlink_size] = 1;
-  grub_dprintf ("affs", "Symlink: `%s'\n", symlink);
-  return symlink;
+  utf8 = grub_malloc (symlink_size * GRUB_MAX_UTF8_PER_LATIN1 + 1);
+  if (!utf8)
+    {
+      grub_free (latin1);
+      return 0;
+    }
+  *grub_latin1_to_utf8 (utf8, latin1, symlink_size) = '\0';
+  grub_dprintf ("affs", "Symlink: `%s'\n", utf8);
+  grub_free (latin1);
+  return (char *) utf8;
 }