⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 desktop.c

📁 创建一个符合iso-9660标准的iso文件系统
💻 C
字号:
/* @(#)desktop.c	1.2 00/04/27 joerg, Copyright 1997, 1998, 1999, 2000 James Pearson */#ifndef lintstatic	char sccsid[] =	"@(#)desktop.c	1.2 00/04/27 joerg, Copyright 1997, 1998, 1999, 2000 James Pearson";#endif/* *      Copyright (c) 1997, 1998, 1999, 2000 James Pearson * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING.  If not, write to * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. *//* *	make_desktop: create "Desktop DB" and "Desktop DF" files. * *	These are set up to prevent the Mac "rebuilding the desktop" *	when the CD is inserted ??? * *	I don't know if these files should be populated, but I've just *	created these files in their initial states: * *	Desktop DB:	Initial size == volume's clump size *			first block contents found by using od ... *			rest of file seems to be padding *			No resource fork * *	Desktop DF:	Empty * *	If the files already exist, then set correct type/creator/flags * *	James Pearson 11/8/97 *	Adapted from mkhfs routines for mkhybrid */#ifdef APPLE_HYB#include <mconfig.h>#include <strdefs.h>#include "mkisofs.h"#define	DB	"Desktop DB"#define DBFC	"DMGR"#define DBT	"BTFL"#define	DF	"Desktop DF"#define DFT	"DTFL"/* * from "data.h" - libhfs routines */extern	void d_putw	__PR((unsigned char *, short));extern	void d_putl	__PR((unsigned char *, long));int	make_desktop	__PR((hfsvol *vol, int end));extern	hce_mem *hce;	/* libhfs/mkisofs extras */intmake_desktop(vol, end)	hfsvol	*vol;	int	end;{	hfsfile		*hfp;			/* Mac file */	hfsdirent	ent;			/* Mac finderinfo */	unsigned short	clps;			/* clump size */	unsigned short	blks;			/* blocks in a clump */	unsigned char	*blk;			/* user data */	/*	 * set up default directory entries - not all these fields are needed,	 * but we'll set them up anyway ...	 */	ent.u.file.rsize = 0;				/* resource size == 0 */	strcpy(ent.u.file.creator, DBFC);		/* creator */	strcpy(ent.u.file.type, DBT);			/* type */	ent.crdate = ent.mddate = time(0);	/* date is now */	ent.fdflags = HFS_FNDR_ISINVISIBLE;	/* invisible files */	/*	 * clear the DB file	 */	blk = hce->hfs_ce + hce->hfs_ce_size * HFS_BLOCKSZ;	blks = hce->hfs_dt_size;	clps = blks * HFS_BLOCKSZ;	memset(blk, 0, clps);	/*	 * create "Desktop DB" (if it doesn't exist)	 */	if (hfs_create(vol, DB, ent.u.file.type, ent.u.file.creator) == 0) {		/*		 * DB file size from hce_mem info		 * set up "Desktop DB" data - following found by od'ing the		 * "Desktop DB" file		 */		d_putw(blk + 8, 0x100);		d_putw(blk + 10, 0x3);		d_putw(blk + 32, 0x200);		d_putw(blk + 34, 0x25);		d_putl(blk + 36, blks);		d_putl(blk + 40, blks - 1);		d_putw(blk + 48, clps);		d_putw(blk + 50, 0xff);		d_putw(blk + 120, 0x20a);		d_putw(blk + 122, 0x100);		d_putw(blk + 248, 0x8000);		d_putl(blk + 504, 0x1f800f8);		d_putl(blk + 508, 0x78000e);		/* entries for "Desktop DB" */		ent.u.file.dsize = clps;	/* size = clump size */		/* open file */		if ((hfp = hfs_open(vol, DB)) == 0)			perr(hfs_error);		/* "write" file */		write_fork(hfp, clps);		/* set DB file attributes */		if (hfs_fsetattr(hfp, &ent) < 0)			perr(hfs_error);		/* find the real start of the file */		end += hce->hfs_ce_size;		/* close DB file */		if (hfs_close(hfp, end, 0) < 0)			perr(hfs_error);	} else {		/*		 * if it already exists, then make sure it has the correct		 * type/creator and flags		 */		if (hfs_setattr(vol, DB, &ent) < 0)			perr(hfs_error);	}	 /* setup "Desktop DF" file as an empty file */	strcpy(ent.u.file.type, DFT);		/* type */	ent.u.file.dsize = 0;			/* empty */	/* create DF file (if it doesn't exist) - no need to open it */	hfs_create(vol, DF, ent.u.file.type, ent.u.file.creator);	/* set DB file attributes */	if (hfs_setattr(vol, DF, &ent) < 0)		perr(hfs_error);	return (0);}#endif	/* APPLE_HYB */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -