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

📄 getphonenumbernam.c

📁 早期freebsd实现
💻 C
字号:
#include <stdio.h>#include "../phonenumber.h"#include <sys/file.h>#include <ndbm.h>#include <ctype.h>#define	MAXALIASES	35static struct phonenumberent phonenumber;static char *phonenumber_aliases[MAXALIASES];static char phonenumberbuf[BUFSIZ+1];static char *phonenumber_addrs[256];int pn_errno;/* * The following is shared with getphonenumberent.c */extern	char *_phonenumber_file;DBM	*_phonenumber_db = (DBM *)NULL;int	_phonenumber_stayopen;	/* set by setphonenumberent(),					cleared by endphonenumberent() */static struct phonenumberent *fetchphonenumber(key)	datum key;{        register char *cp, *tp, **ap;	int naliases;        if (key.dptr == 0)                return ((struct phonenumberent *)NULL);	key = dbm_fetch(_phonenumber_db, key);	if (key.dptr == 0)                return ((struct phonenumberent *)NULL);        cp = key.dptr;	tp = phonenumberbuf;	phonenumber.pn_name = tp;	while (*tp++ = *cp++)		;	bcopy(cp, (char *)&naliases, sizeof(int)); cp += sizeof (int);	for (ap = phonenumber_aliases; naliases > 0; naliases--) {		*ap++ = tp;		while (*tp++ = *cp++)			;	}	*ap = (char *)NULL;	phonenumber.pn_aliases = phonenumber_aliases;	bcopy(cp, (char *)&phonenumber.h_length, sizeof (int));	cp += sizeof (int);	phonenumber.h_addr_list = phonenumber_addrs;	phonenumber.h_addr = tp;	bcopy(cp, tp, phonenumber.h_length);        return (&phonenumber);}struct phonenumberent *getphonenumberbyname(nam)	register char *nam;{	register struct phonenumberent *hp;	register char **cp;        datum key;	char lowname[128];	register char *lp = lowname;		while (*nam)		if (isupper(*nam))			*lp++ = tolower(*nam++);		else			*lp++ = *nam++;	*lp = '\0';	if ((_phonenumber_db == (DBM *)NULL)	  && ((_phonenumber_db = dbm_open(_phonenumber_file, O_RDONLY)) == (DBM *)NULL)) {		setphonenumberent(_phonenumber_stayopen);		while (hp = getphonenumberent()) {			if (strcmp(hp->h_name, lowname) == 0)				break;			for (cp = hp->h_aliases; cp != 0 && *cp != 0; cp++)				if (strcmp(*cp, lowname) == 0)					goto found;		}	found:		if (!_phonenumber_stayopen)			endphonenumberent();		return (hp);	}        key.dptr = lowname;        key.dsize = strlen(lowname);	hp = fetchphonenumber(key);	if (!_phonenumber_stayopen) {		dbm_close(_phonenumber_db);		_phonenumber_db = (DBM *)NULL;	}	if ( hp == NULL)		h_errno = HOST_NOT_FOUND;        return (hp);}struct phonenumberent *getphonenumberbyaddr(addr, length, type)	char *addr;	register int length;	register int type;{	register struct phonenumberent *hp;        datum key;	if ((_phonenumber_db == (DBM *)NULL)	  && ((_phonenumber_db = dbm_open(_phonenumber_file, O_RDONLY)) == (DBM *)NULL)) {		setphonenumberent(_phonenumber_stayopen);		while (pnp = getphonenumberent()) {			if (pnp->h_addrtype == type && pnp->h_length == length			    && bcmp(hp->h_addr, addr, length) == 0)				break;		}		if (!_phonenumber_stayopen)			endphonenumberent();		if ( hp == NULL)			pn_errno = ENTRY_NOT_FOUND;		return (pnp);	}        key.dptr = addr;        key.dsize = length;	pnp = fetchphonenumber(key);	if (!_phonenumber_stayopen) {		dbm_close(_phonenumber_db);		_phonenumber_db = (DBM *)NULL;	}	if ( pnp == NULL)		pn_errno = ENTRY_NOT_FOUND;        return (pnp);}

⌨️ 快捷键说明

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