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

📄 zutils.c

📁 一套客户/服务器模式的备份系统代码,跨平台,支持linux,AIX, IRIX, FreeBSD, Digital Unix (OSF1), Solaris and HP-UX.
💻 C
字号:
/****************** Start of $RCSfile: zutils.c,v $  ****************** $Source: /home/alb/afbackup/afbackup-3.3.8.1/RCS/zutils.c,v $* $Id: zutils.c,v 1.2 2004/07/08 20:34:47 alb Exp alb $* $Date: 2004/07/08 20:34:47 $* $Author: alb $********* description *********************************************************************************************************************/#include <conf.h>#include <version.h>  static char * fileversion = "$RCSfile: zutils.c,v $ $Source: /home/alb/afbackup/afbackup-3.3.8.1/RCS/zutils.c,v $ $Id: zutils.c,v 1.2 2004/07/08 20:34:47 alb Exp alb $ " PACKAGE " " VERSION_STRING;#include <stdio.h>#include <string.h>#include <stdlib.h>#include <unistd.h>#include <errno.h>#include <x_types.h>#include <genutils.h>#ifdef	USE_ZLIB#include <zutils.h>Int32reset_zfile(ZFile * zfile){  Int8	inited;  inited = zfile->initialized;  if(inited != Z_UNINITIALIZED){    if(inited == Z_INIT_FOR_INFLATE){	inflateEnd(& (zfile->z_stream));    }    else if(inited == Z_INIT_FOR_DEFLATE){	deflateEnd(& (zfile->z_stream));    }    else{	fprintf(stderr, "Internal Error: Unknown zstream status.\n");    }  }  memset(zfile, 0, (char *) zfile->filebuf - (char *) zfile);  zfile->initialized = Z_UNINITIALIZED;  zfile->compr_done = NO;  zfile->file_exh = NO;  return(0);}Int32open_file_zip(  ZFile		*zfile,  int		fd,  Int32		level,  Int32		maxblock){  Int32		r;  memset(zfile, 0, sizeof(ZFile));  zfile->fd = fd;  if((r = deflateInit(&(zfile->z_stream), level)) != Z_OK){    return(r);  }  zfile->initialized = Z_INIT_FOR_DEFLATE;  zfile->level = level;  zfile->maxblock = maxblock;  return(0);}Int32open_file_unzip(  ZFile		*zfile,  int		fd){  memset(zfile, 0, sizeof(ZFile));  zfile->fd = fd;  if(inflateInit(&(zfile->z_stream)) != Z_OK){    return(2);  }  zfile->initialized = Z_INIT_FOR_INFLATE;  zfile->level = 1;  return(0);}Int32read_file_zip(  ZFile		*zfile,  UChar		*cp,  Int32		n,  Int32		(*readfunc)(int, UChar *, Int32)){  Int32		i, d;  if(zfile->level <= 0)    return(readfunc(zfile->fd, cp, n));  if(n <= 0)    return(n);  if(zfile->compr_done)    return(0);  zfile->z_stream.avail_out = n;  zfile->z_stream.next_out = cp;  while(zfile->z_stream.avail_out > 0){    if(zfile->z_stream.avail_in == 0 && !zfile->file_exh){	i = readfunc(zfile->fd, zfile->filebuf, 0x2000);	if(i >= 0){	  if(i < 0x2000){	    zfile->file_exh = YES;	  }	  zfile->z_stream.next_in = zfile->filebuf;	  zfile->z_stream.avail_in = i;	}	else{	  reset_zfile(zfile);	  return(i);	}    }    d = deflate(&(zfile->z_stream), zfile->file_exh ? Z_FINISH : Z_NO_FLUSH);    if(d == Z_STREAM_END){	zfile->compr_done = YES;	break;    }    else if(d != Z_OK){	reset_zfile(zfile);	return(- (ABS(d) | (d > 0 ? 128 : 0)));    }  }  return(zfile->z_stream.next_out - cp);}Int32write_file_unzip(  ZFile		*zfile,  UChar		*cp,  Int32		n,  Flag		end,  Int32		(*writefunc)(int, UChar *, Int32)){  Int32		i, d, len;  UChar		*oldptr;  if(zfile->level <= 0)    return(writefunc(zfile->fd, cp, n));  if(n <= 0)    return(n);  if(zfile->compr_done)    return(0);  zfile->z_stream.avail_in = n;  zfile->z_stream.next_in = cp;  while(zfile->z_stream.avail_in > 0){    if(zfile->z_stream.avail_out == 0){	zfile->z_stream.avail_out = 0x2000;	zfile->z_stream.next_out = zfile->filebuf;    }    oldptr = zfile->z_stream.next_out;    d = inflate(&(zfile->z_stream), /* end ? Z_FINISH : */ Z_NO_FLUSH);    len = zfile->z_stream.next_out - oldptr;    if(zfile->z_stream.next_out > oldptr){	i = writefunc(zfile->fd, oldptr, len);	if(i < len){	  if(i < 0)	    return(i);	  d = n * i / len;	  return(d < n ? d : (d ? d - 1 : 0));	}    }    if(d == Z_STREAM_END)	break;    else if(d != Z_OK){	return(- (ABS(d) | (d > 0 ? 128 : 0)));    }  }  return(zfile->z_stream.next_in - cp);}voidclose_file_zip(ZFile * zfile){  reset_zfile(zfile);}#endif	/* defined(USE_ZLIB) */

⌨️ 快捷键说明

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