• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: problem with applying md5 to data
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: problem with applying md5 to data


  • Subject: Re: problem with applying md5 to data
  • From: Wilker <email@hidden>
  • Date: Wed, 29 Jun 2011 15:32:41 -0300

Thanks again Quincey.

Just for curiousity, if I do the line:

 const uint8_t* buffer = [fileData bytes];

it will not read the entire file? or these address are pointed direct on
disk so they are load on demand?
also, just to mean if I understand here:

CC_MD5_Update(&md5, buffer + byteOffset, byteLength);

in the sum "buffer + byteOffset", in case, adding a number to an array
pointer will change it offset?
---
Wilker LĂșcio
http://about.me/wilkerlucio/bio
Kajabi Consultant
+55 81 82556600



On Wed, Jun 29, 2011 at 2:53 PM, Quincey Morris <email@hidden
> wrote:

> On Jun 29, 2011, at 07:08, Wilker wrote:
>
> >     char buffer[CHUNK_SIZE];
>
> >     [fileData getBytes:buffer range:NSMakeRange(0, CHUNK_SIZE)];
> >     CC_MD5_Update(&md5, buffer, CHUNK_SIZE);
> >     [fileData getBytes:buffer range:NSMakeRange(MAX(0, [fileData length]
> - CHUNK_SIZE), CHUNK_SIZE)];
> >     CC_MD5_Update(&md5, buffer, CHUNK_SIZE);
>
> Personally, having tried to get the file reads as cheaply as possible**,
> I'd just do this:
>
>        const uint8_t* buffer = [fileData bytes];
>        // calculate byteLength and byteOffset (see below)
>
>        CC_MD5_Update(&md5, buffer, byteLength);
>        CC_MD5_Update(&md5, buffer + byteOffset, byteLength);
>
>        [fileData self];
>
> to avoid copying the raw data unnecessarily.
>
> Your code still has the bug in the MAX parameters (if [fileData length] >
> CHUNK_SIZE, then [fileData length] - CHUNK_SIZE is a *very* large positive
> number), and you've introduced a new one -- 'getBytes:range:' will crash if
> the range goes past the end of the NSData data, so I'd calculate the length
> and offset like this:
>
>        NSUInteger byteLength = [fileData length];
>        NSUInteger byteOffset = 0;
>
>        if (byteLength > CHUNK_SIZE) { // ***
>                byteLength = CHUNK_SIZE;
>                byteOffset = byteLength - CHUNK_SIZE;
>        }
>
>
>
> ** There are some drawbacks to using very large stack-based structures. At
> least:
>
> a. If this code is ever part of a background thread, the default maximum
> stack size isn't large enough to accommodate 65K data structures.
>
> b. If this is running under garbage collection, the collector must scan the
> entire 65K every time it runs, uselessly and wastefully.
>
> What's the usual way to solve these problems? To move the data structure
> off the stack into the heap. But you already have the data in the heap, in
> your NSData object.
>
> *** Someone once pointed out on this list that you should never use MIN and
> MAX (and other such convenience macros) in production code, because you are
> never quite certain how they're implemented (in terms of handling mismatched
> sign expressions, for example) and how they might be implemented on some
> future platform you might want to port this code to. Therefore, he said, you
> should write the code you want, not hope for the code you need. I think
> maybe his point was a little obsessive, but I have to admit I now cringe and
> hesitate before writing MIN or MAX. :)
_______________________________________________

Cocoa-dev mailing list (email@hidden)

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:

This email sent to email@hidden

  • Follow-Ups:
    • Re: problem with applying md5 to data
      • From: Quincey Morris <email@hidden>
References: 
 >problem with applying md5 to data (From: Wilker <email@hidden>)
 >Re: problem with applying md5 to data (From: Quincey Morris <email@hidden>)
 >Re: problem with applying md5 to data (From: Quincey Morris <email@hidden>)
 >Re: problem with applying md5 to data (From: Wilker <email@hidden>)
 >Re: problem with applying md5 to data (From: Wilker <email@hidden>)
 >Re: problem with applying md5 to data (From: Quincey Morris <email@hidden>)

  • Prev by Date: Re: Properties, Attributes and Retain+Autorelease
  • Next by Date: Re: Properties, Attributes and Retain+Autorelease
  • Previous by thread: Re: problem with applying md5 to data
  • Next by thread: Re: problem with applying md5 to data
  • Index(es):
    • Date
    • Thread