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

📄 stdgets.c

📁 su 的源代码库
💻 C
字号:
/* Copyright (c) Colorado School of Mines, 2006.*//* All rights reserved.                       */#include	"stdio_s.h"/*	Read a line into a buffer.****	Written by Kiem-Phong Vo.*/#if __STD_Cchar* _stdgets(reg Sfio_t* f, char* us, reg int n, int isgets)#elsechar* _stdgets(f,us,n,isgets)reg Sfio_t*	f;	/* stream to read from */char*		us;	/* space to read into */reg int		n;	/* max number of bytes to read */int		isgets;	/* gets(), not fgets() */#endif{	reg int		p;	reg uchar	*is, *ps;	SFMTXSTART(f, NIL(char*));	if(n <= 0 || !us || (f->mode != SF_READ && _sfmode(f,SF_READ,0) < 0))		SFMTXRETURN(f, NIL(char*));	SFLOCK(f,0);	n -= 1;	is = (uchar*)us;		while(n)	{	/* peek the read buffer for data */		if((p = f->endb - (ps = f->next)) <= 0 )		{	f->getr = '\n';			f->mode |= SF_RC;			if(SFRPEEK(f,ps,p) <= 0)				break;		}		if(p > n)			p = n;#if _lib_memccpy		if((ps = (uchar*)memccpy((char*)is,(char*)ps,'\n',p)) != NIL(uchar*))			p = ps-is;		is += p;		ps  = f->next+p;#else		if(!(f->flags&(SF_BOTH|SF_MALLOC)))		{	while(p-- && (*is++ = *ps++) != '\n')				;			p = ps-f->next;		}		else		{	reg int	c = ps[p-1];			if(c != '\n')				ps[p-1] = '\n';			while((*is++ = *ps++) != '\n')				;			if(c != '\n')			{	f->next[p-1] = c;				if((ps-f->next) >= p)					is[-1] = c;			}		}#endif		/* gobble up read data and continue */		f->next = ps;		if(is[-1] == '\n')			break;		else if(n > 0)			n -= p;	}	if((_Sfi = f->val = is - ((uchar*)us)) <= 0)		us = NIL(char*);	else if(isgets && is[-1] == '\n')		is[-1] = '\0';	else	*is = '\0';	SFOPEN(f,0);	SFMTXRETURN(f, us);}

⌨️ 快捷键说明

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