32 lines
		
	
	
	
		
			640 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			32 lines
		
	
	
	
		
			640 B
		
	
	
	
		
			C
		
	
	
	
	
	
| #include <stdlib.h>
 | |
| #include <errno.h>
 | |
| #include <unistd.h>
 | |
| #include <string.h>
 | |
| #include <cpm.h>
 | |
| #include "cpmsys.h"
 | |
| 
 | |
| int close(int fd)
 | |
| {
 | |
|     struct FCBE* fcbe = &__fd[fd];
 | |
|     int result = 0;
 | |
|     uint8_t olduser;
 | |
| 
 | |
|     __init_file_descriptors();
 | |
|     if (fcbe->fcb.f[0])
 | |
|     {
 | |
|         /* There's an actual filename here, so assume it's an open file. */
 | |
| 
 | |
|         olduser = cpm_get_user();
 | |
|         cpm_set_user(fcbe->user);
 | |
|         if (cpm_close_file(&fcbe->fcb) == 0xff)
 | |
|         {
 | |
|             errno = EIO;
 | |
|             result = -1;
 | |
|         }
 | |
|         cpm_set_user(olduser);
 | |
|     }
 | |
| 
 | |
|     memset(fcbe, 0, sizeof(struct FCBE));
 | |
|     return result;
 | |
| }
 | |
| 
 |