1
2
3
4
5
6
7
8
9
|
/*
* Copyright (c) 2008-2021 Jonathan Schleifer <js@nil.im>
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
* the packaging of this file.
*
|
|
|
1
2
3
4
5
6
7
8
9
|
/*
* Copyright (c) 2008-2022 Jonathan Schleifer <js@nil.im>
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
* the packaging of this file.
*
|
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
void *pool = objc_autoreleasePoolPush();
const char *string = self.UTF8String;
size_t length = self.UTF8StringLength;
char *retCString;
char byte = 0;
int state = 0;
size_t i = 0;
retCString = OFAllocMemory(length + 1, 1);
while (length--) {
char c = *string++;
switch (state) {
|
>
|
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
void *pool = objc_autoreleasePoolPush();
const char *string = self.UTF8String;
size_t length = self.UTF8StringLength;
char *retCString;
char byte = 0;
int state = 0;
size_t i = 0;
OFString *ret;
retCString = OFAllocMemory(length + 1, 1);
while (length--) {
char c = *string++;
switch (state) {
|
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
|
@try {
retCString = OFResizeMemory(retCString, 1, i + 1);
} @catch (OFOutOfMemoryException *e) {
/* We don't care if it fails, as we only made it smaller. */
}
@try {
return [OFString stringWithUTF8StringNoCopy: retCString
length: i
freeWhenDone: true];
} @catch (id e) {
OFFreeMemory(retCString);
@throw e;
}
}
@end
|
|
|
|
|
>
>
|
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
|
@try {
retCString = OFResizeMemory(retCString, 1, i + 1);
} @catch (OFOutOfMemoryException *e) {
/* We don't care if it fails, as we only made it smaller. */
}
@try {
ret = [OFString stringWithUTF8StringNoCopy: retCString
length: i
freeWhenDone: true];
} @catch (id e) {
OFFreeMemory(retCString);
@throw e;
}
return ret;
}
@end
|