]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* grub-core/osdep/windows/hostdisk.c (grub_util_fd_strerror):
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Tue, 15 Oct 2013 13:14:58 +0000 (15:14 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Tue, 15 Oct 2013 13:14:58 +0000 (15:14 +0200)
Cut tailing newline. Remove arbitrary limitation. Always use
grub_util_tchar_to_utf8.

ChangeLog
grub-core/osdep/windows/hostdisk.c

index 628fb543463d574cb5266e3be4a3e6ac737e3775..335dd1bbc2c738a69108b85f3d3ca8dde085588a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2013-10-15  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * grub-core/osdep/windows/hostdisk.c (grub_util_fd_strerror):
+       Cut tailing newline. Remove arbitrary limitation. Always use
+       grub_util_tchar_to_utf8.
+
 2013-10-15  Vladimir Serbinenko  <phcoder@gmail.com>
 
        * grub-core/kern/misc.c (grub_vsnprintf_real): Handle %% properly.
index 539ff7a15025a936b236aab092bc4526849cbb31..74c9adc089de01f3854055a30076a4e64412dce6 100644 (file)
@@ -255,24 +255,33 @@ grub_util_fd_close (grub_util_fd_t fd)
 const char *
 grub_util_fd_strerror (void)
 {
-  DWORD err;
-  static TCHAR tbuf[1024];
-  err = GetLastError ();
-  FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM |
-                FORMAT_MESSAGE_IGNORE_INSERTS,
-                NULL, err,
-                MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT),
-                tbuf, ARRAY_SIZE (tbuf), NULL);
+  DWORD err = GetLastError ();
+  LPTSTR tstr = NULL;
+  static char *last;
+  char *ret, *ptr;
 
-#if SIZEOF_TCHAR == 1
-  return (char *) tbuf;
-#elif SIZEOF_TCHAR == 2
-  static grub_uint8_t buf[ARRAY_SIZE (tbuf) * GRUB_MAX_UTF8_PER_UTF16 + 1];
-  *grub_utf16_to_utf8 (buf, tbuf, ARRAY_SIZE (tbuf)) = '\0';
-  return (char *) buf;
-#else
-#error "Unsupported TCHAR size"
-#endif
+  free (last);
+  last = 0;
+
+  FormatMessage (FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM
+                | FORMAT_MESSAGE_IGNORE_INSERTS,
+                NULL, err, 0, (LPTSTR) &tstr, 0, NULL);
+
+  if (!tstr)
+    return "unknown error";
+
+  ret = grub_util_tchar_to_utf8 (tstr);
+
+  LocalFree (tstr);
+
+  last = ret;
+
+  for (ptr = ret + strlen (ret) - 1;
+       ptr >= ret && (*ptr == '\n' || *ptr == '\r');
+       ptr--);
+  ptr[1] = '\0';
+
+  return ret;
 }
 
 char *