Skip to content

Commit 766b375

Browse files
author
Tom Bradley
committed
Renamed TBXML class methods to adhere to coding standards. Added checking for ARC. More error checks. Removed all compiler/analyse warnings.
WARNING: All [TBXML tbxmlWithXMLString] etc have changed to [TBXML newTBXMLWithXMLString] to comply with coding standards. The code now detects if your compiling with or without ARC so there shouldn't be any more leaks. More error checks have been added and deprecated functions that don't pass an error no longer crash. All compiler and analyser warnings have been fixed.
1 parent 3c9cdce commit 766b375

File tree

8 files changed

+177
-91
lines changed

8 files changed

+177
-91
lines changed

Diff for: TBXML-Code/TBXML+Compression.m

+3-4
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,8 @@ + (NSData *) dataWithUncompressedContentsOfFile:(NSString *)aFile {
7070
'w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/' };
7171

7272

73-
+ (NSData *) dataWithBase64EncodedString:(NSString *) string {
74-
NSData *result = [[NSData alloc] initWithBase64EncodedString:string];
75-
return result;
73+
+ (NSData *) newDataWithBase64EncodedString:(NSString *) string {
74+
return [[NSData alloc] initWithBase64EncodedString:string];
7675
}
7776

7877
- (id) initWithBase64EncodedString:(NSString *) string {
@@ -82,7 +81,7 @@ - (id) initWithBase64EncodedString:(NSString *) string {
8281
unsigned long ixtext = 0;
8382
unsigned long lentext = 0;
8483
unsigned char ch = 0;
85-
unsigned char inbuf[4], outbuf[3];
84+
unsigned char inbuf[4] = {0,0,0,0}, outbuf[3] = {0,0,0};
8685
short i = 0, ixinbuf = 0;
8786
BOOL flignore = NO;
8887
BOOL flendtext = NO;

Diff for: TBXML-Code/TBXML+HTTP.m

+14-3
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,13 @@ + (NSMutableURLRequest*) tbxmlGetRequestWithURL:(NSURL*)url {
1616
[request setURL:url];
1717
[request setHTTPMethod:@"GET"];
1818

19-
return request;
19+
20+
#ifndef ARC_ENABLED
21+
return [request autorelease];
22+
#else
23+
return request;
24+
#endif
25+
2026
}
2127

2228
+ (NSMutableURLRequest*) tbxmlPostRequestWithURL:(NSURL*)url parameters:(NSDictionary*)parameters {
@@ -37,7 +43,12 @@ + (NSMutableURLRequest*) tbxmlPostRequestWithURL:(NSURL*)url parameters:(NSDicti
3743
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
3844
[request setHTTPBody:postData];
3945

40-
return request;
46+
#ifndef ARC_ENABLED
47+
[params release];
48+
return [request autorelease];
49+
#else
50+
return request;
51+
#endif
4152
}
4253

4354
@end
@@ -68,7 +79,7 @@ + (void)tbxmlAsyncRequest:(NSURLRequest *)request success:(TBXMLAsyncRequestSucc
6879

6980
@implementation TBXML (TBXML_HTTP)
7081

71-
+ (id)tbxmlWithURL:(NSURL*)aURL success:(TBXMLSuccessBlock)successBlock failure:(TBXMLFailureBlock)failureBlock {
82+
+ (id)newTBXMLWithURL:(NSURL*)aURL success:(TBXMLSuccessBlock)successBlock failure:(TBXMLFailureBlock)failureBlock {
7283
return [[TBXML alloc] initWithURL:aURL success:successBlock failure:failureBlock];
7384
}
7485

Diff for: TBXML-Code/TBXML.m

+68-50
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ + (NSString *) errorTextForCode:(int)code;
3636
+ (NSError *) errorWithCode:(int)code;
3737
+ (NSError *) errorWithCode:(int)code userInfo:(NSDictionary *)userInfo;
3838
- (void) decodeBytes;
39-
- (void) allocateBytesOfLength:(long)length error:(NSError **)error;
39+
- (int) allocateBytesOfLength:(long)length error:(NSError **)error;
4040
- (TBXMLElement*) nextAvailableElement;
4141
- (TBXMLAttribute*) nextAvailableAttribute;
4242
@end
@@ -48,35 +48,35 @@ @implementation TBXML
4848

4949
@synthesize rootXMLElement;
5050

51-
+ (id)tbxmlWithXMLString:(NSString*)aXMLString {
51+
+ (id)newTBXMLWithXMLString:(NSString*)aXMLString {
5252
return [[TBXML alloc] initWithXMLString:aXMLString];
5353
}
5454

55-
+ (id)tbxmlWithXMLString:(NSString*)aXMLString error:(NSError *__autoreleasing *)error {
55+
+ (id)newTBXMLWithXMLString:(NSString*)aXMLString error:(NSError *__autoreleasing *)error {
5656
return [[TBXML alloc] initWithXMLString:aXMLString error:error];
5757
}
5858

59-
+ (id)tbxmlWithXMLData:(NSData*)aData {
59+
+ (id)newTBXMLWithXMLData:(NSData*)aData {
6060
return [[TBXML alloc] initWithXMLData:aData];
6161
}
6262

63-
+ (id)tbxmlWithXMLData:(NSData*)aData error:(NSError *__autoreleasing *)error {
63+
+ (id)newTBXMLWithXMLData:(NSData*)aData error:(NSError *__autoreleasing *)error {
6464
return [[TBXML alloc] initWithXMLData:aData error:error];
6565
}
6666

67-
+ (id)tbxmlWithXMLFile:(NSString*)aXMLFile {
67+
+ (id)newTBXMLWithXMLFile:(NSString*)aXMLFile {
6868
return [[TBXML alloc] initWithXMLFile:aXMLFile];
6969
}
7070

71-
+ (id)tbxmlWithXMLFile:(NSString*)aXMLFile error:(NSError *__autoreleasing *)error {
71+
+ (id)newTBXMLWithXMLFile:(NSString*)aXMLFile error:(NSError *__autoreleasing *)error {
7272
return [[TBXML alloc] initWithXMLFile:aXMLFile error:error];
7373
}
7474

75-
+ (id)tbxmlWithXMLFile:(NSString*)aXMLFile fileExtension:(NSString*)aFileExtension {
75+
+ (id)newTBXMLWithXMLFile:(NSString*)aXMLFile fileExtension:(NSString*)aFileExtension {
7676
return [[TBXML alloc] initWithXMLFile:aXMLFile fileExtension:aFileExtension];
7777
}
7878

79-
+ (id)tbxmlWithXMLFile:(NSString*)aXMLFile fileExtension:(NSString*)aFileExtension error:(NSError *__autoreleasing *)error {
79+
+ (id)newTBXMLWithXMLFile:(NSString*)aXMLFile fileExtension:(NSString*)aFileExtension error:(NSError *__autoreleasing *)error {
8080
return [[TBXML alloc] initWithXMLFile:aXMLFile fileExtension:aFileExtension error:error];
8181
}
8282

@@ -107,10 +107,10 @@ - (id)initWithXMLString:(NSString*)aXMLString error:(NSError *__autoreleasing *)
107107

108108

109109
// allocate memory for byte array
110-
[self allocateBytesOfLength:[aXMLString lengthOfBytesUsingEncoding:NSUTF8StringEncoding] error:error];
110+
int result = [self allocateBytesOfLength:[aXMLString lengthOfBytesUsingEncoding:NSUTF8StringEncoding] error:error];
111111

112112
// if an error occured, return
113-
if (error && *error != nil)
113+
if (result != D_TBXML_SUCCESS)
114114
return self;
115115

116116
// copy string to byte array
@@ -207,32 +207,40 @@ - (id)initWithXMLFile:(NSString*)aXMLFile fileExtension:(NSString*)aFileExtensio
207207
return self;
208208
}
209209

210-
- (void) decodeData:(NSData*)data {
210+
- (int) decodeData:(NSData*)data {
211211
NSError *error = nil;
212-
[self decodeData:data withError:&error];
212+
return [self decodeData:data withError:&error];
213213
}
214214

215-
- (void) decodeData:(NSData*)data withError:(NSError **)error {
215+
- (int) decodeData:(NSData*)data withError:(NSError **)error {
216+
217+
NSError *localError = nil;
216218

217219
// allocate memory for byte array
218-
[self allocateBytesOfLength:[data length] error:error];
220+
int result = [self allocateBytesOfLength:[data length] error:&localError];
219221

220-
// if an error occured, return
221-
if (error && *error)
222-
return;
223-
224-
// copy data to byte array
225-
[data getBytes:bytes length:bytesLength];
226-
227-
// set null terminator at end of byte array
228-
bytes[bytesLength] = 0;
229-
230-
// decode xml data
231-
[self decodeBytes];
232-
233-
if (!self.rootXMLElement) {
234-
*error = [TBXML errorWithCode:D_TBXML_DECODE_FAILURE];
222+
// ensure no errors during allocation
223+
if (result == D_TBXML_SUCCESS) {
224+
225+
// copy data to byte array
226+
[data getBytes:bytes length:bytesLength];
227+
228+
// set null terminator at end of byte array
229+
bytes[bytesLength] = 0;
230+
231+
// decode xml data
232+
[self decodeBytes];
233+
234+
if (!self.rootXMLElement) {
235+
localError = [TBXML errorWithCode:D_TBXML_DECODE_FAILURE];
236+
}
235237
}
238+
239+
// assign local error to pointer
240+
if (error) *error = localError;
241+
242+
// return success or error code
243+
return localError == nil ? D_TBXML_SUCCESS : [localError code];
236244
}
237245

238246
@end
@@ -255,13 +263,13 @@ + (NSString*) elementName:(TBXMLElement*)aXMLElement {
255263
+ (NSString*) elementName:(TBXMLElement*)aXMLElement error:(NSError **)error {
256264
// check for nil element
257265
if (nil == aXMLElement) {
258-
*error = [TBXML errorWithCode:D_TBXML_ELEMENT_IS_NIL];
266+
if (error) *error = [TBXML errorWithCode:D_TBXML_ELEMENT_IS_NIL];
259267
return @"";
260268
}
261269

262270
// check for nil element name
263271
if (nil == aXMLElement->name || strlen(aXMLElement->name) == 0) {
264-
*error = [TBXML errorWithCode:D_TBXML_ELEMENT_NAME_IS_NIL];
272+
if (error) *error = [TBXML errorWithCode:D_TBXML_ELEMENT_NAME_IS_NIL];
265273
return @"";
266274
}
267275

@@ -276,13 +284,13 @@ + (NSString*) attributeName:(TBXMLAttribute*)aXMLAttribute {
276284
+ (NSString*) attributeName:(TBXMLAttribute*)aXMLAttribute error:(NSError **)error {
277285
// check for nil attribute
278286
if (nil == aXMLAttribute) {
279-
*error = [TBXML errorWithCode:D_TBXML_ATTRIBUTE_IS_NIL];
287+
if (error) *error = [TBXML errorWithCode:D_TBXML_ATTRIBUTE_IS_NIL];
280288
return @"";
281289
}
282290

283291
// check for nil attribute name
284292
if (nil == aXMLAttribute->name) {
285-
*error = [TBXML errorWithCode:D_TBXML_ATTRIBUTE_NAME_IS_NIL];
293+
if (error) *error = [TBXML errorWithCode:D_TBXML_ATTRIBUTE_NAME_IS_NIL];
286294
return @"";
287295
}
288296

@@ -298,7 +306,7 @@ + (NSString*) attributeValue:(TBXMLAttribute*)aXMLAttribute {
298306
+ (NSString*) attributeValue:(TBXMLAttribute*)aXMLAttribute error:(NSError **)error {
299307
// check for nil attribute
300308
if (nil == aXMLAttribute) {
301-
*error = [TBXML errorWithCode:D_TBXML_ATTRIBUTE_IS_NIL];
309+
if (error) *error = [TBXML errorWithCode:D_TBXML_ATTRIBUTE_IS_NIL];
302310
return @"";
303311
}
304312

@@ -313,13 +321,13 @@ + (NSString*) textForElement:(TBXMLElement*)aXMLElement {
313321
+ (NSString*) textForElement:(TBXMLElement*)aXMLElement error:(NSError **)error {
314322
// check for nil element
315323
if (nil == aXMLElement) {
316-
*error = [TBXML errorWithCode:D_TBXML_ELEMENT_IS_NIL];
324+
if (error) *error = [TBXML errorWithCode:D_TBXML_ELEMENT_IS_NIL];
317325
return @"";
318326
}
319327

320328
// check for nil text value
321329
if (nil == aXMLElement->text || strlen(aXMLElement->text) == 0) {
322-
*error = [TBXML errorWithCode:D_TBXML_ELEMENT_TEXT_IS_NIL];
330+
if (error) *error = [TBXML errorWithCode:D_TBXML_ELEMENT_TEXT_IS_NIL];
323331
return @"";
324332
}
325333

@@ -343,13 +351,13 @@ + (NSString*) valueOfAttributeNamed:(NSString *)aName forElement:(TBXMLElement*)
343351
+ (NSString*) valueOfAttributeNamed:(NSString *)aName forElement:(TBXMLElement*)aXMLElement error:(NSError **)error {
344352
// check for nil element
345353
if (nil == aXMLElement) {
346-
*error = [TBXML errorWithCode:D_TBXML_ELEMENT_IS_NIL];
354+
if (error) *error = [TBXML errorWithCode:D_TBXML_ELEMENT_IS_NIL];
347355
return @"";
348356
}
349357

350358
// check for nil name parameter
351359
if (nil == aName) {
352-
*error = [TBXML errorWithCode:D_TBXML_ATTRIBUTE_NAME_IS_NIL];
360+
if (error) *error = [TBXML errorWithCode:D_TBXML_ATTRIBUTE_NAME_IS_NIL];
353361
return @"";
354362
}
355363

@@ -371,7 +379,7 @@ + (NSString*) valueOfAttributeNamed:(NSString *)aName forElement:(TBXMLElement*)
371379

372380
// check for attribute not found
373381
if (!value) {
374-
*error = [TBXML errorWithCode:D_TBXML_ATTRIBUTE_NOT_FOUND];
382+
if (error) *error = [TBXML errorWithCode:D_TBXML_ATTRIBUTE_NOT_FOUND];
375383
return @"";
376384
}
377385

@@ -394,13 +402,13 @@ + (TBXMLElement*) childElementNamed:(NSString*)aName parentElement:(TBXMLElement
394402
+ (TBXMLElement*) childElementNamed:(NSString*)aName parentElement:(TBXMLElement*)aParentXMLElement error:(NSError **)error {
395403
// check for nil element
396404
if (nil == aParentXMLElement) {
397-
*error = [TBXML errorWithCode:D_TBXML_ELEMENT_IS_NIL];
405+
if (error) *error = [TBXML errorWithCode:D_TBXML_ELEMENT_IS_NIL];
398406
return nil;
399407
}
400408

401409
// check for nil name parameter
402410
if (nil == aName) {
403-
*error = [TBXML errorWithCode:D_TBXML_PARAM_NAME_IS_NIL];
411+
if (error) *error = [TBXML errorWithCode:D_TBXML_PARAM_NAME_IS_NIL];
404412
return nil;
405413
}
406414

@@ -413,7 +421,7 @@ + (TBXMLElement*) childElementNamed:(NSString*)aName parentElement:(TBXMLElement
413421
xmlElement = xmlElement->nextSibling;
414422
}
415423

416-
*error = [TBXML errorWithCode:D_TBXML_ELEMENT_NOT_FOUND];
424+
if (error) *error = [TBXML errorWithCode:D_TBXML_ELEMENT_NOT_FOUND];
417425

418426
return nil;
419427
}
@@ -433,13 +441,13 @@ + (TBXMLElement*) nextSiblingNamed:(NSString*)aName searchFromElement:(TBXMLElem
433441
+ (TBXMLElement*) nextSiblingNamed:(NSString*)aName searchFromElement:(TBXMLElement*)aXMLElement error:(NSError **)error {
434442
// check for nil element
435443
if (nil == aXMLElement) {
436-
*error = [TBXML errorWithCode:D_TBXML_ELEMENT_IS_NIL];
444+
if (error) *error = [TBXML errorWithCode:D_TBXML_ELEMENT_IS_NIL];
437445
return nil;
438446
}
439447

440448
// check for nil name parameter
441449
if (nil == aName) {
442-
*error = [TBXML errorWithCode:D_TBXML_PARAM_NAME_IS_NIL];
450+
if (error) *error = [TBXML errorWithCode:D_TBXML_PARAM_NAME_IS_NIL];
443451
return nil;
444452
}
445453

@@ -452,7 +460,7 @@ + (TBXMLElement*) nextSiblingNamed:(NSString*)aName searchFromElement:(TBXMLElem
452460
xmlElement = xmlElement->nextSibling;
453461
}
454462

455-
*error = [TBXML errorWithCode:D_TBXML_ELEMENT_NOT_FOUND];
463+
if (error) *error = [TBXML errorWithCode:D_TBXML_ELEMENT_NOT_FOUND];
456464

457465
return nil;
458466
}
@@ -572,18 +580,24 @@ + (NSError *) errorWithCode:(int)code userInfo:(NSMutableDictionary *)someUserIn
572580
userInfo:userInfo];
573581
}
574582

575-
- (void) allocateBytesOfLength:(long)length error:(NSError **)error {
583+
- (int) allocateBytesOfLength:(long)length error:(NSError **)error {
576584
bytesLength = length;
577585

586+
NSError *localError = nil;
587+
578588
if(!length) {
579-
*error = [TBXML errorWithCode:D_TBXML_DATA_NIL];
589+
localError = [TBXML errorWithCode:D_TBXML_DATA_NIL];
580590
}
581591

582592
bytes = malloc(bytesLength+1);
583593

584594
if(!bytes) {
585-
*error = [TBXML errorWithCode:D_TBXML_MEMORY_ALLOC_FAILURE];
595+
localError = [TBXML errorWithCode:D_TBXML_MEMORY_ALLOC_FAILURE];
586596
}
597+
598+
if (error) *error = localError;
599+
600+
return localError == nil ? D_TBXML_SUCCESS : [localError code];
587601
}
588602

589603
- (void) decodeBytes {
@@ -865,7 +879,7 @@ - (void) decodeBytes {
865879

866880
// Deallocate used memory
867881
- (void) dealloc {
868-
882+
869883
if (bytes) {
870884
free(bytes);
871885
bytes = nil;
@@ -896,6 +910,10 @@ - (void) dealloc {
896910
currentAttributeBuffer = 0;
897911
}
898912
}
913+
914+
#ifndef ARC_ENABLED
915+
[super dealloc];
916+
#endif
899917
}
900918

901919
- (TBXMLElement*) nextAvailableElement {

Diff for: TBXML-Headers/TBXML+Compression.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
//
3939
// FOUND HERE http://idevkit.com/forums/tutorials-code-samples-sdk/8-nsdata-base64-extension.html
4040
// ================================================================================================
41-
+ (NSData *) dataWithBase64EncodedString:(NSString *) string;
41+
+ (NSData *) newDataWithBase64EncodedString:(NSString *) string;
4242
- (id) initWithBase64EncodedString:(NSString *) string;
4343

4444
- (NSString *) base64Encoding;

Diff for: TBXML-Headers/TBXML+HTTP.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ typedef void (^TBXMLAsyncRequestFailureBlock)(NSData *,NSError *);
2727

2828
@interface TBXML (TBXML_HTTP)
2929

30-
+ (id)tbxmlWithURL:(NSURL*)aURL success:(TBXMLSuccessBlock)successBlock failure:(TBXMLFailureBlock)failureBlock;
30+
+ (id)newTBXMLWithURL:(NSURL*)aURL success:(TBXMLSuccessBlock)successBlock failure:(TBXMLFailureBlock)failureBlock;
3131
- (id)initWithURL:(NSURL*)aURL success:(TBXMLSuccessBlock)successBlock failure:(TBXMLFailureBlock)failureBlock;
3232

3333
@end

0 commit comments

Comments
 (0)