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

📄 clnt_info.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
字号:
#ifndef lint#ifdef SunB1#ident			"@(#)clnt_info.c 1.1 92/07/30 SMI; SunOS MLS";#else#ident			"@(#)clnt_info.c 1.1 92/07/30 SMI";#endif /* SunB1 */#endif lint/* *	Copyright (c) 1989 Sun Microsystems, Inc. *//* *	Name:		clnt_info.c * *	Description:	This file contains the routines necessary for *		interfacing with the 'clnt_info' structure file.  The *		layout of a 'clnt_info' file is as follows: * *			hostname= *			arch_str= *			ip= * *			ip_minlab= (SunB1) *			ip_maxlab= (SunB1) * *			ether= *			swap_size= *			root_path= *			swap_path= *			home_path= *			exec_path= *			kvm_path= *			mail_path= *			share_path= *			crash_path= *			yp_type= *			domainname= *			created= *			small_kernel= * *		Note: the 'choice' field is not saved. */#include <stdio.h>#include "install.h"#include "menu.h"/* *	Local variables: */static	clnt_info	clnt;			/* local copy of clnt_info *//* *	Key translation table: */static	key_xlat	key_list[] = {	"hostname",	0,		0,		clnt.hostname,	"arch_str",	0,		0,		clnt.arch_str,	"ip",		0,		0,		clnt.ip,#ifdef SunB1	"ip_minlab",	cv_str_to_lab,	cv_lab_to_str,	(char *) &clnt.ip_minlab,	"ip_maxlab",	cv_str_to_lab,	cv_lab_to_str,	(char *) &clnt.ip_maxlab,#endif /* SunB1 */	"ether",	0,		0,		clnt.ether,	"swap_size",	0,		0,		clnt.swap_size,	"root_path",	0,		0,		clnt.root_path,	"swap_path",	0,		0,		clnt.swap_path,	"home_path",	0,		0,		clnt.home_path,	"exec_path",	0,		0,		clnt.exec_path,	"kvm_path",	0,		0,		clnt.kvm_path,	"mail_path",	0,		0,		clnt.mail_path,	"share_path",	0,		0,		clnt.share_path,	"crash_path",	0,		0,		clnt.crash_path,	"yp_type",	cv_str_to_yp,	cv_yp_to_str,	(char *) &clnt.yp_type,	"domainname",	0,		0,		clnt.domainname,	"created",	cv_str_to_ans,	cv_ans_to_str,	(char *) &clnt.created,	"termtype",	0,		0,		clnt.termtype,	"small_kernel", cv_str_to_ans,  cv_ans_to_str,  (char *) &clnt.small_kernel,	NULL,		0,		0,		NULL};/* *	Name:		read_clnt_info() * *	Description:	Read client information from 'name' into 'clnt_p'. * *		Returns 1 if the file was read successfully, 0 if the file *		did not exist and -1 if there was an error. */intread_clnt_info(name, clnt_p)	char *		name;	clnt_info *	clnt_p;{	char		buf[BUFSIZ];		/* buffer for I/O */	int		count;			/* counter for lines */	FILE *		fp;			/* file pointer for name */	/*	 *	Always zero out the information buffer	 */	bzero((char *) clnt_p, sizeof(*clnt_p));	fp = fopen(name, "r");	if (fp == NULL)		return(0);	bzero((char *) &clnt, sizeof(clnt));	bzero(buf, sizeof(buf));	for (count = 0; key_list[count].key_name; count++) {		if (fgets(buf, sizeof(buf), fp) == NULL) {			(void) fclose(fp);			menu_log("%s: %s: unexpected EOF.", progname, name);			return(-1);		}		if (xlat_key(buf, key_list, count) != 1) {			(void) fclose(fp);			menu_log("%s: %s: cannot translate key: '%s'", progname,			    name, buf);			return(-1);		}	}	if (fgets(buf, sizeof(buf), fp) != NULL) {		(void) fclose(fp);		menu_log("%s: %s: file is longer than expected.", progname,			 name);		return(-1);	}	*clnt_p = clnt;				/* copy valid clnt_info */	(void) fclose(fp);	return(1);} /* end read_clnt_info() *//* *	Name:		save_clnt_info() * *	Description:	Save the client information pointed to by 'clnt_p' *		into 'name'. * *		Returns 1 if the file was saved successfully, and -1 if *		there was an error. */intsave_clnt_info(name, clnt_p)	char *		name;	clnt_info *	clnt_p;{	int		count;			/* counter for lines */	FILE *		fp;			/* file pointer for name */	clnt = *clnt_p;				/* copy valid clnt_info */	fp = fopen(name, "w");	if (fp == NULL) {		menu_log("%s: %s: cannot open file for writing.", progname,			 name);		return(-1);	}	for (count = 0; key_list[count].key_name; count++) {		(void) fprintf(fp, "%s=%s\n", key_list[count].key_name,			       xlat_code(key_list, count));	}	(void) fclose(fp);	return(1);} /* end save_clnt_info() *//* *	Name:		add_client_to_list() * *	Description:	Add 'client_p' to the list of clients for the *		architecture specified in client_p->arch.  The CLIENT_LIST *		is only updated if the client is not already in the file. */intadd_client_to_list(client_p)	clnt_info *	client_p;{	char		buf[BUFSIZ];		/* input buffer */	FILE *		fp;			/* ptr to client_list.<arch> */	char		pathname[MAXPATHLEN];	/* path to client_list.<arch>*/		(void) sprintf(pathname, "%s.%s", CLIENT_LIST,		       client_p->arch_str);	if (fp = fopen(pathname, "r")) {		/*		 *	See if hostname is already in the list		 */		while (fgets(buf, sizeof(buf), fp)) {			delete_blanks(buf);						/* found it */			if (strcmp(buf, client_p->hostname) == 0) {				(void) fclose(fp);				return(1);			}		}		(void) fclose(fp);	}	/*	 *	Either the file is not there or the hostname is not in	 *	the list.  In any case, add the name to the list.	 */	fp = fopen(pathname, "a");	if (fp == NULL) {		menu_log("%s: %s: cannot open file for appending.", progname,			 pathname);		return(0);	}	(void) fprintf(fp, "%s\n", client_p->hostname);	(void) fclose(fp);	/*	 *	Now, if we are not in miniroot, add this name to a private	 *	list, so that add_client knows which clients to make.	 */	if (!is_miniroot()) {		fp = fopen(CLIENT_LIST_ALL, "a");		if (fp == NULL) {			menu_log("%s: %s: cannot open file for appending.",				 progname, CLIENT_LIST_ALL);			return(0);		}				(void) fprintf(fp, "%s\n", client_p->hostname);		(void) fclose(fp);	}	return(1);} /* end add_client_to_list() */

⌨️ 快捷键说明

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