diff --git a/include/grub/misc.h b/include/grub/misc.h index 769ec5c..a63a0b4 100644 --- a/include/grub/misc.h +++ b/include/grub/misc.h @@ -37,8 +37,42 @@ void *EXPORT_FUNC(grub_memmove) (void *dest, const void *src, grub_size_t n); char *EXPORT_FUNC(grub_strcpy) (char *dest, const char *src); char *EXPORT_FUNC(grub_strncpy) (char *dest, const char *src, int c); char *EXPORT_FUNC(grub_stpcpy) (char *dest, const char *src); -char *EXPORT_FUNC(grub_strcat) (char *dest, const char *src); -char *EXPORT_FUNC(grub_strncat) (char *dest, const char *src, int c); + +static inline char * +grub_strcat (char *dest, const char *src) +{ + char *p = dest; + + while (*p) + p++; + + while ((*p = *src) != '\0') + { + p++; + src++; + } + + return dest; +} + +static inline char * +grub_strncat (char *dest, const char *src, int c) +{ + char *p = dest; + + while (*p) + p++; + + while ((*p = *src) != '\0' && c--) + { + p++; + src++; + } + + *p = '\0'; + + return dest; +} /* Prototypes for aliases. */ #if !defined (GRUB_UTIL) || !defined (APPLE_CC) @@ -49,19 +83,41 @@ void *EXPORT_FUNC(memcpy) (void *dest, const void *src, grub_size_t n); int EXPORT_FUNC(grub_memcmp) (const void *s1, const void *s2, grub_size_t n); int EXPORT_FUNC(grub_strcmp) (const char *s1, const char *s2); int EXPORT_FUNC(grub_strncmp) (const char *s1, const char *s2, grub_size_t n); -int EXPORT_FUNC(grub_strcasecmp) (const char *s1, const char *s2); -int EXPORT_FUNC(grub_strncasecmp) (const char *s1, const char *s2, grub_size_t n); + char *EXPORT_FUNC(grub_strchr) (const char *s, int c); char *EXPORT_FUNC(grub_strrchr) (const char *s, int c); int EXPORT_FUNC(grub_strword) (const char *s, const char *w); char *EXPORT_FUNC(grub_strstr) (const char *haystack, const char *needle); -int EXPORT_FUNC(grub_iswordseparator) (int c); int EXPORT_FUNC(grub_isspace) (int c); int EXPORT_FUNC(grub_isprint) (int c); -int EXPORT_FUNC(grub_isalpha) (int c); -int EXPORT_FUNC(grub_isgraph) (int c); -int EXPORT_FUNC(grub_isdigit) (int c); -int EXPORT_FUNC(grub_tolower) (int c); + +static inline int +grub_isalpha (int c) +{ + return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'); +} + +static inline int +grub_isgraph (int c) +{ + return (c >= '!' && c <= '~'); +} + +static inline int +grub_isdigit (int c) +{ + return (c >= '0' && c <= '9'); +} + +static inline int +grub_tolower (int c) +{ + if (c >= 'A' && c <= 'Z') + return c - 'A' + 'a'; + + return c; +} + static inline int grub_toupper (int c) { @@ -71,6 +127,40 @@ grub_toupper (int c) return c; } +static inline int +grub_strcasecmp (const char *s1, const char *s2) +{ + while (*s1 && *s2) + { + if (grub_tolower (*s1) != grub_tolower (*s2)) + break; + + s1++; + s2++; + } + + return (int) grub_tolower (*s1) - (int) grub_tolower (*s2); +} + +static inline int +grub_strncasecmp (const char *s1, const char *s2, grub_size_t n) +{ + if (n == 0) + return 0; + + while (*s1 && *s2 && --n) + { + if (grub_tolower (*s1) != grub_tolower (*s2)) + break; + + s1++; + s2++; + } + + return (int) grub_tolower (*s1) - (int) grub_tolower (*s2); +} + + unsigned long EXPORT_FUNC(grub_strtoul) (const char *str, char **end, int base); unsigned long long EXPORT_FUNC(grub_strtoull) (const char *str, char **end, int base); char *EXPORT_FUNC(grub_strdup) (const char *s); diff --git a/kern/misc.c b/kern/misc.c index d797f17..1c38fe6 100644 --- a/kern/misc.c +++ b/kern/misc.c @@ -24,6 +24,12 @@ #include #include +static int +grub_iswordseparator (int c) +{ + return (grub_isspace (c) || c == ',' || c == ';' || c == '|' || c == '&'); +} + void * grub_memmove (void *dest, const void *src, grub_size_t n) { @@ -97,42 +103,6 @@ grub_stpcpy (char *dest, const char *src) return d - 1; } -char * -grub_strcat (char *dest, const char *src) -{ - char *p = dest; - - while (*p) - p++; - - while ((*p = *src) != '\0') - { - p++; - src++; - } - - return dest; -} - -char * -grub_strncat (char *dest, const char *src, int c) -{ - char *p = dest; - - while (*p) - p++; - - while ((*p = *src) != '\0' && c--) - { - p++; - src++; - } - - *p = '\0'; - - return dest; -} - int grub_printf (const char *fmt, ...) { @@ -250,39 +220,6 @@ grub_strncmp (const char *s1, const char *s2, grub_size_t n) return (int) *s1 - (int) *s2; } -int -grub_strcasecmp (const char *s1, const char *s2) -{ - while (*s1 && *s2) - { - if (grub_tolower (*s1) != grub_tolower (*s2)) - break; - - s1++; - s2++; - } - - return (int) grub_tolower (*s1) - (int) grub_tolower (*s2); -} - -int -grub_strncasecmp (const char *s1, const char *s2, grub_size_t n) -{ - if (n == 0) - return 0; - - while (*s1 && *s2 && --n) - { - if (grub_tolower (*s1) != grub_tolower (*s2)) - break; - - s1++; - s2++; - } - - return (int) grub_tolower (*s1) - (int) grub_tolower (*s2); -} - char * grub_strchr (const char *s, int c) { @@ -395,12 +332,6 @@ grub_strword (const char *haystack, const char *needle) } int -grub_iswordseparator (int c) -{ - return (grub_isspace (c) || c == ',' || c == ';' || c == '|' || c == '&'); -} - -int grub_isspace (int c) { return (c == '\n' || c == '\r' || c == ' ' || c == '\t'); @@ -412,33 +343,6 @@ grub_isprint (int c) return (c >= ' ' && c <= '~'); } -int -grub_isalpha (int c) -{ - return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'); -} - -int -grub_isdigit (int c) -{ - return (c >= '0' && c <= '9'); -} - -int -grub_isgraph (int c) -{ - return (c >= '!' && c <= '~'); -} - -int -grub_tolower (int c) -{ - if (c >= 'A' && c <= 'Z') - return c - 'A' + 'a'; - - return c; -} - unsigned long grub_strtoul (const char *str, char **end, int base)