index 85b639bea72a0649869e27383bb056bb16b26936..7baf8241b53680eeb9ad61a7216b125a081ef95f 100644 (file)
--- a/tig.h
+++ b/tig.h
#define prefixcmp(str1, str2) \
strncmp(str1, str2, STRING_SIZE(str2))
+static inline int
+ascii_toupper(int c)
+{
+ if (c >= 'a' && c <= 'z')
+ c &= ~0x20;
+ return c;
+}
+
+static inline int
+ascii_tolower(int c)
+{
+ if (c >= 'A' && c <= 'Z')
+ c |= 0x20;
+ return c;
+}
+
static inline int
suffixcmp(const char *str, int slen, const char *suffix)
{
#define ENUM_MAP(name, value) { name, STRING_SIZE(name), value }
+#define ENUM_SYM_MACRO(prefix, name) prefix##_##name
+#define ENUM_MAP_MACRO(prefix, name) ENUM_MAP(#name, ENUM_SYM_MACRO(prefix, name))
+
+#define DEFINE_ENUM(name, info) \
+ enum name { info(ENUM_SYM_MACRO) }; \
+ static const struct enum_map name##_map[] = { info(ENUM_MAP_MACRO) }
+
static inline int
string_enum_compare(const char *str1, const char *str2, int len)
{
/* Diff-Header == DIFF_HEADER */
for (i = 0; i < len; i++) {
- if (toupper(str1[i]) == toupper(str2[i]))
+ if (ascii_toupper(str1[i]) == ascii_toupper(str2[i]))
continue;
if (string_enum_sep(str1[i]) &&
int bufpos;
for (bufpos = 0; bufpos <= namelen; bufpos++) {
- buf[bufpos] = tolower(name[bufpos]);
+ buf[bufpos] = ascii_tolower(name[bufpos]);
if (buf[bufpos] == '_')
buf[bufpos] = '-';
}