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

📄 file_read.c

📁 MTOOLS version 2.0 Mtools is a public domain collection of programs to allow Unix systems t
💻 C
字号:
#include <stdio.h>#include "msdos.h"extern int clus_size, dir_start, dir_len, fat_error;extern unsigned int last_fat;/* * Read the clusters given the beginning FAT entry.  Returns 0 on success. */intfile_read(fp, fat, textmode, stripmode, size)FILE *fp;unsigned int fat;int textmode, stripmode;long size;{	register int i;	int in_len, out_len;	unsigned int fat_decode();	long current, start;	unsigned char in_buf[MAX_CLUSTER], out_buf[MAX_CLUSTER];	void disk_read(), perror();	current = 0L;	in_len = clus_size * MSECTOR_SIZE;					/* a zero length file? */	if (fat == 0)		return(0);	/* CONSTCOND */	while (1) {		start = (long) (fat - 2) * clus_size + dir_start + dir_len;		disk_read(start, in_buf, in_len);					/* do the translations */		if (textmode || stripmode) {			out_len = 0;			for (i = 0; i < in_len; i++) {				current++;				if (current > size)					break;				if (textmode && in_buf[i] == '\r')					continue;				if (textmode && current == size && in_buf[i] == 0x1a)					continue;				if (stripmode)					out_buf[out_len++] = in_buf[i] & 0x7f;				else					out_buf[out_len++] = in_buf[i];			}					/* write it */			if (fwrite((char *) out_buf, sizeof(*out_buf), out_len, fp) == 0) {				perror("file_read: fwrite");				return(-1);			}		}					/* much easier... */		else {			out_len = (size - current > in_len) ? in_len : size - current;			if (fwrite((char *) in_buf, sizeof(*in_buf), out_len, fp) == 0) {				perror("file_read: fwrite");				return(-1);			}			current += out_len;			if (current >= size)				break;		}					/* get next cluster number */		fat = fat_decode(fat);		if (fat == 1) {			fprintf(stderr, "file_read: FAT problem\n");			fat_error++;			return(-1);		}					/* end of cluster chain */		if (fat >= last_fat)			break;	}	return(0);}

⌨️ 快捷键说明

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