38 lines
		
	
	
		
			641 B
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			641 B
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
| #include "sysincludes.h"
 | |
| #include "msdos.h"
 | |
| #include "mtools.h"
 | |
| #include "file.h"
 | |
| 
 | |
| /*
 | |
|  * Read the clusters given the beginning FAT entry.  Returns 0 on success.
 | |
|  */
 | |
| 
 | |
| int file_read(FILE *fp, Stream_t *Source, int textmode, int stripmode)
 | |
| {
 | |
| 	char buffer[16384];
 | |
| 	int pos;
 | |
| 	int ret;
 | |
| 
 | |
| 	if (!Source){
 | |
| 		fprintf(stderr,"Couldn't open source file\n");
 | |
| 		return -1;
 | |
| 	}
 | |
| 	
 | |
| 	pos = 0;
 | |
| 	while(1){
 | |
| 		ret = Source->Class->read(Source, buffer, (mt_off_t) pos, 16384);
 | |
| 		if (ret < 0 ){
 | |
| 			perror("file read");
 | |
| 			return -1;
 | |
| 		}
 | |
| 		if ( ret == 0)
 | |
| 			break;
 | |
| 		if(!fwrite(buffer, 1, ret, fp)){
 | |
| 			perror("write");
 | |
| 			return -1;
 | |
| 		}
 | |
| 		pos += ret;
 | |
| 	}
 | |
| 	return 0;
 | |
| }
 | 
