diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 863fb0c7f..099eb009a 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -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>
 
 	* mmap.cc (map_map): Add debug output.
diff --git a/winsup/cygwin/errno.cc b/winsup/cygwin/errno.cc
index 7cc3684e0..d37f7c337 100644
--- a/winsup/cygwin/errno.cc
+++ b/winsup/cygwin/errno.cc
@@ -112,6 +112,7 @@ errmap[] =
   X (DISK_FULL,			ENOSPC),
   X (NOACCESS,			EFAULT),
   X (FILE_INVALID,		ENXIO),
+  X (INVALID_ADDRESS,		EOVERFLOW),
   { 0, NULL, 0}
 };
 
@@ -290,6 +291,8 @@ const NO_COPY char __declspec(dllexport) * const _sys_errlist[]=
 /* ENOMEDIUM 135 */ "no medium",
 /* ENOSHARE 136 */   "No such host or network path",
 /* 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]);
@@ -671,6 +674,12 @@ strerror (int errnum)
     case ECASECLASH:
       error = "Filename exists with different case";
       break;
+    case EILSEQ:
+      error = "Illegal byte sequence";
+      break;
+    case EOVERFLOW:
+      error = "Value too large for defined data type";
+      break;
     default:
 #ifdef _MT_SAFE
       char *buf= _reent_winsup ()->_strerror_buf;
diff --git a/winsup/cygwin/mmap.cc b/winsup/cygwin/mmap.cc
index 68d993cdd..cb0d47647 100644
--- a/winsup/cygwin/mmap.cc
+++ b/winsup/cygwin/mmap.cc
@@ -151,7 +151,7 @@ mmap_record::map_map (__off64_t off, DWORD len)
 	      && !VirtualProtect (base_address_ + off * getpagesize (),
 				  len * getpagesize (), prot, &old_prot))
 	    {
-	      debug_printf ("-1 = map_map (): %E");
+	      __seterrno ();
 	      return (__off64_t)-1;
 	    }
 
@@ -167,7 +167,7 @@ mmap_record::map_map (__off64_t off, DWORD len)
       && !VirtualProtect (base_address_ + start * getpagesize (),
 			  len * getpagesize (), prot, &old_prot))
     {
-      debug_printf ("-1 = map_map (): %E");
+      __seterrno ();
       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)
 	    {
-	      set_errno (ENOMEM);
-	      syscall_printf ("-1 = mmap(): ENOMEM");
+	      syscall_printf ("-1 = mmap()");
 	      ReleaseResourceLock (LOCK_MMAP_LIST, READ_LOCK|WRITE_LOCK, "mmap");
 	      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);
       l->erase ();
-      set_errno (ENOMEM);
-      syscall_printf ("-1 = mmap(): ENOMEM");
+      syscall_printf ("-1 = mmap()");
       ReleaseResourceLock (LOCK_MMAP_LIST, READ_LOCK | WRITE_LOCK, "mmap");
       return MAP_FAILED;
     }