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

📄 makedb.c

📁 早期freebsd实现
💻 C
字号:
/* pathalias -- by steve bellovin, as told to peter honeyman */#ifndef lintstatic char	*sccsid = "@(#)makedb.c	9.1 87/10/04";#endif /* lint */#include <stdio.h>#include "config.h"typedef struct {	char *dptr;	int dsize;} datum;char *Ofile = ALIASDB, *ProgName;#define USAGE "%s [-o dbmname] [-a] [file ...]\n"main(argc, argv)	char *argv[];{	char *ofptr;	int c, append = 0;	extern int optind;	extern char *optarg;	ProgName = argv[0];	while ((c = getopt(argc, argv, "o:a")) != EOF)		switch(c) {		case 'o':	/* dbm output file */			Ofile = optarg;			break;		case 'a':	/* append mode */			append++;			break;		default:			fprintf(stderr, USAGE, ProgName);			exit(1);			break;		}	if ((ofptr = rindex(Ofile, '/')) != 0)		ofptr++;	else		ofptr = Ofile;	if (strlen(ofptr) > 10) {		ofptr[10] = 0;		fprintf(stderr, "%s: using %s for dbm output\n", ProgName, Ofile);	}	if (append == 0 && dbfile(Ofile) != 0) {		perror_(Ofile);		exit(1);	}	if (dbminit(Ofile) < 0) {		perror_(Ofile);		exit(1);	}	if (optind == argc)		makedb((char *) 0);	else for ( ; optind < argc; optind++)		makedb(argv[optind]);	exit(0);}dbfile(dbf)	char *dbf;{	return (dbcreat(dbf, "dir") != 0 || dbcreat(dbf, "pag") != 0);}dbcreat(dbf, suffix)	char *dbf, *suffix;{	char buf[BUFSIZ];	int fd;	(void) sprintf(buf, "%s.%s", dbf, suffix);	if ((fd = creat(buf, 0666)) < 0)		return(-1);	(void) close(fd);	return(0);}makedb(ifile)	char *ifile;{	char line[BUFSIZ];	datum key, val;	if (ifile && (freopen(ifile, "r", stdin) == NULL)) {		perror_(ifile);		return;	}	/*	 * keys and values are 0 terminated.  this wastes time and (disk) space,	 * but does lend simplicity and backwards compatibility.	 */	key.dptr = line;	while (fgets(line, sizeof(line), stdin) != NULL) {		char *op, *end;		end = line + strlen(line);		end[-1] = 0;	/* kill newline, stuff null terminator */		op = index(line, '\t');		if (op != 0) {			*op++ = 0;			key.dsize = op - line;		/* 0 terminated */			val.dptr = op;			val.dsize = end - op;		/* 0 terminated */		} else {			key.dsize = end - line;		/* 0 terminated */			val.dptr = "\0";		/* why must i do this? */			val.dsize = 1;		}		if (store(key, val) < 0)			perror_(Ofile);	}}perror_(str)	char	*str;{	fprintf(stderr, "%s: ", ProgName);	perror(str);}

⌨️ 快捷键说明

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