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
|
+ (instancetype)IRCUserWithString: (OFString *)string
{
return [[[self alloc] initWithString: string] autorelease];
}
- (instancetype)initWithString: (OFString *)string
{
char *tmp2 = NULL;
self = [super init];
@try {
char *tmp;
tmp2 = OFStrDup(string.UTF8String);
if ((tmp = strchr(tmp2, '@')) == NULL)
@throw [OFInvalidFormatException exception];
*tmp = '\0';
_hostname = [[OFString alloc] initWithUTF8String: tmp + 1];
if ((tmp = strchr(tmp2, '!')) == NULL)
@throw [OFInvalidFormatException exception];
*tmp = '\0';
_username = [[OFString alloc] initWithUTF8String: tmp + 1];
_nickname = [[OFString alloc] initWithUTF8String: tmp2];
} @catch (id e) {
[self release];
@throw e;
} @finally {
if (tmp2 != NULL)
free(tmp2);
}
return self;
}
- (void)dealloc
{
|
<
<
|
|
|
<
>
|
|
>
|
<
<
|
|
<
<
<
|
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
{
self = [super init];
@try {
size_t pos;
pos = [string rangeOfString: @"@"].location;
if (pos == OFNotFound)
@throw [OFInvalidFormatException exception];
_hostname = [[string substringFromIndex: pos + 1] copy];
string = [string substringToIndex: pos];
pos = [string rangeOfString: @"!"].location;
if (pos == OFNotFound)
@throw [OFInvalidFormatException exception];
_username = [[string substringFromIndex: pos + 1] copy];
_nickname = [[string substringToIndex: pos] copy];
} @catch (id e) {
[self release];
@throw e;
}
return self;
}
- (void)dealloc
{
|