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

📄 sfpurge.c

📁 su 的源代码库
💻 C
字号:
/* Copyright (c) Colorado School of Mines, 2006.*//* All rights reserved.                       */#include	"sfhdr.h"/*	Delete all pending data in the buffer****	Written by Kiem-Phong Vo.*/#if __STD_Cint sfpurge(reg Sfio_t* f)#elseint sfpurge(f)reg Sfio_t*	f;#endif{	reg int	mode;	SFMTXSTART(f,-1);	if((mode = f->mode&SF_RDWR) != (int)f->mode && _sfmode(f,mode|SF_SYNCED,0) < 0)		SFMTXRETURN(f, -1);	if((f->flags&SF_IOCHECK) && f->disc && f->disc->exceptf)		(void)(*f->disc->exceptf)(f,SF_PURGE,(Void_t*)((int)1),f->disc);	if(f->disc == _Sfudisc)		(void)sfclose((*_Sfstack)(f,NIL(Sfio_t*)));	/* cannot purge read string streams */	if((f->flags&SF_STRING) && (f->mode&SF_READ) )		goto done;	SFLOCK(f,0);	/* if memory map must be a read stream, pretend data is gone */#ifdef MAP_TYPE	if(f->bits&SF_MMAP)	{	f->here -= f->endb - f->next;		if(f->data)		{	SFMUNMAP(f,f->data,f->endb-f->data);			SFSK(f,f->here,SEEK_SET,f->disc);		}		SFOPEN(f,0);		SFMTXRETURN(f, 0);	}#endif	switch(f->mode&~SF_LOCK)	{	default :		SFOPEN(f,0);		SFMTXRETURN(f, -1);	case SF_WRITE :		f->next = f->data;		if(!f->proc || !(f->flags&SF_READ) || !(f->mode&SF_WRITE) )			break;		/* 2-way pipe, must clear read buffer */		(void)_sfmode(f,SF_READ,1);		/* fall through */	case SF_READ:		if(f->extent >= 0 && f->endb > f->next)		{	f->here -= f->endb-f->next;			SFSK(f,f->here,SEEK_SET,f->disc);		}		f->endb = f->next = f->data;		break;	}	SFOPEN(f,0);done:	if((f->flags&SF_IOCHECK) && f->disc && f->disc->exceptf)		(void)(*f->disc->exceptf)(f,SF_PURGE,(Void_t*)((int)0),f->disc);	SFMTXRETURN(f, 0);}

⌨️ 快捷键说明

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