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

📄 sfstdio.c

📁 su 的源代码库
💻 C
📖 第 1 页 / 共 2 页
字号:
/* Copyright (c) Colorado School of Mines, 2006.*//* All rights reserved.                       *//*	Program to generate the header file sfstdio.h used**	by the stdio-binary-compatible functions in Stdio_b.****	Written by Kiem-Phong Vo.*/#include	"sfstdhdr.h"_BEGIN_EXTERNS_extern int	printf _ARG_((const char*,...));extern int	strcmp _ARG_((const char*,const char*));_END_EXTERNS_/* standard names for fields of interest */#if _FILE_cnt#define	std_cnt		_cnt#endif#if _FILE_r#define std_r		_r#endif#if _FILE_w#define std_w		_w#endif#if _FILE_ptr#define std_ptr		_ptr#endif#if !defined(std_ptr) && _FILE_p#define std_ptr		_p#endif#if _FILE_readptr#define std_readptr	_IO_read_ptr#define std_readend	_IO_read_end#endif#if _FILE_writeptr#define std_writeptr	_IO_write_ptr#define std_writeend	_IO_write_end#endif#if _FILE_flag#define std_flag	_flag#endif#if !defined(std_flag) && _FILE__flag#define std_flag	__flag#endif#if !defined(std_flag) && _FILE_flags#define std_flag	_flags#endif#if _FILE_file#define std_file	_file#endif#if !defined(std_file) && _FILE_fileno#define std_file	_fileno#endif/* required fields in the FILE structure */#define STD_CNT		1#define STD_PTR		2#define STD_FLAG	3#define STD_FILE	4#define STD_READPTR	5#define STD_READEND	6#define STD_WRITEPTR	7#define STD_WRITEEND	8#define STD_R		9#define STD_W		10typedef struct _fld_{	int		offset;	int		size;	int		type;	struct _fld_*	next;} Field_t;static FILE	_F_;#define uchar			unsigned char#define Offsetof(member)	(((uchar*)(&(_F_.member))) - ((uchar*)(&_F_)))#define Sizeof(member)		sizeof(_F_.member)#define NIL(type)		((type)0)#if __STD_CField_t* fldinsert(Field_t* head, Field_t* f)#elseField_t* fldinsert(head,f)Field_t*	head;Field_t*	f;#endif{	Field_t *fp, *last;	if(!head)		return f;	for(last = NIL(Field_t*), fp = head; fp; last = fp, fp = fp->next)		if(f->offset < fp->offset)			break;	if(last)	{	f->next = last->next;		last->next = f;	}	else	{	f->next = head;		head = f;	}	return head;}#if __STD_Cint fldprint(int size, char* name, char* type)#elseint fldprint(size,name,type)int	size;char*	name;char*	type;#endif{	if(type)		printf("\t%s\t%s;\n",type,name);	else if(size == sizeof(char))		printf("\tchar\t%s;\n",name);	else if(size == sizeof(short))		printf("\tshort\t%s;\n",name);	else if(size == sizeof(int))		printf("\tint\t%s;\n",name);	else	printf("\tlong\t%s;\n",name);	return 0;}int main(){	int	pos, gap, s;	Field_t	*list, *f;	Field_t	field[64];	/* construct the order list of the fields of interest */	list = NIL(Field_t*);	f = field;#ifdef std_cnt	/* old-stdio _cnt */	f->offset = Offsetof(std_cnt);	f->size = Sizeof(std_cnt);	f->type = STD_CNT;	f->next = NIL(Field_t*);	list = fldinsert(list,f);	f += 1;#endif#ifdef std_r	/* BSD-stdio _r (read count) */	f->offset = Offsetof(std_r);	f->size = Sizeof(std_r);	f->type = STD_R;	f->next = NIL(Field_t*);	list = fldinsert(list,f);	f += 1;#endif#ifdef std_w	/* BSD-stdio _w (write count) */	f->offset = Offsetof(std_w);	f->size = Sizeof(std_w);	f->type = STD_W;	f->next = NIL(Field_t*);	list = fldinsert(list,f);	f += 1;#endif#ifdef std_ptr	/* old-stdio _ptr */	f->offset = Offsetof(std_ptr);	f->size = Sizeof(std_ptr);	f->type = STD_PTR;	f->next = NIL(Field_t*);	list = fldinsert(list,f);	f += 1;#endif#ifdef std_p	/* BSD-stdio _p */	f->offset = Offsetof(std_p);	f->size = Sizeof(std_p);	f->type = STD_PTR;	f->next = NIL(Field_t*);	list = fldinsert(list,f);	f += 1;#endif#ifdef std_readptr /* Linux-stdio _IO_read_ptr */	f->offset = Offsetof(std_readptr);	f->size = Sizeof(std_readptr);	f->type = STD_READPTR;	f->next = NIL(Field_t*);	list = fldinsert(list,f);	f += 1;#endif#ifdef std_readend /* Linux-stdio _IO_read_end */	f->offset = Offsetof(std_readend);	f->size = Sizeof(std_readend);	f->type = STD_READEND;	f->next = NIL(Field_t*);	list = fldinsert(list,f);	f += 1;#endif#ifdef std_writeptr /* Linux-stdio _IO_write_ptr */	f->offset = Offsetof(std_writeptr);	f->size = Sizeof(std_writeptr);	f->type = STD_WRITEPTR;	f->next = NIL(Field_t*);	list = fldinsert(list,f);	f += 1;#endif#ifdef std_writeend /* Linux-stdio _IO_write_end */	f->offset = Offsetof(std_writeend);	f->size = Sizeof(std_writeend);	f->type = STD_WRITEEND;	f->next = NIL(Field_t*);	list = fldinsert(list,f);	f += 1;#endif#ifdef std_flag	/* old-stdio _flag */	f->offset = Offsetof(std_flag);	f->size = Sizeof(std_flag);	f->type = STD_FLAG;	f->next = NIL(Field_t*);	list = fldinsert(list,f);	f += 1;#endif#ifdef std_file /* old/BSD-stdio _file */	f->offset = Offsetof(std_file);	f->size = Sizeof(std_file);	f->type = STD_FILE;	f->next = NIL(Field_t*);	list = fldinsert(list,f);	f += 1;#endif	/* output standard protection */	printf("#ifndef	_SFSTDIO_H\n");	printf("#define	_SFSTDIO_H\t1\n\n");	printf("#include \"no_stdio.h\"\n\n");	printf("extern int\t_Stdstream;\n\n");	printf("extern int\t_Stdextern;\n\n");#if defined(NAME_iob) || _msft_iob#if !_msft_iob	if(strcmp(NAME_iob,"_iob") != 0)		printf("#define _iob	%s\n",NAME_iob);#endif	printf("#define _do_iob	1\n\n");#endif#ifdef NAME_sf	if(strcmp(NAME_sf,"_sf") != 0)		printf("#define _sf	%s\n",NAME_sf);	printf("#define _do_sf	1\n\n");#endif#ifdef NAME_filbuf	if(strcmp(NAME_filbuf,"_filbuf") != 0 )		printf("#define _filbuf	%s\n",NAME_filbuf);	if(__STD_C)		printf("#define FILBUF(f)	int _filbuf(FILE* f)\n");	else	printf("#define FILBUF(f)	int _filbuf(f) FILE* f;\n");	printf("#define _do_filbuf	1\n\n");#endif#ifdef NAME_flsbuf	if(strcmp(NAME_flsbuf,"_flsbuf") != 0)		printf("#define _flsbuf	%s\n",NAME_flsbuf);	if(__STD_C)		printf("#define FLSBUF(c,f)	int _flsbuf(int c, FILE* f)\n");	else	printf("#define FLSBUF(c,f)	int _flsbuf(c,f) int c; FILE* f;\n");	printf("#define _do_flsbuf	1\n\n");#endif#ifdef NAME_uflow	if(strcmp(NAME_uflow,"_uflow") != 0 )		printf("#define _uflow	%s\n",NAME_uflow);	if(__STD_C)		printf("#define FILBUF(f)	int _uflow(FILE* f)\n");	else	printf("#define FILBUF(f)	int _uflow(f) FILE* f;\n");	printf("#define _do_uflow      1\n\n");#endif#ifdef NAME_overflow	if(strcmp(NAME_overflow,"_overflow") != 0)		printf("#define _overflow	%s\n",NAME_overflow);	if(__STD_C)		printf("#define FLSBUF(c,f)	int _overflow(FILE* f, int c)\n");	else	printf("#define FLSBUF(c,f)	int _overflow(f,c) FILE* f; int c;\n");	printf("#define _do_overflow       1\n\n");#endif#ifdef NAME_srget	if(strcmp(NAME_srget,"_srget") != 0 )		printf("#define _srget	%s\n",NAME_srget);	if(__STD_C)		printf("#define FILBUF(f)	int _srget(FILE* f)\n");	else	printf("#define FILBUF(f)	int _srget(f) FILE* f;\n");	printf("#define _do_srget      1\n\n");#endif#ifdef NAME_swbuf	if(strcmp(NAME_swbuf,"_swbuf") != 0)		printf("#define _swbuf	%s\n",NAME_swbuf);	if(__STD_C)		printf("#define FLSBUF(c,f)	int _swbuf(int c, FILE* f)\n");	else	printf("#define FLSBUF(c,f)	int _swbuf(c,f) int c; FILE* f;\n");	printf("#define _do_swbuf       1\n\n");#endif#if _pragma_weak	printf("#if _in_doprnt\n");	printf("#pragma weak _doprnt =	__doprnt\n");	printf("#define _doprnt	__doprnt\n");	printf("#endif\n\n");	printf("#if _in_doscan\n");	printf("#pragma weak _doscan =	__doscan\n");	printf("#define _doscan	__doscan\n");	printf("#endif\n\n");#ifdef NAME_iob	printf("#if _in_stdextern\n");	printf("#pragma weak %s =	_%s\n",NAME_iob,NAME_iob);	printf("#define %s	_%s\n",NAME_iob,NAME_iob);	printf("#endif\n\n");#endif#ifdef NAME_filbuf	printf("#if _in_filbuf\n");	printf("#pragma weak %s =	_%s\n",NAME_filbuf,NAME_filbuf);	printf("#define %s	_%s\n",NAME_filbuf,NAME_filbuf);	printf("#endif\n\n");#endif#ifdef NAME_flsbuf	printf("#if _in_flsbuf\n");	printf("#pragma weak %s =	_%s\n",NAME_flsbuf,NAME_flsbuf);	printf("#define %s	_%s\n",NAME_flsbuf,NAME_flsbuf);	printf("#endif\n\n");#endif#ifdef NAME_uflow	printf("#if _do_filbuf\n"); /* not a bug! */	printf("#pragma weak %s =	_%s\n",NAME_uflow,NAME_uflow);	printf("#define %s	_%s\n",NAME_uflow,NAME_uflow);

⌨️ 快捷键说明

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