45 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* $Source$
 | 
						|
 * $State$
 | 
						|
 * $Revision$
 | 
						|
 */
 | 
						|
 | 
						|
#include <errno.h>
 | 
						|
 | 
						|
static const signed char err_map[] =
 | 
						|
	{
 | 
						|
		0,			/* 0x00 no error */
 | 
						|
		EINVAL,			/* 0x01 function number invalid */
 | 
						|
		ENOENT,			/* 0x02 file not found */
 | 
						|
		ENOENT,			/* 0x03 path not found */
 | 
						|
		EMFILE,			/* 0x04 too many open files */
 | 
						|
		EACCES,			/* 0x05 access denied */
 | 
						|
		EBADF,			/* 0x06 invalid handle */
 | 
						|
		EFAULT,			/* 0x07 mem. control block destroyed */
 | 
						|
		ENOMEM,			/* 0x08 insufficient memory */
 | 
						|
		EFAULT,			/* 0x09 memory block address invalid */
 | 
						|
		E2BIG,			/* 0x0A environment invalid */
 | 
						|
		ENOEXEC,		/* 0x0B format invalid */
 | 
						|
		EINVAL,			/* 0x0C access code invalid */
 | 
						|
		EINVAL,			/* 0x0D data invalid */
 | 
						|
		ENOEXEC,		/* 0x0E (?) fixup overflow */
 | 
						|
		ENODEV,			/* 0x0F invalid drive */
 | 
						|
		EBUSY,			/* 0x10 attempt to remove curr. dir. */
 | 
						|
		EXDEV,			/* 0x11 not same device */
 | 
						|
		ENOENT,			/* 0x12 no more files */
 | 
						|
		EIO,			/* 0x13 disk write-protected */
 | 
						|
		EIO,			/* 0x14 unknown unit */
 | 
						|
		ENXIO,			/* 0x15 drive not ready */
 | 
						|
	};
 | 
						|
 | 
						|
/*
 | 
						|
 * Map an MS-DOS 2+ system error code to an `errno' value and store that in
 | 
						|
 * `errno'.  Return a longword -1.
 | 
						|
 */
 | 
						|
long _sys_seterrno(unsigned dos_err)
 | 
						|
{
 | 
						|
	if (dos_err < sizeof(err_map) / sizeof(err_map[0]))
 | 
						|
		errno = err_map[dos_err];
 | 
						|
	else
 | 
						|
		errno = EIO;
 | 
						|
	return -1;
 | 
						|
}
 |