What’s Different in FullFAT 1.1.0

Under General Discussion

Discuss, 1 Comment.

Follow any responses to this entry through the RSS 2.0 feed.

Posted on Saturday, February 20th, 2010 at 5:08 pm

What’s Different in FullFAT 1.1.0

FullFAT 1.1.0 is coming very soon. There have been some huge changes since the 1.0.x series. I’ve tried to ensure that all API’s remain the same, however some have changed their behaviour slightly, to ensure that FullFAT works more consistently. Here is a list of the changes so far:

  • Correct Error Checking
  • All Errors flow right back to the API’s, this means that they must be checked for values < 0.
  • Huge Performance Gains on Directory traversal. (1000x improvement on recursive operations). (40x improvement on dir listing).
  • FF_FindFirst() and FF_FindNext() now accept wildCards. (This beviour can be disabled by commenting FF_FINDAPI_ALLOW_WILDCARDS in ff_config.h out).
    Behaviour of FF_FindFirst() wildCards is explained in the documentation. The comments above FF_FindFirst() in ff_dir.c.
  • UNICODE Support. If FF_UNICODE_SUPPORT is defined in ff_config.h, and LFNs are enabled, then all API’s become UTF-16 accepting.
  • New Demo’s, consistent for Windows and Linux. All examples now use only the public API’s, and are much simpler.
  • FullFAT 1.1.x series must haveĀ at leastĀ 2 sectors of memory. (For 512byte Blocksize, it requires 1K for buffers).
    This requirement is a part of the directory traversal improvements.
    FullFAT 2.0.0 series will remove this requirement.

There may be some other differences not noted here, however they will appear in documentation shortly.

Expect an official release in approximately 1 or 2 weeks time. (Grab from SVN to test).

James

Discuss:

One Response to “What’s Different in FullFAT 1.1.0”

  1. Evghenii Bobrov

    01-Apr-10

    Hi James!
    Sorry for my english!
    I try to use your last trunk version (r349).
    In file ff_dir.c on a line 1790 where are:
    *((FF_T_UINT16 *) &EntryBuffer[FF_FAT_LFN_NAME_1 + x]) = Name[i];
    If you will be use your sources on a processor which require align to word boundary, then error occured.
    Example:
    ///////////////////////////////////////////////////////
    U8 EntryBuffer[32];
    U16 Name[16];
    *((U16*)&EntryBuffer[1]) = Name[0];// error
    ////////////////////////////////////////////////////
    You need to use macros. Something like this:
    #define write16(a,v) (ADR(a)=(U8)(((U16)(v))&0xff), ADR(a+1)=(U8)(((U16)(v))>>8))

Leave a Reply


Some humdrum motto!

© 2009 James Walmsley. All rights reversed. Contact us.