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

📄 nse_mtab.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
字号:
#ifndef lintstatic char sccsid[] = "@(#)nse_mtab.c 1.1 92/07/30 Copyr 1988 Sun Micro";#endif/* * Copyright (c) 1987 Sun Microsystems, Inc. */#include <nse/param.h>#include <sys/fcntl.h>#include <errno.h>#include <stdio.h>#include <strings.h>#include <netdb.h>#include <mntent.h>#include <nse/util.h>/* * Procedures to add/remove mount entries from /etc/mtab. */Nse_err		nse_mtab_read();Nse_err		nse_mtab_add();Nse_err		nse_mtab_remove();void		nse_mntent_destroy();Nse_list	nse_mtablist_create();static Nse_err	add_mount_entry();static void	remove_from_mntlist();Nse_errnse_mtab_read(mntlistp)	Nse_list	*mntlistp;{	FILE		*realmnt;	struct mntent	*mnt;	realmnt = setmntent(MOUNTED, "r");	if (realmnt == NULL) {		perror(MOUNTED);		return nse_err_format_errno("Setmntent");	}	*mntlistp = nse_mtablist_create();	while ((mnt = getmntent(realmnt)) != NULL) {		(void) nse_list_add_new_copy(*mntlistp, mnt);	}	(void) endmntent(realmnt);	return NULL;}/* * Write contents of mntlist into /etc/mtab */Nse_errnse_mtab_add(mntlist)	Nse_list	mntlist;{	FILE		*mnted;	Nse_err		err;	mnted = setmntent(MOUNTED, "r+");	if (mnted == NULL) {		return nse_err_format_errno("Setmntent");	}	err = (Nse_err) nse_list_iterate_or(mntlist, add_mount_entry, mnted);	(void) endmntent(mnted);	return err;}/* * Remove entries in mntlist from /etc/mtab. */Nse_errnse_mtab_remove(mntlist)	Nse_list	mntlist;{	FILE		*realmnt;	Nse_list	realmntlist;	struct mntent	*mnt;	realmnt = setmntent(MOUNTED, "r+");	if (realmnt == NULL) {		perror(MOUNTED);		return nse_err_format_errno("Setmntent");	}	realmntlist = nse_mtablist_create();	while ((mnt = getmntent(realmnt)) != NULL) {		(void) nse_list_add_new_copy(realmntlist, mnt);	}	nse_list_iterate(mntlist, remove_from_mntlist, realmntlist);	/*	 * Build new mtab by walking mnt list	 */	nse_fftruncate(realmnt);	nse_list_iterate(realmntlist, add_mount_entry, realmnt);	(void) endmntent(realmnt);	nse_list_destroy(realmntlist);	return NULL;}static Nse_erradd_mount_entry(mnt, mnted)	struct mntent	*mnt;	FILE		*mnted;{	if (addmntent(mnted, mnt)) {		return nse_err_format_errno("Addmntent");	} else {		return NULL;	}}/* * Remove the entry 'mntl' from 'mntlist', it it's in the list. */static voidremove_from_mntlist(mnt, mntlist)	struct mntent	*mnt;	Nse_list	mntlist;{	Nse_listelem	elem;	elem = nse_list_find_elem(mntlist, (Nse_opaque) mnt);	if (elem) {		nse_listelem_delete(mntlist, elem);	}}static Nse_opaquemnt_create(){	struct mntent	*mnt;	mnt = (struct mntent *) nse_calloc(sizeof(struct mntent), 1);	return ((Nse_opaque) mnt);}static Nse_opaquemnt_copy(mnt)	struct mntent	*mnt;{	struct mntent	*new;	new = (struct mntent *) nse_calloc(sizeof(struct mntent), 1);	new->mnt_fsname = NSE_STRDUP(mnt->mnt_fsname);	new->mnt_dir = NSE_STRDUP(mnt->mnt_dir);	new->mnt_type = NSE_STRDUP(mnt->mnt_type);	new->mnt_opts = NSE_STRDUP(mnt->mnt_opts);	new->mnt_freq = mnt->mnt_freq;	new->mnt_passno = mnt->mnt_passno;	return ((Nse_opaque) new);}voidnse_mntent_destroy(mnt)	struct mntent	*mnt;{	free(mnt->mnt_fsname);	free(mnt->mnt_dir);	free(mnt->mnt_type);	free(mnt->mnt_opts);	free((char *) mnt);}static voidmnt_print(mnt)	struct mntent	*mnt;{	printf("%s %s %s %s %d %d\n",		mnt->mnt_fsname, mnt->mnt_dir, mnt->mnt_type, mnt->mnt_opts,		mnt->mnt_freq, mnt->mnt_passno);}static bool_tmnt_equal(mnt1, mnt2)	struct mntent	*mnt1;	struct mntent	*mnt2;{	return (NSE_STREQ(mnt1->mnt_dir, mnt2->mnt_dir) &&		NSE_STREQ(mnt1->mnt_type, mnt2->mnt_type));}static Nse_listops_rec mtablist_ops = {	mnt_create,	mnt_copy,	nse_mntent_destroy,	mnt_print,	mnt_equal,};Nse_listnse_mtablist_create(){	Nse_list	list;	list = nse_list_alloc(&mtablist_ops);	return list;}

⌨️ 快捷键说明

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