All pastes #977521 Raw Edit

Stuff

public c v1 · immutable
·published 2008-04-08 21:50 UTC
rendered paste body
int fmsGetNextDirEntry(int *dirNum, char* mask, DirEntry* dirEntry, const int dir){    if (mask == 0)        mask = "*.*";    DirEntry buf[16];    int i = 0;    unsigned short curSector = dir == 0 ? 19 : C_2_S(dir);    int unread = 1;    do {        while (i < (*dirNum / 16)) {            // assuming dir is 0 when we're in the root directory            if (dir != 0) {                unsigned short fatEntry = getFatEntry(S_2_C(curSector), FAT1);                if (fatEntry == FAT_EOC)                     return ERR66;                assert(fatEntry != FAT_BAD && fatEntry != 0);                 curSector = C_2_S(fatEntry);            } else {                assert(curSector >= 19 && curSector <=32);                // ok we're traversing the root directory                // so curCluster is actually the sector number                curSector++;                if (curSector> 32) {                    return ERR66;                }                   assert(curSector >= 19 && curSector <=32);            }               i++;            unread = 1;        }           if (unread) {            fmsReadSector(buf, curSector);            unread = 0;        }           DirEntry * e = &buf[*dirNum % 16];        if (e->name[0] == 0)            return ERR66;        *dirEntry = *e;         (*dirNum)++;    } while (dirEntry->attributes & LONGNAME             || !matches_mask(mask, dirEntry) || dirEntry->name[0] == 0xe5);    assert(dirEntry->name[0] != 0xe5);    return 0;}