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

📄 mount_fs.c

📁 早期freebsd实现
💻 C
字号:
/* * Copyright (c) 1990 Jan-Simon Pendry * Copyright (c) 1990 Imperial College of Science, Technology & Medicine * Copyright (c) 1990, 1993 *	The Regents of the University of California.  All rights reserved. * * This code is derived from software contributed to Berkeley by * Jan-Simon Pendry at Imperial College, London. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software *    must display the following acknowledgement: *	This product includes software developed by the University of *	California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors *    may be used to endorse or promote products derived from this software *    without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * *	@(#)mount_fs.c	8.1 (Berkeley) 6/6/93 * * $Id: mount_fs.c,v 5.2.2.2 1992/05/31 16:35:45 jsp Exp $ * */#include "am.h"#ifdef NFS_3typedef nfs_fh fhandle_t;#endif /* NFS_3 */#include <sys/mount.h>#include <sys/stat.h>/* * Standard mount flags */#ifdef hpux/* * HP-UX has an annoying feature of printing * error msgs on /dev/console */#undef M_NOSUID#endif /* hpux */struct opt_tab mnt_flags[] = {	{ "ro", M_RDONLY },#ifdef M_CACHE	{ "nocache", M_NOCACHE },#endif /* M_CACHE */#ifdef M_GRPID	{ "grpid", M_GRPID },#endif /* M_GRPID */#ifdef M_MULTI	{ "multi", M_MULTI },#endif /* M_MULTI */#ifdef M_NODEV	{ "nodev", M_NODEV },#endif /* M_NODEV */#ifdef M_NOEXEC	{ "noexec", M_NOEXEC },#endif /* M_NOEXEC */#ifdef M_NOSUB	{ "nosub", M_NOSUB },#endif /* M_NOSUB */#ifdef M_NOSUID	{ "nosuid", M_NOSUID },#endif /* M_NOSUID */#ifdef M_SYNC	{ "sync", M_SYNC },#endif /* M_SYNC */	{ 0, 0 }};int compute_mount_flags(mnt)struct mntent *mnt;{	struct opt_tab *opt;	int flags;#ifdef NFS_4	flags = M_NEWTYPE;#else	flags = 0;#endif /* NFS_4 */	/*	 * Crack basic mount options	 */	for (opt = mnt_flags; opt->opt; opt++)		flags |= hasmntopt(mnt, opt->opt) ? opt->flag : 0;	return flags;}int mount_fs P((struct mntent *mnt, int flags, caddr_t mnt_data, int retry, MTYPE_TYPE type));int mount_fs(mnt, flags, mnt_data, retry, type)struct mntent *mnt;int flags;caddr_t mnt_data;int retry;MTYPE_TYPE type;{	int error = 0;#ifdef MNTINFO_DEV	struct stat stb;	char *xopts = 0;#endif /* MNTINFO_DEV */#ifdef DEBUG#ifdef NFS_4	dlog("%s fstype %s (%s) flags %#x (%s)",		mnt->mnt_dir, type, mnt->mnt_type, flags, mnt->mnt_opts);#else	dlog("%s fstype %d (%s) flags %#x (%s)",		mnt->mnt_dir, type, mnt->mnt_type, flags, mnt->mnt_opts);#endif /* NFS_4 */#endif /* DEBUG */	/*	 * Fake some mount table entries for the automounter	 */#ifdef FASCIST_DF_COMMAND	/*	 * Some systems have a df command which blows up when	 * presented with an unknown mount type.	 */	if (STREQ(mnt->mnt_type, MNTTYPE_AUTO)) {		/*		 * Try it with the normal name		 */		mnt->mnt_type = FASCIST_DF_COMMAND;	}#endif /* FASCIST_DF_COMMAND */again:	clock_valid = 0;	error = MOUNT_TRAP(type, mnt, flags, mnt_data);	if (error < 0)		plog(XLOG_ERROR, "%s: mount: %m", mnt->mnt_dir);	if (error < 0 && --retry > 0) {		sleep(1);		goto again;	}	if (error < 0) {#ifdef notdef		if (automount)			going_down(errno);#endif		return errno;	}#ifdef UPDATE_MTAB#ifdef MNTINFO_DEV	/*	 * Add the extra dev= field to the mount table.	 */	if (lstat(mnt->mnt_dir, &stb) == 0) {		char *zopts = (char *) xmalloc(strlen(mnt->mnt_opts) + 32);		xopts = mnt->mnt_opts;		if (sizeof(stb.st_dev) == 2) {			/* e.g. SunOS 4.1 */			sprintf(zopts, "%s,%s=%s%04lx", xopts, MNTINFO_DEV,					MNTINFO_PREF, (u_long) stb.st_dev & 0xffff);		} else {			/* e.g. System Vr4 */			sprintf(zopts, "%s,%s=%s%08lx", xopts, MNTINFO_DEV,					MNTINFO_PREF, (u_long) stb.st_dev);		}		mnt->mnt_opts = zopts;	}#endif /* MNTINFO_DEV */#ifdef FIXUP_MNTENT	/*	 * Additional fields in struct mntent	 * are fixed up here	 */	FIXUP_MNTENT(mnt);#endif	write_mntent(mnt);#ifdef MNTINFO_DEV	if (xopts) {		free(mnt->mnt_opts);		mnt->mnt_opts = xopts;	}#endif /* MNTINFO_DEV */#endif /* UPDATE_MTAB */	return 0;}#ifdef NEED_MNTOPT_PARSER/* * Some systems don't provide these to the user, * but amd needs them, so... * * From: Piete Brooks <pb@cl.cam.ac.uk> */#include <ctype.h>static char *nextmntopt(p)char **p;{	char *cp = *p;	char *rp;	/*	 * Skip past white space	 */	while (*cp && isspace(*cp))		cp++;	/*	 * Word starts here	 */	rp = cp;	/*	 * Scan to send of string or separator	 */	while (*cp && *cp != ',')		cp++;	/*	 * If separator found the overwrite with nul char.	 */	if (*cp) {		*cp = '\0';		cp++;	}	/*	 * Return value for next call	 */	*p = cp;	return rp;}char *hasmntopt(mnt, opt)struct mntent *mnt;char *opt;{	char t[MNTMAXSTR];	char *f;	char *o = t;	int l = strlen(opt);	strcpy(t, mnt->mnt_opts);	while (*(f = nextmntopt(&o)))		if (strncmp(opt, f, l) == 0)			return f - t + mnt->mnt_opts;	return 0;}#endif /* NEED_MNTOPT_PARSER */#ifdef MOUNT_HELPER_SOURCE#include MOUNT_HELPER_SOURCE#endif /* MOUNT_HELPER_SOURCE */

⌨️ 快捷键说明

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