37 lines
		
	
	
		
			758 B
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			37 lines
		
	
	
		
			758 B
		
	
	
	
		
			C
		
	
	
	
| /*
 | |
|  * Copyright (C) 2020 Embecosm Limited
 | |
|  * SPDX-License-Identifier: BSD-2-Clause
 | |
|  */
 | |
| #include <machine/syscall.h>
 | |
| #include <string.h>
 | |
| #include <fcntl.h>
 | |
| #include "semihost_stat.h"
 | |
| 
 | |
| /* Status of a file (by name).  */
 | |
| 
 | |
| int
 | |
| _stat (const char *name, struct stat *st)
 | |
| {
 | |
|   int file;
 | |
|   int res;
 | |
| 
 | |
|   /* Initialize st as not all fields will be set.  */
 | |
|   memset (st, 0, sizeof (*st));
 | |
| 
 | |
|   /* Try to open file.  */
 | |
|   file = _open (name, O_RDONLY);
 | |
|   if (file == -1)
 | |
|     /* _open should have already set errno.  */
 | |
|     return -1;
 | |
| 
 | |
|   /* File opened successfully, infer read permission for owner and assume it is
 | |
|      a regular file.  */
 | |
|   st->st_mode |= S_IREAD | S_IFREG;
 | |
| 
 | |
|   /* Fill in more info.  */
 | |
|   res = __stat_common (file, st);
 | |
| 
 | |
|   _close (file);
 | |
|   return res;
 | |
| }
 |