diff options
Diffstat (limited to 'nick.c')
| -rw-r--r-- | nick.c | 20 | 
1 files changed, 18 insertions, 2 deletions
| @@ -119,7 +119,8 @@ char *nick_gen( bee_user_t *bu )  	while( fmt && *fmt && ret->len < MAX_NICK_LENGTH )  	{ -		char *part = NULL, chop = '\0', *asc = NULL; +		char *part = NULL, chop = '\0', *asc = NULL, *s; +		int len = INT_MAX;  		if( *fmt != '%' )  		{ @@ -142,6 +143,13 @@ char *nick_gen( bee_user_t *bu )  				}  				fmt += 2;  			} +			else if( isdigit( *fmt ) ) +			{ +				len = 0; +				/* Grab a number. */ +				while( isdigit( *fmt ) ) +					len = len * 10 + ( *(fmt++) - '0' ); +			}  			else if( g_strncasecmp( fmt, "nick", 4 ) == 0 )  			{  				part = bu->nick ? : bu->handle; @@ -201,8 +209,16 @@ char *nick_gen( bee_user_t *bu )  			part = asc = g_convert_with_fallback( part, -1, "ASCII//TRANSLIT",  			                                      "UTF-8", "", NULL, NULL, NULL ); +		if( chop && ( s = strchr( part, chop ) ) ) +			len = MIN( len, s - part ); +		  		if( part ) -			g_string_append( ret, part ); +		{ +			if( len < INT_MAX ) +				g_string_append_len( ret, part, len ); +			else +				g_string_append( ret, part ); +		}  		g_free( asc );  	} | 
