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

📄 getsum.c

📁 <B>Digital的Unix操作系统VAX 4.2源码</B>
💻 C
字号:
/*	checksum.c *		checksum routines * *			Copyright (c) 1985, 1989 by *		Digital Equipment Corporation, Maynard, MA *			All rights reserved. *								 *	This software is furnished under a license and may be used and *	copied  only  in accordance with the terms of such license and *	with the  inclusion  of  the  above  copyright  notice.   This *	software  or  any  other copies thereof may not be provided or *	otherwise made available to any other person.  No title to and *	ownership of the software is hereby transferred.		 *								 *	This software is  derived  from  software  received  from  the *	University    of   California,   Berkeley,   and   from   Bell *	Laboratories.  Use, duplication, or disclosure is  subject  to *	restrictions  under  license  agreements  with  University  of *	California and with AT&T.					 *								 *	The information in this software is subject to change  without *	notice  and should not be construed as a commitment by Digital *	Equipment Corporation.					 *								 *	Digital assumes no responsibility for the use  or  reliability *	of its software on equipment which is not supplied by Digital. * *	000	08-mar-1989	ccb *		This comment added. Originally derived from sum(1) in BSD 4.2 *		sources in the summer of 1985. *	001	16-jun-1989	ccb *		lint. cleaned up return types.*/#ifndef lintstatic	char *sccsid = "@(#)getsum.c	4.1	(ULTRIX)	7/2/90";#endif lint#include	<sys/types.h>#include	<sys/file.h>#include	<stdio.h>#include	<errno.h>#define	GSBUFSIZ	(1024*8)/*LINTLIBRARY*/extern int	errno;			/* errno(2) */extern char	*sys_errlist[];		/* errno(2) */extern char	*prog;u_short getsum();u_short CheckSum(path)char *path;{	return(getsum(path));}u_short getsum(path)char *path;{	char			buf[GSBUFSIZ];	int			fd, nread;	register unsigned	i, sum;	register char		*t;	if( (fd = open(path,O_RDONLY,0)) < 0 )	{		(void) fprintf(stderr,"%s: can't open %s (%s)\n", prog, path,			sys_errlist[errno]);		errno = -1;		return(0);	}	/* checksum done here */	for( sum = 0; (nread = read(fd,buf,GSBUFSIZ)) > 0; )	{		for( i=0, t = buf; i<nread; ++t, ++i )		{			if( sum & 01 )				sum = (sum>>1) + 0x8000;			else				sum >>= 1;			sum += (unsigned char) (*t);			sum &= 0xFFFF;		}	}	(void) close(fd);	return( (u_short) sum);}

⌨️ 快捷键说明

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