39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
-
-
-
+
-
-
+
+
-
+
-
-
+
+
+
-
+
-
-
-
-
+
+
-
-
-
|
+ (instancetype)IRCUserWithString: (OFString *)string
{
return [[[self alloc] initWithString: string] autorelease];
}
- (instancetype)initWithString: (OFString *)string
{
char *tmp2 = NULL;
self = [super init];
@try {
char *tmp;
size_t pos;
tmp2 = OFStrDup(string.UTF8String);
pos = [string rangeOfString: @"@"].location;
if (pos == OFNotFound)
if ((tmp = strchr(tmp2, '@')) == NULL)
@throw [OFInvalidFormatException exception];
_hostname = [[string substringFromIndex: pos + 1] copy];
*tmp = '\0';
_hostname = [[OFString alloc] initWithUTF8String: tmp + 1];
string = [string substringToIndex: pos];
pos = [string rangeOfString: @"!"].location;
if ((tmp = strchr(tmp2, '!')) == NULL)
if (pos == OFNotFound)
@throw [OFInvalidFormatException exception];
*tmp = '\0';
_username = [[OFString alloc] initWithUTF8String: tmp + 1];
_nickname = [[OFString alloc] initWithUTF8String: tmp2];
_username = [[string substringFromIndex: pos + 1] copy];
_nickname = [[string substringToIndex: pos] copy];
} @catch (id e) {
[self release];
@throw e;
} @finally {
if (tmp2 != NULL)
free(tmp2);
}
return self;
}
- (void)dealloc
{
|