record.c
来自「创建一个符合iso-9660标准的iso文件系统」· C语言 代码 · 共 576 行 · 第 1/2 页
C
576 行
d_fetchw(&pdata, &data->u.dir.dirUsrInfo.frRect.bottom); d_fetchw(&pdata, &data->u.dir.dirUsrInfo.frRect.right); d_fetchw(&pdata, &data->u.dir.dirUsrInfo.frFlags); d_fetchw(&pdata, &data->u.dir.dirUsrInfo.frLocation.v); d_fetchw(&pdata, &data->u.dir.dirUsrInfo.frLocation.h); d_fetchw(&pdata, &data->u.dir.dirUsrInfo.frView); d_fetchw(&pdata, &data->u.dir.dirFndrInfo.frScroll.v); d_fetchw(&pdata, &data->u.dir.dirFndrInfo.frScroll.h); d_fetchl(&pdata, &data->u.dir.dirFndrInfo.frOpenChain); d_fetchw(&pdata, &data->u.dir.dirFndrInfo.frUnused); d_fetchw(&pdata, &data->u.dir.dirFndrInfo.frComment); d_fetchl(&pdata, &data->u.dir.dirFndrInfo.frPutAway); for (i = 0; i < 4; ++i) d_fetchl(&pdata, &data->u.dir.dirResrv[i]); break; case cdrFilRec: d_fetchb(&pdata, (char *) &data->u.fil.filFlags); d_fetchb(&pdata, (char *) &data->u.fil.filTyp); d_fetchl(&pdata, &data->u.fil.filUsrWds.fdType); d_fetchl(&pdata, &data->u.fil.filUsrWds.fdCreator); d_fetchw(&pdata, &data->u.fil.filUsrWds.fdFlags); d_fetchw(&pdata, &data->u.fil.filUsrWds.fdLocation.v); d_fetchw(&pdata, &data->u.fil.filUsrWds.fdLocation.h); d_fetchw(&pdata, &data->u.fil.filUsrWds.fdFldr); d_fetchl(&pdata, (long *) &data->u.fil.filFlNum); d_fetchw(&pdata, (short *) &data->u.fil.filStBlk); d_fetchl(&pdata, (long *) &data->u.fil.filLgLen); d_fetchl(&pdata, (long *) &data->u.fil.filPyLen); d_fetchw(&pdata, (short *) &data->u.fil.filRStBlk); d_fetchl(&pdata, (long *) &data->u.fil.filRLgLen); d_fetchl(&pdata, (long *) &data->u.fil.filRPyLen); d_fetchl(&pdata, &data->u.fil.filCrDat); d_fetchl(&pdata, &data->u.fil.filMdDat); d_fetchl(&pdata, &data->u.fil.filBkDat); d_fetchw(&pdata, &data->u.fil.filFndrInfo.fdIconID); for (i = 0; i < 4; ++i) d_fetchw(&pdata, &data->u.fil.filFndrInfo.fdUnused[i]); d_fetchw(&pdata, &data->u.fil.filFndrInfo.fdComment); d_fetchl(&pdata, &data->u.fil.filFndrInfo.fdPutAway); d_fetchw(&pdata, (short *) &data->u.fil.filClpSize); for (i = 0; i < 3; ++i) { d_fetchw(&pdata, (short *) &data->u.fil.filExtRec[i].xdrStABN); d_fetchw(&pdata, (short *) &data->u.fil.filExtRec[i].xdrNumABlks); } for (i = 0; i < 3; ++i) { d_fetchw(&pdata, (short *) &data->u.fil.filRExtRec[i].xdrStABN); d_fetchw(&pdata, (short *) &data->u.fil.filRExtRec[i].xdrNumABlks); } d_fetchl(&pdata, &data->u.fil.filResrv); break; case cdrThdRec: for (i = 0; i < 2; ++i) d_fetchl(&pdata, &data->u.dthd.thdResrv[i]); d_fetchl(&pdata, (long *) &data->u.dthd.thdParID); d_fetchs(&pdata, data->u.dthd.thdCName, sizeof(data->u.dthd.thdCName)); break; case cdrFThdRec: for (i = 0; i < 2; ++i) d_fetchl(&pdata, &data->u.fthd.fthdResrv[i]); d_fetchl(&pdata, (long *) &data->u.fthd.fthdParID); d_fetchs(&pdata, data->u.fthd.fthdCName, sizeof(data->u.fthd.fthdCName)); break; default: abort(); }}/* * NAME: record->packextdata() * DESCRIPTION: pack extent record data */void r_packextdata(data, pdata, len) ExtDataRec *data; unsigned char *pdata; int *len;{ unsigned char *start = pdata; int i; for (i = 0; i < 3; ++i) { d_storew(&pdata, (*data)[i].xdrStABN); d_storew(&pdata, (*data)[i].xdrNumABlks); } if (len) *len += pdata - start;}/* * NAME: record->unpackextdata() * DESCRIPTION: unpack extent record data */void r_unpackextdata(pdata, data) unsigned char *pdata; ExtDataRec *data;{ int i; for (i = 0; i < 3; ++i) { d_fetchw(&pdata, (short *) &(*data)[i].xdrStABN); d_fetchw(&pdata, (short *) &(*data)[i].xdrNumABlks); }}/* * NAME: record->makecatkey() * DESCRIPTION: construct a catalog record key */void r_makecatkey(key, parid, name) CatKeyRec *key; long parid; 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(key, ffork, fnum, fabn) ExtKeyRec *key; int ffork; long fnum; unsigned int fabn;{ key->xkrKeyLen = 0x07; key->xkrFkType = ffork; key->xkrFNum = fnum; key->xkrFABN = fabn;}/* * NAME: record->unpackdirent() * DESCRIPTION: unpack catalog information into hfsdirent structure * * Taken fron v3.2.6 */void r_unpackdirent(parid, name, data, ent) long parid; char *name; 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_toutime(data->u.dir.dirCrDat); ent->mddate = d_toutime(data->u.dir.dirMdDat); ent->bkdate = d_toutime(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; /* mkhybrid extra */ ent->u.dir.frscroll.v = data->u.dir.dirFndrInfo.frScroll.v; ent->u.dir.frscroll.h = data->u.dir.dirFndrInfo.frScroll.h; ent->u.dir.view = data->u.dir.dirUsrInfo.frView; break; case cdrFilRec: ent->flags = (data->u.fil.filFlags & (1 << 0)) ? HFS_ISLOCKED : 0; ent->cnid = data->u.fil.filFlNum; ent->crdate = d_toutime(data->u.fil.filCrDat); ent->mddate = d_toutime(data->u.fil.filMdDat); ent->bkdate = d_toutime(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_putl((unsigned char *) ent->u.file.type, data->u.fil.filUsrWds.fdType); d_putl((unsigned char *) ent->u.file.creator, data->u.fil.filUsrWds.fdCreator); ent->u.file.type[4] = ent->u.file.creator[4] = 0; break; }}/* * NAME: record->packdirent() * DESCRIPTION: make changes to a catalog record * * Taken fron v3.2.6 */void r_packdirent(data, ent) CatDataRec *data; hfsdirent *ent;{ switch (data->cdrType) { case cdrDirRec: data->u.dir.dirCrDat = d_tomtime(ent->crdate); data->u.dir.dirMdDat = d_tomtime(ent->mddate); data->u.dir.dirBkDat = d_tomtime(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; /* mkhybrid extra */ data->u.dir.dirFndrInfo.frScroll.v = ent->u.dir.frscroll.v; data->u.dir.dirFndrInfo.frScroll.h = ent->u.dir.frscroll.h; data->u.dir.dirUsrInfo.frView = ent->u.dir.view; 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_tomtime(ent->crdate); data->u.fil.filMdDat = d_tomtime(ent->mddate); data->u.fil.filBkDat = d_tomtime(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_getl((unsigned char *) ent->u.file.type); data->u.fil.filUsrWds.fdCreator = d_getl((unsigned char *) ent->u.file.creator); break; }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?