diff options
| author | Přemysl Janouch <p.janouch@gmail.com> | 2015-07-09 01:48:34 +0200 | 
|---|---|---|
| committer | Přemysl Janouch <p.janouch@gmail.com> | 2015-07-09 01:48:34 +0200 | 
| commit | 2b2da0beab8dc24c79b94b40fed2f9bf08999d82 (patch) | |
| tree | 6ff6128ed5fa4c2188d88ed0e2528b5372fadc2c | |
| parent | f57cc7923db6698fb7bb7a906da52cf3b952a15c (diff) | |
| download | xK-2b2da0beab8dc24c79b94b40fed2f9bf08999d82.tar.gz xK-2b2da0beab8dc24c79b94b40fed2f9bf08999d82.tar.xz xK-2b2da0beab8dc24c79b94b40fed2f9bf08999d82.zip | |
degesch: support CASEMAPPING=rfc1459-strict
| -rw-r--r-- | common.c | 21 | ||||
| -rw-r--r-- | degesch.c | 7 | 
2 files changed, 24 insertions, 4 deletions
| @@ -58,6 +58,16 @@  		(link)->next = (following);                                            \  	BLOCK_END +#define TRIVIAL_STRXFRM(name, fn)                                              \ +	static size_t                                                              \ +	name (char *dest, const char *src, size_t n)                               \ +	{                                                                          \ +		size_t len = strlen (src);                                             \ +		while (n-- && (*dest++ = (fn) (*src++)))                               \ +			;                                                                  \ +		return len;                                                            \ +	} +  static void  transform_str (char *s, int (*tolower) (int c))  { @@ -103,6 +113,17 @@ strncasecmp_ascii (const char *a, const char *b, size_t n)  	return 0;  } +static int +irc_tolower_strict (int c) +{ +	if (c == '[')   return '{'; +	if (c == ']')   return '}'; +	if (c == '\\')  return '|'; +	return c >= 'A' && c <= 'Z' ? c + ('a' - 'A') : c; +} + +TRIVIAL_STRXFRM (irc_strxfrm_strict, irc_tolower_strict) +  static char *  resolve_relative_runtime_filename (const char *filename)  { @@ -5669,12 +5669,11 @@ static void  irc_handle_isupport_casemapping (struct server *s, char *value)  {  	if      (!strcmp (value, "ascii")) -		irc_set_casemapping (s, tolower_ascii, tolower_ascii_strxfrm); +		irc_set_casemapping (s, tolower_ascii,      tolower_ascii_strxfrm);  	else if (!strcmp (value, "rfc1459")) -		irc_set_casemapping (s, irc_tolower,   irc_strxfrm); +		irc_set_casemapping (s, irc_tolower,        irc_strxfrm);  	else if (!strcmp (value, "rfc1459-strict")) -		// TODO: implement -		irc_set_casemapping (s, irc_tolower,   irc_strxfrm); +		irc_set_casemapping (s, irc_tolower_strict, irc_strxfrm_strict);  }  static void | 
