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;
 | 
						|
}
 |