On 12 Nov 2009, at 14:23, Hank Heijink (Mailinglists) wrote:

> On Nov 12, 2009, at 5:59 AM, Jeremy Pereira wrote:
> 
>>>     for (NSUInteger i = 0; i < nTags; i++) {
>>>             unsigned long pcLength = 0;
>>>             if (getLengthOfMetaData(fileHandle, metadataTags[i], 0, 
>>> &pcLength) != 0) continue;
>> 
>> Religious rant first:
>> 
>> The above line is an abomination in my opinion.  What's wrong with
>> 
>>      if (getLengthOfMetaData(fileHandle, metadataTags[i], 0, &pcLength) == 
>> 0) {
>> 
>>              // rest of loop code
>> 
>>      }
> 
> Matter of taste, in my opinion. There's nothing wrong with your version 
> either.

That's why I prefixed it with "Religious Rant".  I prefer my version because 
the control structure is made explicit i.e. it is obvious at a glance (with 
proper indentation) that all the code below the line with "if" on it is 
conditional.


> 
>>>                     [tempDict setValue:contents forKey:key];
>> 
>> I think this should be    [tempDict setObject:contents forKey:key];
> 
> Why is that? The only difference between setValue:forKey: and 
> setObject:forKey: is that the former uses the latter unless value is nil, in 
> which case the key will be removed. Come to think of it, using 
> setObject:forKey: will give me the advantage of raising an exception if I try 
> to add nil to the dictionary instead of failing silently - I think I'll 
> switch. Thanks!

That shows that one should check the docs before saying something.  I always 
thought setValue:forKey: was only for use with key-value coding but the docs 
for NSMutableDictionary seem to imply you can also use it in the more general 
way as you are doing.


>>>     [tempDict release];
>> 
>> 
>> The other observation I would make is are you sure that getMetadata() 
>> completely fills your buffer from zero to pBuffer, because if it doesn't it 
>> could leave some garbage non ASCII bytes in it.  This, in turn would cause 
>> initWithCString:encoding: to return nil when using the ASCII encoding.  I 
>> would allocate the buffer like this:
>> 
>>      pBuffer = (unsigned char*) calloc(pcLength + 1, sizeof(unsigned char));
>> 
>> which zeros the whole buffer.  Thus copying any amount of non nul ASCII 
>> chars <= pcLength will automatically result in a C string.
> 
> That's a very good point. I'll try that.

I think this is most likely where your issue lies, particularly as it has 
already been pointed out that initWithCString:encoding: gives undefined results 
if the C string is not ASCII encoded.    


> 
> Best,
> Hank
> 


______________________________________________________________________
This email has been scanned by the MessageLabs Email Security System.
For more information please visit http://www.messagelabs.com/email 
______________________________________________________________________
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to