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

📄 util.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
字号:
/*	@(#)util.c 1.1 92/07/30 SMI 	*//*	Copyright (c) 1984 AT&T	*//*	  All Rights Reserved  	*//*	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T	*//*	The copyright notice above does not evidence any   	*//*	actual or intended publication of such source code.	*/#ident	"@(#)nlsadmin:util.c	1.6.1.1"#include "fcntl.h"#include "stdio.h"#include "string.h"#include "ctype.h"#include "nlsadmin.h" /*  * utility routines for nlsadmin.  adapted from dmk's   * listener code by sar.  */extern char	*arg0;extern int	Errno;extern int	Version;extern char	*Netspec;extern char	serv_str[];extern char	id_str[];extern char	res_str[];extern char	flag_str[];extern char	mod_str[];extern char	path_str[];extern char	cmnt_str[];extern char	*errmalloc;extern char	*errcorrupt;extern char	*erropen;/* * read_dbf:    Parses the next non-comment line into the *	      globals serv_str, flag_str, name_str, mod_str, and path_str. *	      Skips 'ignore' lines. * *	      Returns:	line number read or -1 on EOF or -2 on error. */intread_dbf(fp)FILE *fp;{	int linenum = 0;	char *bp, *start;	char *clean_line();	if ((start = (char *)malloc(DBFLINESZ)) == NULL)		error(errmalloc, NLSMEM);	for(;;) {		bp = start;		if (!fgets(bp, DBFLINESZ, fp))  {			if (!feof(fp)) {				fprintf(stderr,"%s: error in reading data base file\n",arg0);				Errno = NLSRDFIL;				return(-2);			}			free(start);			return(-1);		}		if (*(bp+strlen(bp)-1) != '\n')  {  /* terminating newline? */			fprintf(stderr,"%s: data base file: error on line %d\n",arg0,linenum);			free(start);			Errno = NLSDBF;			return(-2);		}		cmnt_str[0] = (char)0;		bp = clean_line(bp);		if (strlen(bp))	 /* anything left?       */			if (parse_line(bp))				break;		linenum++;	}	free(start);	return(linenum);}/* * parse a non-white space line *	      0 = error; *	      1 = success; * *      non-null lines have the following format: * *      service_code: flags: id: reserved: modules_to_push: cmd_line # comments */intparse_line(bp)register char *bp;{	char *servp, *idp, *resp, *flagp, *modp, *pathp;	int length;	char *from, *to;	length = strlen(bp);	if (!(servp = strtok(bp, DBFTOKENS))) {		return(0);	}	if (!(flagp = strtok((char *)0, DBFTOKENS)))  {		return(0);	}	if (!(idp = strtok((char *)0, DBFTOKENS))) {		return(0);	}	if (!(resp = strtok((char *)0, DBFTOKENS))) {		return(0);	}	if (!(modp = strtok((char *)0, DBFTOKENS))) {		return(0);	}	pathp = modp + strlen(modp) + 1;      /* go past separator */	if ((pathp - bp) >= length)		return(0);	strcpy(serv_str, servp);	strcpy(id_str, idp);	res_str[0] = (char)0;	/* reserved for future use, don't care for now */	strcpy(flag_str, flagp);	mod_str[0] = (char)0;	for (from = modp, to = mod_str; *from; ) {		if (strncmp(from, DBFNULL, strlen(DBFNULL)) == 0) {			if ((from == modp) || (*(from - 1) == ','))				from += strlen(DBFNULL);			else				*to++ = *from++;		} else {			*to++ = *from++;		}	}	*to = (char)0;	if (mod_str[strlen(mod_str) - 1] == ',')		mod_str[strlen(mod_str) - 1] = (char)0;	strcpy(path_str, pathp);	return(1);}char *clean_line(s)char *s;{	char *ns;	char *cs;	*(s + strlen(s) -1) = (char)0; /* delete newline	*/	if (strlen(s) && (ns = strchr(s, DBFCOMMENT))) {		*ns++ = (char)0;	/* delete comments      */		if (strlen(ns)) {			cs = ns + strlen(ns) -1;			while ((cs != ns) && (isspace(*cs))) {				*cs = (char)0;				--cs;			}			while (*ns)				if (isspace(*ns))					++ns;				else					break;		}		if(strlen(ns))			strcpy(cmnt_str, ns);	}	if (!strlen(s))		return(s);	ns = s + strlen(s) - 1; /* s->start; ns->end    */	while ((ns != s) && (isspace(*ns)))  {		*ns = (char)0;	  /* delete terminating spaces */		--ns;	}	while (*s)		      /* del beginning white space*/		if (isspace(*s))			++s;		else			break;	return(s);}#define VERSIONSTR	"# VERSION="check_version(fname)char *fname;{	FILE *fp;	char *line, *p, *tmp;	int version;	if ((fp = fopen(fname, "r")) == NULL) {		fprintf(stderr, erropen, arg0, Netspec);		exit(NLSOPEN);	}	if ((line = (char *) malloc(DBFLINESZ)) == NULL)		error(errmalloc, NLSMEM);	p = line;	while (fgets(p, DBFLINESZ, fp)) {		if (!strncmp(p, VERSIONSTR, strlen(VERSIONSTR))) {			/* pitch the newline */			tmp = strchr(p, '\n');			if (tmp)				*tmp = '\0';			else				error(errcorrupt, NLSDBFBAD);			p += strlen(VERSIONSTR);			if (*p)				version = atoi(p);			else				error(errcorrupt, NLSDBFBAD);			free(line);			fclose(fp);			if (version != Version)				return(1);	/* wrong version */			else				return(0);	/* version ok */		}		p = line;	}	error(errcorrupt, NLSDBFBAD);}

⌨️ 快捷键说明

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