src/irc_nm.c
author Tero Marttila <terom@fixme.fi>
Thu, 12 Mar 2009 18:08:27 +0200
changeset 36 791d7a5532e2
permissions -rw-r--r--
add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
36
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
#include "irc_nm.h"
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
#include <string.h>
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
/**
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
 * Compare two nicknames
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
 */
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
int irc_cmp_nick (const char *nick1, const char *nick2)
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
{
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
    // XXX: just use strcasecmp for now
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    11
    return strcasecmp(nick1, nick2);
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    12
}
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    13
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    14
int irc_ncmp_nick (const char *nick1, const char *nick2, size_t n)
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
{
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
    // XXX: just use strncasecmp for now
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
    return strncasecmp(nick1, nick2, n);
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
}
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
err_t irc_prefix_parse_nick (const char *prefix, char nick[IRC_NICK_MAX])
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
{
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
    const char *bang;
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    23
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
    // find the !
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
    if ((bang = strchr(prefix, '!')) == NULL)
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    26
        return ERR_INVALID_NM;
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
    // too long?
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
    if (bang - prefix > IRC_NICK_MAX - 1)
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
        return ERR_INVALID_NICK_LENGTH;
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
    
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
    // copy up to the !
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
    memcpy(nick, prefix, bang - prefix);
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
    // terminating NUL
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
    nick[bang - prefix] = '\0';
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
    // ok
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
    return SUCCESS;
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    40
}
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    41
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    42
int irc_prefix_cmp_nick (const char *prefix, const char *nick)
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    43
{
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
    const char *bang;
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    45
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    46
    // find the !
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
    if ((bang = strchr(prefix, '!')) == NULL)
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
        return -ERR_INVALID_NM;
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    50
    // compare up to that
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    51
    if (irc_ncmp_nick(prefix, nick, (bang - prefix)) == 0)
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    52
        // match
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    53
        return 0;
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    54
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    55
    else
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    56
        // doesn't match
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    57
        return 1;
791d7a5532e2 add irc_prefix_* functions to parse nicknames (plus sketch out some irc_nickmask stuff)
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    58
}