summaryrefslogtreecommitdiffstats
path: root/grub-core/lib/posix_wrap
diff options
context:
space:
mode:
Diffstat (limited to 'grub-core/lib/posix_wrap')
-rw-r--r--grub-core/lib/posix_wrap/assert.h33
-rw-r--r--grub-core/lib/posix_wrap/ctype.h108
-rw-r--r--grub-core/lib/posix_wrap/errno.h29
-rw-r--r--grub-core/lib/posix_wrap/inttypes.h1
-rw-r--r--grub-core/lib/posix_wrap/langinfo.h38
-rw-r--r--grub-core/lib/posix_wrap/limits.h41
-rw-r--r--grub-core/lib/posix_wrap/localcharset.h28
-rw-r--r--grub-core/lib/posix_wrap/locale.h3
-rw-r--r--grub-core/lib/posix_wrap/stdint.h1
-rw-r--r--grub-core/lib/posix_wrap/stdio.h43
-rw-r--r--grub-core/lib/posix_wrap/stdlib.h61
-rw-r--r--grub-core/lib/posix_wrap/string.h92
-rw-r--r--grub-core/lib/posix_wrap/sys/types.h65
-rw-r--r--grub-core/lib/posix_wrap/unistd.h1
-rw-r--r--grub-core/lib/posix_wrap/wchar.h119
-rw-r--r--grub-core/lib/posix_wrap/wctype.h110
16 files changed, 773 insertions, 0 deletions
diff --git a/grub-core/lib/posix_wrap/assert.h b/grub-core/lib/posix_wrap/assert.h
new file mode 100644
index 0000000..6b00a0b
--- /dev/null
+++ b/grub-core/lib/posix_wrap/assert.h
@@ -0,0 +1,33 @@
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+ *
+ * GRUB is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GRUB is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GRUB. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GRUB_POSIX_ASSERT_H
+#define GRUB_POSIX_ASSERT_H 1
+
+#include <grub/misc.h>
+
+#define assert(x) assert_real(__FILE__, __LINE__, x)
+
+static inline void
+assert_real (const char *file, int line, int cond)
+{
+ if (!cond)
+ grub_printf ("Assertion failed at %s:%d\n", file, line);
+}
+
+#endif
diff --git a/grub-core/lib/posix_wrap/ctype.h b/grub-core/lib/posix_wrap/ctype.h
new file mode 100644
index 0000000..38b5727
--- /dev/null
+++ b/grub-core/lib/posix_wrap/ctype.h
@@ -0,0 +1,108 @@
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+ *
+ * GRUB is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GRUB is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GRUB. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GRUB_POSIX_CTYPE_H
+#define GRUB_POSIX_CTYPE_H 1
+
+#include <grub/misc.h>
+
+static inline int
+toupper (int c)
+{
+ return grub_toupper (c);
+}
+
+static inline int
+isspace (int c)
+{
+ return grub_isspace (c);
+}
+
+static inline int
+isdigit (int c)
+{
+ return grub_isdigit (c);
+}
+
+static inline int
+islower (int c)
+{
+ return grub_islower (c);
+}
+
+static inline int
+isascii (int c)
+{
+ return !(c & ~0x7f);
+}
+
+static inline int
+isupper (int c)
+{
+ return grub_isupper (c);
+}
+
+static inline int
+isxdigit (int c)
+{
+ return grub_isxdigit (c);
+}
+
+static inline int
+isprint (int c)
+{
+ return grub_isprint (c);
+}
+
+static inline int
+iscntrl (int c)
+{
+ return !grub_isprint (c);
+}
+
+static inline int
+isgraph (int c)
+{
+ return grub_isprint (c) && !grub_isspace (c);
+}
+
+static inline int
+isalnum (int c)
+{
+ return grub_isalpha (c) || grub_isdigit (c);
+}
+
+static inline int
+ispunct (int c)
+{
+ return grub_isprint (c) && !grub_isspace (c) && !isalnum (c);
+}
+
+static inline int
+isalpha (int c)
+{
+ return grub_isalpha (c);
+}
+
+static inline int
+tolower (int c)
+{
+ return grub_tolower (c);
+}
+
+#endif
diff --git a/grub-core/lib/posix_wrap/errno.h b/grub-core/lib/posix_wrap/errno.h
new file mode 100644
index 0000000..ba63b23
--- /dev/null
+++ b/grub-core/lib/posix_wrap/errno.h
@@ -0,0 +1,29 @@
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+ *
+ * GRUB is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GRUB is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GRUB. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GRUB_POSIX_ERRNO_H
+#define GRUB_POSIX_ERRNO_H 1
+
+#include <grub/err.h>
+
+#undef errno
+#define errno grub_errno
+#define EINVAL GRUB_ERR_BAD_NUMBER
+#define ENOMEM GRUB_ERR_OUT_OF_MEMORY
+
+#endif
diff --git a/grub-core/lib/posix_wrap/inttypes.h b/grub-core/lib/posix_wrap/inttypes.h
new file mode 100644
index 0000000..a12c43b
--- /dev/null
+++ b/grub-core/lib/posix_wrap/inttypes.h
@@ -0,0 +1 @@
+#include <sys/types.h>
diff --git a/grub-core/lib/posix_wrap/langinfo.h b/grub-core/lib/posix_wrap/langinfo.h
new file mode 100644
index 0000000..ab75af1
--- /dev/null
+++ b/grub-core/lib/posix_wrap/langinfo.h
@@ -0,0 +1,38 @@
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+ *
+ * GRUB is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GRUB is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GRUB. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GRUB_POSIX_LANGINFO_H
+#define GRUB_POSIX_LANGINFO_H 1
+
+#include <localcharset.h>
+
+typedef enum { CODESET } nl_item;
+
+static inline const char *
+nl_langinfo (nl_item item)
+{
+ switch (item)
+ {
+ case CODESET:
+ return "UTF-8";
+ default:
+ return "";
+ }
+}
+
+#endif
diff --git a/grub-core/lib/posix_wrap/limits.h b/grub-core/lib/posix_wrap/limits.h
new file mode 100644
index 0000000..7217138
--- /dev/null
+++ b/grub-core/lib/posix_wrap/limits.h
@@ -0,0 +1,41 @@
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2010 Free Software Foundation, Inc.
+ *
+ * GRUB is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GRUB is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GRUB. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GRUB_POSIX_LIMITS_H
+#define GRUB_POSIX_LIMITS_H
+
+#include <grub/types.h>
+
+#define UCHAR_MAX GRUB_UCHAR_MAX
+#define USHRT_MAX GRUB_USHRT_MAX
+#define UINT_MAX GRUB_UINT_MAX
+#define ULONG_MAX GRUB_ULONG_MAX
+#define SIZE_MAX GRUB_SIZE_MAX
+
+#define SCHAR_MIN GRUB_SCHAR_MIN
+#define SCHAR_MAX GRUB_SCHAR_MAX
+#define SHRT_MIN GRUB_SHRT_MIN
+#define SHRT_MAX GRUB_SHRT_MAX
+#define INT_MIN GRUB_INT_MIN
+#define INT_MAX GRUB_INT_MAX
+#define LONG_MIN GRUB_LONG_MIN
+#define LONG_MAX GRUB_LONG_MAX
+
+#define CHAR_BIT 8
+
+#endif
diff --git a/grub-core/lib/posix_wrap/localcharset.h b/grub-core/lib/posix_wrap/localcharset.h
new file mode 100644
index 0000000..502d860
--- /dev/null
+++ b/grub-core/lib/posix_wrap/localcharset.h
@@ -0,0 +1,28 @@
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+ *
+ * GRUB is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GRUB is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GRUB. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GRUB_POSIX_LOCALCHARSET_H
+#define GRUB_POSIX_LOCALCHARSET_H 1
+
+static inline const char *
+locale_charset (void)
+{
+ return "UTF-8";
+}
+
+#endif
diff --git a/grub-core/lib/posix_wrap/locale.h b/grub-core/lib/posix_wrap/locale.h
new file mode 100644
index 0000000..569a765
--- /dev/null
+++ b/grub-core/lib/posix_wrap/locale.h
@@ -0,0 +1,3 @@
+#ifdef GRUB_UTIL
+#include_next <locale.h>
+#endif
diff --git a/grub-core/lib/posix_wrap/stdint.h b/grub-core/lib/posix_wrap/stdint.h
new file mode 100644
index 0000000..a12c43b
--- /dev/null
+++ b/grub-core/lib/posix_wrap/stdint.h
@@ -0,0 +1 @@
+#include <sys/types.h>
diff --git a/grub-core/lib/posix_wrap/stdio.h b/grub-core/lib/posix_wrap/stdio.h
new file mode 100644
index 0000000..d5a8b75
--- /dev/null
+++ b/grub-core/lib/posix_wrap/stdio.h
@@ -0,0 +1,43 @@
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+ *
+ * GRUB is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GRUB is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GRUB. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GRUB_POSIX_STDIO_H
+#define GRUB_POSIX_STDIO_H 1
+
+#include <grub/misc.h>
+#include <grub/file.h>
+#include <sys/types.h>
+
+typedef struct grub_file FILE;
+
+#define EOF -1
+
+static inline int
+snprintf (char *str, grub_size_t n, const char *fmt, ...)
+{
+ va_list ap;
+ int ret;
+
+ va_start (ap, fmt);
+ ret = grub_vsnprintf (str, n, fmt, ap);
+ va_end (ap);
+
+ return ret;
+}
+
+#endif
diff --git a/grub-core/lib/posix_wrap/stdlib.h b/grub-core/lib/posix_wrap/stdlib.h
new file mode 100644
index 0000000..7a8d385
--- /dev/null
+++ b/grub-core/lib/posix_wrap/stdlib.h
@@ -0,0 +1,61 @@
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+ *
+ * GRUB is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GRUB is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GRUB. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GRUB_POSIX_STDLIB_H
+#define GRUB_POSIX_STDLIB_H 1
+
+#include <grub/mm.h>
+#include <grub/misc.h>
+#include <grub/safemath.h>
+
+static inline void
+free (void *ptr)
+{
+ grub_free (ptr);
+}
+
+static inline void *
+malloc (grub_size_t size)
+{
+ return grub_malloc (size);
+}
+
+static inline void *
+calloc (grub_size_t size, grub_size_t nelem)
+{
+ grub_size_t sz;
+
+ if (grub_mul (size, nelem, &sz))
+ return NULL;
+
+ return grub_zalloc (sz);
+}
+
+static inline void *
+realloc (void *ptr, grub_size_t size)
+{
+ return grub_realloc (ptr, size);
+}
+
+static inline int
+abs (int c)
+{
+ return (c >= 0) ? c : -c;
+}
+
+#endif
diff --git a/grub-core/lib/posix_wrap/string.h b/grub-core/lib/posix_wrap/string.h
new file mode 100644
index 0000000..7ae6eee
--- /dev/null
+++ b/grub-core/lib/posix_wrap/string.h
@@ -0,0 +1,92 @@
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+ *
+ * GRUB is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GRUB is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GRUB. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GRUB_POSIX_STRING_H
+#define GRUB_POSIX_STRING_H 1
+
+#include <grub/misc.h>
+#include <sys/types.h>
+
+#define HAVE_STRCASECMP 1
+
+static inline grub_size_t
+strlen (const char *s)
+{
+ return grub_strlen (s);
+}
+
+static inline int
+strcmp (const char *s1, const char *s2)
+{
+ return grub_strcmp (s1, s2);
+}
+
+static inline int
+strcasecmp (const char *s1, const char *s2)
+{
+ return grub_strcasecmp (s1, s2);
+}
+
+static inline void
+bcopy (const void *src, void *dest, grub_size_t n)
+{
+ grub_memcpy (dest, src, n);
+}
+
+static inline char *
+strcpy (char *dest, const char *src)
+{
+ return grub_strcpy (dest, src);
+}
+
+static inline char *
+strstr (const char *haystack, const char *needle)
+{
+ return grub_strstr (haystack, needle);
+}
+
+static inline char *
+strchr (const char *s, int c)
+{
+ return grub_strchr (s, c);
+}
+
+static inline char *
+strncpy (char *dest, const char *src, grub_size_t n)
+{
+ return grub_strncpy (dest, src, n);
+}
+
+static inline int
+strcoll (const char *s1, const char *s2)
+{
+ return grub_strcmp (s1, s2);
+}
+
+static inline void *
+memchr (const void *s, int c, grub_size_t n)
+{
+ return grub_memchr (s, c, n);
+}
+
+#define memcmp grub_memcmp
+#define memcpy grub_memcpy
+#define memmove grub_memmove
+#define memset grub_memset
+
+#endif
diff --git a/grub-core/lib/posix_wrap/sys/types.h b/grub-core/lib/posix_wrap/sys/types.h
new file mode 100644
index 0000000..854eb01
--- /dev/null
+++ b/grub-core/lib/posix_wrap/sys/types.h
@@ -0,0 +1,65 @@
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+ *
+ * GRUB is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GRUB is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GRUB. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GRUB_POSIX_SYS_TYPES_H
+#define GRUB_POSIX_SYS_TYPES_H 1
+
+#include <grub/misc.h>
+
+#include <stddef.h>
+
+typedef grub_ssize_t ssize_t;
+#ifndef GRUB_POSIX_BOOL_DEFINED
+typedef enum { false = 0, true = 1 } bool;
+#define GRUB_POSIX_BOOL_DEFINED 1
+#endif
+
+typedef grub_uint8_t uint8_t;
+typedef grub_uint16_t uint16_t;
+typedef grub_uint32_t uint32_t;
+typedef grub_uint64_t uint64_t;
+
+typedef grub_int8_t int8_t;
+typedef grub_int16_t int16_t;
+typedef grub_int32_t int32_t;
+typedef grub_int64_t int64_t;
+
+#define HAVE_U64_TYPEDEF 1
+typedef grub_uint64_t u64;
+#define HAVE_U32_TYPEDEF 1
+typedef grub_uint32_t u32;
+#define HAVE_U16_TYPEDEF 1
+typedef grub_uint16_t u16;
+#define HAVE_BYTE_TYPEDEF 1
+typedef grub_uint8_t byte;
+
+typedef grub_addr_t uintptr_t;
+
+#define SIZEOF_UNSIGNED_LONG GRUB_CPU_SIZEOF_LONG
+#define SIZEOF_UNSIGNED_INT 4
+#define SIZEOF_UNSIGNED_LONG_LONG 8
+#define SIZEOF_UNSIGNED_SHORT 2
+#define SIZEOF_UINT64_T 8
+
+#ifdef GRUB_CPU_WORDS_BIGENDIAN
+#define WORDS_BIGENDIAN 1
+#else
+#undef WORDS_BIGENDIAN
+#endif
+
+#endif
diff --git a/grub-core/lib/posix_wrap/unistd.h b/grub-core/lib/posix_wrap/unistd.h
new file mode 100644
index 0000000..a12c43b
--- /dev/null
+++ b/grub-core/lib/posix_wrap/unistd.h
@@ -0,0 +1 @@
+#include <sys/types.h>
diff --git a/grub-core/lib/posix_wrap/wchar.h b/grub-core/lib/posix_wrap/wchar.h
new file mode 100644
index 0000000..e0e04a6
--- /dev/null
+++ b/grub-core/lib/posix_wrap/wchar.h
@@ -0,0 +1,119 @@
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+ *
+ * GRUB is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GRUB is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GRUB. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GRUB_POSIX_WCHAR_H
+#define GRUB_POSIX_WCHAR_H 1
+
+#include <grub/charset.h>
+
+#define wint_t grub_posix_wint_t
+#define wchar_t grub_posix_wchar_t
+#define mbstate_t grub_posix_mbstate_t
+
+/* UCS-4. */
+typedef grub_int32_t wint_t;
+enum
+ {
+ WEOF = -1
+ };
+
+/* UCS-4. */
+typedef grub_int32_t wchar_t;
+
+typedef struct mbstate {
+ grub_uint32_t code;
+ int count;
+} mbstate_t;
+
+/* UTF-8. */
+#define MB_CUR_MAX 4
+#define MB_LEN_MAX 4
+
+static inline size_t
+mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)
+{
+ const char *ptr;
+ if (!s)
+ {
+ pwc = 0;
+ s = "";
+ n = 1;
+ }
+
+ if (pwc)
+ *pwc = 0;
+
+ for (ptr = s; ptr < s + n; ptr++)
+ {
+ if (!grub_utf8_process (*ptr, &ps->code, &ps->count))
+ return -1;
+ if (ps->count)
+ continue;
+ if (pwc)
+ *pwc = ps->code;
+ if (ps->code == 0)
+ return 0;
+ return ptr - s + 1;
+ }
+ return -2;
+}
+
+static inline int
+mbsinit(const mbstate_t *ps)
+{
+ return ps->count == 0;
+}
+
+static inline size_t
+wcrtomb (char *s, wchar_t wc, mbstate_t *ps __attribute__ ((unused)))
+{
+ if (s == 0)
+ return 1;
+ return grub_encode_utf8_character ((grub_uint8_t *) s,
+ (grub_uint8_t *) s + MB_LEN_MAX,
+ wc);
+}
+
+static inline wint_t btowc (int c)
+{
+ if (c & ~0x7f)
+ return WEOF;
+ return c;
+}
+
+
+static inline int
+wcscoll (const wchar_t *s1, const wchar_t *s2)
+{
+ while (*s1 && *s2)
+ {
+ if (*s1 != *s2)
+ break;
+
+ s1++;
+ s2++;
+ }
+
+ if (*s1 < *s2)
+ return -1;
+ if (*s1 > *s2)
+ return +1;
+ return 0;
+}
+
+#endif
diff --git a/grub-core/lib/posix_wrap/wctype.h b/grub-core/lib/posix_wrap/wctype.h
new file mode 100644
index 0000000..3771dc5
--- /dev/null
+++ b/grub-core/lib/posix_wrap/wctype.h
@@ -0,0 +1,110 @@
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
+ *
+ * GRUB is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GRUB is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GRUB. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GRUB_POSIX_WCTYPE_H
+#define GRUB_POSIX_WCTYPE_H 1
+
+#include <grub/misc.h>
+#include <wchar.h>
+
+#define wctype_t grub_posix_wctype_t
+
+typedef enum { GRUB_CTYPE_INVALID,
+ GRUB_CTYPE_ALNUM, GRUB_CTYPE_CNTRL, GRUB_CTYPE_LOWER,
+ GRUB_CTYPE_SPACE, GRUB_CTYPE_ALPHA, GRUB_CTYPE_DIGIT,
+ GRUB_CTYPE_PRINT, GRUB_CTYPE_UPPER, GRUB_CTYPE_BLANK,
+ GRUB_CTYPE_GRAPH, GRUB_CTYPE_PUNCT, GRUB_CTYPE_XDIGIT,
+ GRUB_CTYPE_MAX} wctype_t;
+
+#define CHARCLASS_NAME_MAX (sizeof ("xdigit") - 1)
+
+static inline wctype_t
+wctype (const char *name)
+{
+ wctype_t i;
+ static const char names[][10] = { "",
+ "alnum", "cntrl", "lower",
+ "space", "alpha", "digit",
+ "print", "upper", "blank",
+ "graph", "punct", "xdigit" };
+ for (i = GRUB_CTYPE_INVALID; i < GRUB_CTYPE_MAX; i++)
+ if (grub_strcmp (names[i], name) == 0)
+ return i;
+ return GRUB_CTYPE_INVALID;
+}
+
+/* FIXME: take into account international lowercase characters. */
+static inline int
+iswlower (wint_t wc)
+{
+ return grub_islower (wc);
+}
+
+static inline wint_t
+towlower (wint_t c)
+{
+ return grub_tolower (c);
+}
+
+static inline wint_t
+towupper (wint_t c)
+{
+ return grub_toupper (c);
+}
+
+static inline int
+iswalnum (wint_t c)
+{
+ return grub_isalpha (c) || grub_isdigit (c);
+}
+
+static inline int
+iswctype (wint_t wc, wctype_t desc)
+{
+ switch (desc)
+ {
+ case GRUB_CTYPE_ALNUM:
+ return iswalnum (wc);
+ case GRUB_CTYPE_CNTRL:
+ return grub_iscntrl (wc);
+ case GRUB_CTYPE_LOWER:
+ return iswlower (wc);
+ case GRUB_CTYPE_SPACE:
+ return grub_isspace (wc);
+ case GRUB_CTYPE_ALPHA:
+ return grub_isalpha (wc);
+ case GRUB_CTYPE_DIGIT:
+ return grub_isdigit (wc);
+ case GRUB_CTYPE_PRINT:
+ return grub_isprint (wc);
+ case GRUB_CTYPE_UPPER:
+ return grub_isupper (wc);
+ case GRUB_CTYPE_BLANK:
+ return wc == ' ' || wc == '\t';
+ case GRUB_CTYPE_GRAPH:
+ return grub_isgraph (wc);
+ case GRUB_CTYPE_PUNCT:
+ return grub_isprint (wc) && !grub_isspace (wc) && !iswalnum (wc);
+ case GRUB_CTYPE_XDIGIT:
+ return grub_isxdigit (wc);
+ default:
+ return 0;
+ }
+}
+
+#endif