@@ -1378,10 +1378,11 @@ lossy: (bool)lossy { size_t length = self.length; char *cString; size_t cStringLength; + const char *ret; switch (encoding) { case OFStringEncodingUTF8: cString = OFAllocMemory((length * 4) + 1, 1); @@ -1432,17 +1433,19 @@ default: @throw [OFInvalidEncodingException exception]; } @try { - return [[OFData dataWithItemsNoCopy: cString - count: cStringLength + 1 - freeWhenDone: true] items]; + ret = [[OFData dataWithItemsNoCopy: cString + count: cStringLength + 1 + freeWhenDone: true] items]; } @catch (id e) { OFFreeMemory(cString); @throw e; } + + return ret; } - (const char *)cStringWithEncoding: (OFStringEncoding)encoding { return [self of_cStringWithEncoding: encoding lossy: false]; @@ -2537,23 +2540,26 @@ - (const OFUnichar *)characters { size_t length = self.length; OFUnichar *buffer; + const OFUnichar *ret; buffer = OFAllocMemory(length, sizeof(OFUnichar)); @try { [self getCharacters: buffer inRange: OFRangeMake(0, length)]; - return [[OFData dataWithItemsNoCopy: buffer - count: length - itemSize: sizeof(OFUnichar) - freeWhenDone: true] items]; + ret = [[OFData dataWithItemsNoCopy: buffer + count: length + itemSize: sizeof(OFUnichar) + freeWhenDone: true] items]; } @catch (id e) { OFFreeMemory(buffer); @throw e; } + + return ret; } - (const OFChar16 *)UTF16String { return [self UTF16StringWithByteOrder: OFByteOrderNative]; @@ -2565,10 +2571,11 @@ const OFUnichar *characters = self.characters; size_t length = self.length; OFChar16 *buffer; size_t j; bool swap = (byteOrder != OFByteOrderNative); + const OFChar16 *ret; /* Allocate memory for the worst case */ buffer = OFAllocMemory((length + 1) * 2, sizeof(OFChar16)); j = 0; @@ -2606,18 +2613,20 @@ } objc_autoreleasePoolPop(pool); @try { - return [[OFData dataWithItemsNoCopy: buffer - count: j + 1 - itemSize: sizeof(OFChar16) - freeWhenDone: true] items]; + ret = [[OFData dataWithItemsNoCopy: buffer + count: j + 1 + itemSize: sizeof(OFChar16) + freeWhenDone: true] items]; } @catch (id e) { OFFreeMemory(buffer); @throw e; } + + return ret; } - (size_t)UTF16StringLength { const OFUnichar *characters = self.characters; @@ -2639,10 +2648,11 @@ - (const OFChar32 *)UTF32StringWithByteOrder: (OFByteOrder)byteOrder { size_t length = self.length; OFChar32 *buffer; + const OFChar32 *ret; buffer = OFAllocMemory(length + 1, sizeof(OFChar32)); @try { [self getCharacters: buffer inRange: OFRangeMake(0, length)]; buffer[length] = 0; @@ -2649,18 +2659,20 @@ if (byteOrder != OFByteOrderNative) for (size_t i = 0; i < length; i++) buffer[i] = OFByteSwap32(buffer[i]); - return [[OFData dataWithItemsNoCopy: buffer - count: length + 1 - itemSize: sizeof(OFChar32) - freeWhenDone: true] items]; + ret = [[OFData dataWithItemsNoCopy: buffer + count: length + 1 + itemSize: sizeof(OFChar32) + freeWhenDone: true] items]; } @catch (id e) { OFFreeMemory(buffer); @throw e; } + + return ret; } - (OFData *)dataWithEncoding: (OFStringEncoding)encoding { void *pool = objc_autoreleasePoolPush();