]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
Do not use TCHAR string functions as they are not available on cygwin.
authorVladimir Serbinenko <phcoder@gmail.com>
Sat, 14 Dec 2013 22:25:30 +0000 (23:25 +0100)
committerVladimir Serbinenko <phcoder@gmail.com>
Sat, 14 Dec 2013 22:25:30 +0000 (23:25 +0100)
ChangeLog
grub-core/osdep/windows/getroot.c
grub-core/osdep/windows/relpath.c

index f66ac253c98db04f3a250bb93261f5c792a5b848..2de6a47c19a3d75731ff4ccb7667a924ece3fc98 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2013-12-14  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       Do not use TCHAR string functions as they are not available on cygwin.
+
 2013-12-14  Vladimir Serbinenko  <phcoder@gmail.com>
 
        Workaround windows bug when querying EFI system partition parameters.
index c81372d2260b69eec6b9a473073ce603eb89c97b..661d954619210b4bf3ee7fb8bba680e2386ca648 100644 (file)
 #include <windows.h>
 #include <winioctl.h>
 
-#if SIZEOF_TCHAR == 1
-#define tcsnicmp strncasecmp
-#elif SIZEOF_TCHAR == 2
-#define tcsnicmp wcsnicmp
-#endif
-
 TCHAR *
 grub_get_mount_point (const TCHAR *path)
 {
@@ -191,6 +185,31 @@ grub_guess_root_devices (const char *dir)
   return os_dev;
 }
 
+static int tcharncasecmp (LPCTSTR a, const char *b, size_t sz)
+{
+  for (; sz; sz--, a++, b++)
+    {
+      char ac, bc;
+      if(*a >= 0x80)
+       return +1;
+      if (*b & 0x80)
+        return -1;
+      if (*a == '\0' && *b == '\0')
+       return 0;
+      ac = *a;
+      bc = *b;
+      if (ac >= 'A' && ac <= 'Z')
+       ac -= 'A' - 'a';
+      if (bc >= 'A' && bc <= 'Z')
+       bc -= 'A' - 'a';
+      if (ac > bc)
+       return +1;
+      if (ac < bc)
+       return -1;
+    }
+  return 0;
+}
+
 char *
 grub_util_part_to_disk (const char *os_dev,
                        struct stat *st __attribute__ ((unused)),
@@ -206,8 +225,8 @@ grub_util_part_to_disk (const char *os_dev,
       ((name[1] == '/') || (name[1] == '\\')) &&
       ((name[2] == '.') || (name[2] == '?')) &&
       ((name[3] == '/') || (name[3] == '\\'))
-      && (tcsnicmp (name + 4, TEXT("PhysicalDrive"), sizeof ("PhysicalDrive") - 1) == 0
-         || tcsnicmp (name + 4, TEXT("Harddisk"), sizeof ("Harddisk") - 1) == 0
+      && (tcharncasecmp (name + 4, "PhysicalDrive", sizeof ("PhysicalDrive") - 1) == 0
+         || tcharncasecmp (name + 4, "Harddisk", sizeof ("Harddisk") - 1) == 0
          || ((name[4] == 'A' || name[4] == 'a' || name[4] == 'B' || name[4] == 'b')
              && name[5] == ':' && name[6] == '\0')))
     {
@@ -277,8 +296,8 @@ grub_util_find_partition_start_os (const char *os_dev)
       ((name[1] == '/') || (name[1] == '\\')) &&
       ((name[2] == '.') || (name[2] == '?')) &&
       ((name[3] == '/') || (name[3] == '\\'))
-      && (tcsnicmp (name + 4, TEXT("PhysicalDrive"), sizeof ("PhysicalDrive") - 1) == 0
-         || tcsnicmp (name + 4, TEXT("Harddisk"), sizeof ("Harddisk") - 1) == 0
+      && (tcharncasecmp (name + 4, "PhysicalDrive", sizeof ("PhysicalDrive") - 1) == 0
+         || tcharncasecmp (name + 4, "Harddisk", sizeof ("Harddisk") - 1) == 0
          || ((name[4] == 'A' || name[4] == 'a' || name[4] == 'B' || name[4] == 'b')
              && name[5] == ':' && name[6] == '\0')))
     {
index b9e2cac45a2b079e029d72a01dca4b405d6af002..cb0861744ae11ac5f79ea0051969fbca9837da20 100644 (file)
 #include <windows.h>
 #include <winioctl.h>
 
-#if SIZEOF_TCHAR == 1
-#define tclen strlen
-#elif SIZEOF_TCHAR == 2
-#define tclen wcslen
-#endif
+static size_t
+tclen (const TCHAR *s)
+{
+  const TCHAR *s0 = s;
+  while (*s)
+      s++;
+  return s - s0;
+}
 
 char *
 grub_make_system_path_relative_to_its_root (const char *path)