aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nick.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/nick.c b/nick.c
index 65e36e54..54e180da 100644
--- a/nick.c
+++ b/nick.c
@@ -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 );
}