* errno.cc (errmap): Map ERROR_INVALID_ADDRESS to new errno code

EOVERFLOW.
	(_sys_errlist): Add entries for EILSEQ and EOVERFLOW.
	(strerror): Ditto.
	* mmap.cc (map_map): Set errno in case of error.
	(mmap64): Remove setting errno explicitely to ENOMEM.
This commit is contained in:
Corinna Vinschen 2002-09-24 14:17:50 +00:00
parent 06f1353ae8
commit f4b098d95e
3 changed files with 22 additions and 6 deletions

View File

@ -1,3 +1,12 @@
2002-09-24 Corinna Vinschen <corinna@vinschen.de>
* errno.cc (errmap): Map ERROR_INVALID_ADDRESS to new errno code
EOVERFLOW.
(_sys_errlist): Add entries for EILSEQ and EOVERFLOW.
(strerror): Ditto.
* mmap.cc (map_map): Set errno in case of error.
(mmap64): Remove setting errno explicitely to ENOMEM.
2002-09-24 Corinna Vinschen <corinna@vinschen.de> 2002-09-24 Corinna Vinschen <corinna@vinschen.de>
* mmap.cc (map_map): Add debug output. * mmap.cc (map_map): Add debug output.

View File

@ -112,6 +112,7 @@ errmap[] =
X (DISK_FULL, ENOSPC), X (DISK_FULL, ENOSPC),
X (NOACCESS, EFAULT), X (NOACCESS, EFAULT),
X (FILE_INVALID, ENXIO), X (FILE_INVALID, ENXIO),
X (INVALID_ADDRESS, EOVERFLOW),
{ 0, NULL, 0} { 0, NULL, 0}
}; };
@ -290,6 +291,8 @@ const NO_COPY char __declspec(dllexport) * const _sys_errlist[]=
/* ENOMEDIUM 135 */ "no medium", /* ENOMEDIUM 135 */ "no medium",
/* ENOSHARE 136 */ "No such host or network path", /* ENOSHARE 136 */ "No such host or network path",
/* ECASECLASH 137 */ "Filename exists with different case" /* ECASECLASH 137 */ "Filename exists with different case"
/* EILSEQ 138 */ "Illegal byte sequence"
/* EOVERFLOW 139 */ "Value too large for defined data type"
}; };
extern int const NO_COPY __declspec(dllexport) _sys_nerr = sizeof (_sys_errlist) / sizeof (_sys_errlist[0]); extern int const NO_COPY __declspec(dllexport) _sys_nerr = sizeof (_sys_errlist) / sizeof (_sys_errlist[0]);
@ -671,6 +674,12 @@ strerror (int errnum)
case ECASECLASH: case ECASECLASH:
error = "Filename exists with different case"; error = "Filename exists with different case";
break; break;
case EILSEQ:
error = "Illegal byte sequence";
break;
case EOVERFLOW:
error = "Value too large for defined data type";
break;
default: default:
#ifdef _MT_SAFE #ifdef _MT_SAFE
char *buf= _reent_winsup ()->_strerror_buf; char *buf= _reent_winsup ()->_strerror_buf;

View File

@ -151,7 +151,7 @@ mmap_record::map_map (__off64_t off, DWORD len)
&& !VirtualProtect (base_address_ + off * getpagesize (), && !VirtualProtect (base_address_ + off * getpagesize (),
len * getpagesize (), prot, &old_prot)) len * getpagesize (), prot, &old_prot))
{ {
debug_printf ("-1 = map_map (): %E"); __seterrno ();
return (__off64_t)-1; return (__off64_t)-1;
} }
@ -167,7 +167,7 @@ mmap_record::map_map (__off64_t off, DWORD len)
&& !VirtualProtect (base_address_ + start * getpagesize (), && !VirtualProtect (base_address_ + start * getpagesize (),
len * getpagesize (), prot, &old_prot)) len * getpagesize (), prot, &old_prot))
{ {
debug_printf ("-1 = map_map (): %E"); __seterrno ();
return (__off64_t)-1; return (__off64_t)-1;
} }
@ -517,8 +517,7 @@ mmap64 (caddr_t addr, size_t len, int prot, int flags, int fd, __off64_t off)
{ {
if ((off = rec->map_map (off, len)) == (__off64_t)-1) if ((off = rec->map_map (off, len)) == (__off64_t)-1)
{ {
set_errno (ENOMEM); syscall_printf ("-1 = mmap()");
syscall_printf ("-1 = mmap(): ENOMEM");
ReleaseResourceLock (LOCK_MMAP_LIST, READ_LOCK|WRITE_LOCK, "mmap"); ReleaseResourceLock (LOCK_MMAP_LIST, READ_LOCK|WRITE_LOCK, "mmap");
return MAP_FAILED; return MAP_FAILED;
} }
@ -583,8 +582,7 @@ mmap64 (caddr_t addr, size_t len, int prot, int flags, int fd, __off64_t off)
{ {
fh->munmap (h, base, gran_len); fh->munmap (h, base, gran_len);
l->erase (); l->erase ();
set_errno (ENOMEM); syscall_printf ("-1 = mmap()");
syscall_printf ("-1 = mmap(): ENOMEM");
ReleaseResourceLock (LOCK_MMAP_LIST, READ_LOCK | WRITE_LOCK, "mmap"); ReleaseResourceLock (LOCK_MMAP_LIST, READ_LOCK | WRITE_LOCK, "mmap");
return MAP_FAILED; return MAP_FAILED;
} }