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 + -
显示快捷键?