📄 record.c
字号:
d_fetchsw(&pdata, &data->u.dir.dirFndrInfo.frComment); d_fetchsl(&pdata, &data->u.dir.dirFndrInfo.frPutAway); for (i = 0; i < 4; ++i) d_fetchsl(&pdata, &data->u.dir.dirResrv[i]); break; case cdrFilRec: d_fetchsb(&pdata, &data->u.fil.filFlags); d_fetchsb(&pdata, &data->u.fil.filTyp); d_fetchsl(&pdata, &data->u.fil.filUsrWds.fdType); d_fetchsl(&pdata, &data->u.fil.filUsrWds.fdCreator); d_fetchsw(&pdata, &data->u.fil.filUsrWds.fdFlags); d_fetchsw(&pdata, &data->u.fil.filUsrWds.fdLocation.v); d_fetchsw(&pdata, &data->u.fil.filUsrWds.fdLocation.h); d_fetchsw(&pdata, &data->u.fil.filUsrWds.fdFldr); d_fetchul(&pdata, &data->u.fil.filFlNum); d_fetchuw(&pdata, &data->u.fil.filStBlk); d_fetchul(&pdata, &data->u.fil.filLgLen); d_fetchul(&pdata, &data->u.fil.filPyLen); d_fetchuw(&pdata, &data->u.fil.filRStBlk); d_fetchul(&pdata, &data->u.fil.filRLgLen); d_fetchul(&pdata, &data->u.fil.filRPyLen); d_fetchsl(&pdata, &data->u.fil.filCrDat); d_fetchsl(&pdata, &data->u.fil.filMdDat); d_fetchsl(&pdata, &data->u.fil.filBkDat); d_fetchsw(&pdata, &data->u.fil.filFndrInfo.fdIconID); for (i = 0; i < 4; ++i) d_fetchsw(&pdata, &data->u.fil.filFndrInfo.fdUnused[i]); d_fetchsw(&pdata, &data->u.fil.filFndrInfo.fdComment); d_fetchsl(&pdata, &data->u.fil.filFndrInfo.fdPutAway); d_fetchuw(&pdata, &data->u.fil.filClpSize); for (i = 0; i < 3; ++i) { d_fetchuw(&pdata, &data->u.fil.filExtRec[i].xdrStABN); d_fetchuw(&pdata, &data->u.fil.filExtRec[i].xdrNumABlks); } for (i = 0; i < 3; ++i) { d_fetchuw(&pdata, &data->u.fil.filRExtRec[i].xdrStABN); d_fetchuw(&pdata, &data->u.fil.filRExtRec[i].xdrNumABlks); } d_fetchsl(&pdata, &data->u.fil.filResrv); break; case cdrThdRec: for (i = 0; i < 2; ++i) d_fetchsl(&pdata, &data->u.dthd.thdResrv[i]); d_fetchul(&pdata, &data->u.dthd.thdParID); d_fetchstr(&pdata, data->u.dthd.thdCName, sizeof(data->u.dthd.thdCName)); break; case cdrFThdRec: for (i = 0; i < 2; ++i) d_fetchsl(&pdata, &data->u.fthd.fthdResrv[i]); d_fetchul(&pdata, &data->u.fthd.fthdParID); d_fetchstr(&pdata, data->u.fthd.fthdCName, sizeof(data->u.fthd.fthdCName)); break; default: ASSERT(0); }}/* * NAME: record->packextdata() * DESCRIPTION: pack extent record data */void r_packextdata(const ExtDataRec *data, byte *pdata, unsigned int *len){ const byte *start = pdata; int i; for (i = 0; i < 3; ++i) { d_storeuw(&pdata, (*data)[i].xdrStABN); d_storeuw(&pdata, (*data)[i].xdrNumABlks); } if (len) *len += pdata - start;}/* * NAME: record->unpackextdata() * DESCRIPTION: unpack extent record data */void r_unpackextdata(const byte *pdata, ExtDataRec *data){ int i; for (i = 0; i < 3; ++i) { d_fetchuw(&pdata, &(*data)[i].xdrStABN); d_fetchuw(&pdata, &(*data)[i].xdrNumABlks); }}/* * NAME: record->makecatkey() * DESCRIPTION: construct a catalog record key */void r_makecatkey(CatKeyRec *key, unsigned long parid, const char *name){ int len; len = strlen(name) + 1; key->ckrKeyLen = 0x05 + len + (len & 1); key->ckrResrv1 = 0; key->ckrParID = parid; strcpy(key->ckrCName, name);}/* * NAME: record->makeextkey() * DESCRIPTION: construct an extents record key */void r_makeextkey(ExtKeyRec *key, int fork, unsigned long fnum, unsigned int fabn){ key->xkrKeyLen = 0x07; key->xkrFkType = fork; key->xkrFNum = fnum; key->xkrFABN = fabn;}/* * NAME: record->packcatrec() * DESCRIPTION: create a packed catalog record */void r_packcatrec(const CatKeyRec *key, const CatDataRec *data, byte *precord, unsigned int *len){ r_packcatkey(key, precord, len); r_packcatdata(data, HFS_RECDATA(precord), len);}/* * NAME: record->packextrec() * DESCRIPTION: create a packed extents record */void r_packextrec(const ExtKeyRec *key, const ExtDataRec *data, byte *precord, unsigned int *len){ r_packextkey(key, precord, len); r_packextdata(data, HFS_RECDATA(precord), len);}/* * NAME: record->packdirent() * DESCRIPTION: make changes to a catalog record */void r_packdirent(CatDataRec *data, const hfsdirent *ent){ switch (data->cdrType) { case cdrDirRec: data->u.dir.dirCrDat = d_mtime(ent->crdate); data->u.dir.dirMdDat = d_mtime(ent->mddate); data->u.dir.dirBkDat = d_mtime(ent->bkdate); data->u.dir.dirUsrInfo.frFlags = ent->fdflags; data->u.dir.dirUsrInfo.frLocation.v = ent->fdlocation.v; data->u.dir.dirUsrInfo.frLocation.h = ent->fdlocation.h; data->u.dir.dirUsrInfo.frRect.top = ent->u.dir.rect.top; data->u.dir.dirUsrInfo.frRect.left = ent->u.dir.rect.left; data->u.dir.dirUsrInfo.frRect.bottom = ent->u.dir.rect.bottom; data->u.dir.dirUsrInfo.frRect.right = ent->u.dir.rect.right; break; case cdrFilRec: if (ent->flags & HFS_ISLOCKED) data->u.fil.filFlags |= (1 << 0); else data->u.fil.filFlags &= ~(1 << 0); data->u.fil.filCrDat = d_mtime(ent->crdate); data->u.fil.filMdDat = d_mtime(ent->mddate); data->u.fil.filBkDat = d_mtime(ent->bkdate); data->u.fil.filUsrWds.fdFlags = ent->fdflags; data->u.fil.filUsrWds.fdLocation.v = ent->fdlocation.v; data->u.fil.filUsrWds.fdLocation.h = ent->fdlocation.h; data->u.fil.filUsrWds.fdType = d_getsl((const unsigned char *) ent->u.file.type); data->u.fil.filUsrWds.fdCreator = d_getsl((const unsigned char *) ent->u.file.creator); break; }}/* * NAME: record->unpackdirent() * DESCRIPTION: unpack catalog information into hfsdirent structure */void r_unpackdirent(unsigned long parid, const char *name, const CatDataRec *data, hfsdirent *ent){ strcpy(ent->name, name); ent->parid = parid; switch (data->cdrType) { case cdrDirRec: ent->flags = HFS_ISDIR; ent->cnid = data->u.dir.dirDirID; ent->crdate = d_ltime(data->u.dir.dirCrDat); ent->mddate = d_ltime(data->u.dir.dirMdDat); ent->bkdate = d_ltime(data->u.dir.dirBkDat); ent->fdflags = data->u.dir.dirUsrInfo.frFlags; ent->fdlocation.v = data->u.dir.dirUsrInfo.frLocation.v; ent->fdlocation.h = data->u.dir.dirUsrInfo.frLocation.h; ent->u.dir.valence = data->u.dir.dirVal; ent->u.dir.rect.top = data->u.dir.dirUsrInfo.frRect.top; ent->u.dir.rect.left = data->u.dir.dirUsrInfo.frRect.left; ent->u.dir.rect.bottom = data->u.dir.dirUsrInfo.frRect.bottom; ent->u.dir.rect.right = data->u.dir.dirUsrInfo.frRect.right; break; case cdrFilRec: ent->flags = (data->u.fil.filFlags & (1 << 0)) ? HFS_ISLOCKED : 0; ent->cnid = data->u.fil.filFlNum; ent->crdate = d_ltime(data->u.fil.filCrDat); ent->mddate = d_ltime(data->u.fil.filMdDat); ent->bkdate = d_ltime(data->u.fil.filBkDat); ent->fdflags = data->u.fil.filUsrWds.fdFlags; ent->fdlocation.v = data->u.fil.filUsrWds.fdLocation.v; ent->fdlocation.h = data->u.fil.filUsrWds.fdLocation.h; ent->u.file.dsize = data->u.fil.filLgLen; ent->u.file.rsize = data->u.fil.filRLgLen; d_putsl((unsigned char *) ent->u.file.type, data->u.fil.filUsrWds.fdType); d_putsl((unsigned char *) ent->u.file.creator, data->u.fil.filUsrWds.fdCreator); ent->u.file.type[4] = ent->u.file.creator[4] = 0; break; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -