OSDN Git Service

Eliminate most unneeded this-> pointers throughout.
[pf3gnuchains/pf3gnuchains3x.git] / winsup / cygwin / fhandler_mem.cc
index 08ea95d..35157e8 100644 (file)
@@ -1,6 +1,6 @@
 /* fhandler_mem.cc.  See fhandler.h for a description of the fhandler classes.
 
-   Copyright 2000, 2001 Red Hat, Inc.
+   Copyright 2000, 2001, 2002 Red Hat, Inc.
 
    This file is part of Cygwin.
 
@@ -9,7 +9,6 @@
    details. */
 
 #include "winsup.h"
-#include <fcntl.h>
 #include <errno.h>
 #include <unistd.h>
 #include <sys/mman.h>
 /**********************************************************************/
 /* fhandler_dev_mem */
 
-fhandler_dev_mem::fhandler_dev_mem (const char *name, int nunit)
-: fhandler_base (FH_MEM, name),
-  unit (nunit)
+fhandler_dev_mem::fhandler_dev_mem (int nunit)
+  : fhandler_base (FH_MEM), unit (nunit)
 {
   /* Reading physical memory only supported on NT/W2K. */
-  if (os_being_run != winNT)
+  if (!wincap.has_physical_mem_access ())
     {
       mem_size = 0;
       return;
@@ -39,15 +37,15 @@ fhandler_dev_mem::fhandler_dev_mem (const char *name, int nunit)
       NTSTATUS ret;
       SYSTEM_BASIC_INFORMATION sbi;
       if ((ret = NtQuerySystemInformation (SystemBasicInformation, (PVOID) &sbi,
-                                           sizeof sbi, NULL)) != STATUS_SUCCESS)
-        {
-          __seterrno_from_win_error (RtlNtStatusToDosError (ret));
-          debug_printf("NtQuerySystemInformation: ret = %d, Dos(ret) = %d",
-                       ret, RtlNtStatusToDosError (ret));
-          mem_size = 0;
-        }
+                                          sizeof sbi, NULL)) != STATUS_SUCCESS)
+       {
+         __seterrno_from_win_error (RtlNtStatusToDosError (ret));
+         debug_printf("NtQuerySystemInformation: ret = %d, Dos(ret) = %d",
+                      ret, RtlNtStatusToDosError (ret));
+         mem_size = 0;
+       }
       else
-        mem_size = sbi.PhysicalPageSize * sbi.NumberOfPhysicalPages;
+       mem_size = sbi.PhysicalPageSize * sbi.NumberOfPhysicalPages;
       debug_printf ("MemSize: %d MB", mem_size >> 20);
     }
   else if (unit == 2) /* /dev/kmem - Not yet supported */
@@ -72,15 +70,15 @@ fhandler_dev_mem::~fhandler_dev_mem (void)
 }
 
 int
-fhandler_dev_mem::open (const char *, int flags, mode_t)
+fhandler_dev_mem::open (path_conv *, int flags, mode_t)
 {
-  if (os_being_run != winNT)
+  if (!wincap.has_physical_mem_access ())
     {
       set_errno (ENOENT);
       debug_printf ("%s is accessible under NT/W2K only",
-                    unit == 1 ? "/dev/mem" :
-                    unit == 2 ? "/dev/kmem" :
-                                "/dev/port");
+                   unit == 1 ? "/dev/mem" :
+                   unit == 2 ? "/dev/kmem" :
+                               "/dev/port");
       return 0;
     }
 
@@ -95,9 +93,9 @@ fhandler_dev_mem::open (const char *, int flags, mode_t)
   RtlInitUnicodeString (&memstr, L"\\device\\physicalmemory");
 
   OBJECT_ATTRIBUTES attr;
-  InitializeObjectAttributes(&attr, &memstr,
-                            OBJ_CASE_INSENSITIVE | OBJ_INHERIT,
-                            NULL, NULL);
+  InitializeObjectAttributes (&attr, &memstr,
+                             OBJ_CASE_INSENSITIVE | OBJ_INHERIT,
+                             NULL, NULL);
 
   ACCESS_MASK section_access;
   if ((flags & (O_RDONLY | O_WRONLY | O_RDWR)) == O_RDONLY)
@@ -118,7 +116,7 @@ fhandler_dev_mem::open (const char *, int flags, mode_t)
 
   HANDLE mem;
   NTSTATUS ret = NtOpenSection (&mem, section_access, &attr);
-  if (!NT_SUCCESS(ret))
+  if (!NT_SUCCESS (ret))
     {
       __seterrno_from_win_error (RtlNtStatusToDosError (ret));
       set_io_handle (NULL);
@@ -152,15 +150,15 @@ fhandler_dev_mem::write (const void *ptr, size_t ulen)
 
   phys.QuadPart = (ULONGLONG) pos;
   if ((ret = NtMapViewOfSection (get_handle (),
-                                 INVALID_HANDLE_VALUE,
-                                 &viewmem,
-                                 0L,
-                                 len,
-                                 &phys,
-                                 &len,
-                                 ViewShare,
-                                 0,
-                                 PAGE_READONLY)) != STATUS_SUCCESS)
+                                INVALID_HANDLE_VALUE,
+                                &viewmem,
+                                0L,
+                                len,
+                                &phys,
+                                &len,
+                                ViewShare,
+                                0,
+                                PAGE_READONLY)) != STATUS_SUCCESS)
     {
       __seterrno_from_win_error (RtlNtStatusToDosError (ret));
       return -1;
@@ -168,7 +166,7 @@ fhandler_dev_mem::write (const void *ptr, size_t ulen)
 
   memcpy ((char *) viewmem + (pos - phys.QuadPart), ptr, ulen);
 
-  if (!NT_SUCCESS(ret = NtUnmapViewOfSection (INVALID_HANDLE_VALUE, viewmem)))
+  if (!NT_SUCCESS (ret = NtUnmapViewOfSection (INVALID_HANDLE_VALUE, viewmem)))
     {
       __seterrno_from_win_error (RtlNtStatusToDosError (ret));
       return -1;
@@ -178,16 +176,20 @@ fhandler_dev_mem::write (const void *ptr, size_t ulen)
   return ulen;
 }
 
-int
-fhandler_dev_mem::read (void *ptr, size_t ulen)
+void __stdcall
+fhandler_dev_mem::read (void *ptr, size_t& ulen)
 {
   if (!ulen || pos >= mem_size)
-    return 0;
+    {
+      ulen = 0;
+      return;
+    }
 
   if (!(get_access () & GENERIC_READ))
     {
       set_errno (EINVAL);
-      return -1;
+      (ssize_t) ulen = -1;
+      return;
     }
 
   if (pos + ulen > mem_size)
@@ -200,30 +202,32 @@ fhandler_dev_mem::read (void *ptr, size_t ulen)
 
   phys.QuadPart = (ULONGLONG) pos;
   if ((ret = NtMapViewOfSection (get_handle (),
-                                 INVALID_HANDLE_VALUE,
-                                 &viewmem,
-                                 0L,
-                                 len,
-                                 &phys,
-                                 &len,
-                                 ViewShare,
-                                 0,
-                                 PAGE_READONLY)) != STATUS_SUCCESS)
+                                INVALID_HANDLE_VALUE,
+                                &viewmem,
+                                0L,
+                                len,
+                                &phys,
+                                &len,
+                                ViewShare,
+                                0,
+                                PAGE_READONLY)) != STATUS_SUCCESS)
     {
       __seterrno_from_win_error (RtlNtStatusToDosError (ret));
-      return -1;
+      (ssize_t) ulen = -1;
+      return;
     }
 
   memcpy (ptr, (char *) viewmem + (pos - phys.QuadPart), ulen);
 
-  if (!NT_SUCCESS(ret = NtUnmapViewOfSection (INVALID_HANDLE_VALUE, viewmem)))
+  if (!NT_SUCCESS (ret = NtUnmapViewOfSection (INVALID_HANDLE_VALUE, viewmem)))
     {
       __seterrno_from_win_error (RtlNtStatusToDosError (ret));
-      return -1;
+      (ssize_t) ulen = -1;
+      return;
     }
 
   pos += ulen;
-  return ulen;
+  return;
 }
 
 int
@@ -232,8 +236,8 @@ fhandler_dev_mem::close (void)
   return fhandler_base::close ();
 }
 
-off_t
-fhandler_dev_mem::lseek (off_t offset, int whence)
+__off64_t
+fhandler_dev_mem::lseek (__off64_t offset, int whence)
 {
   switch (whence)
     {
@@ -252,13 +256,13 @@ fhandler_dev_mem::lseek (off_t offset, int whence)
 
     default:
       set_errno (EINVAL);
-      return (off_t) -1;
+      return ILLEGAL_SEEK;
     }
 
   if (pos > mem_size)
     {
       set_errno (EINVAL);
-      return (off_t) -1;
+      return ILLEGAL_SEEK;
     }
 
   return pos;
@@ -266,11 +270,11 @@ fhandler_dev_mem::lseek (off_t offset, int whence)
 
 HANDLE
 fhandler_dev_mem::mmap (caddr_t *addr, size_t len, DWORD access,
-                       int flags, off_t off)
+                       int flags, __off64_t off)
 {
-  if ((DWORD) off >= mem_size
+  if (off >= mem_size
       || (DWORD) len >= mem_size
-      || (DWORD) off + len >= mem_size)
+      || off + len >= mem_size)
     {
       set_errno (EINVAL);
       syscall_printf ("-1 = mmap(): illegal parameter, set EINVAL");
@@ -281,9 +285,9 @@ fhandler_dev_mem::mmap (caddr_t *addr, size_t len, DWORD access,
   RtlInitUnicodeString (&memstr, L"\\device\\physicalmemory");
 
   OBJECT_ATTRIBUTES attr;
-  InitializeObjectAttributes(&attr, &memstr,
-                            OBJ_CASE_INSENSITIVE | OBJ_INHERIT,
-                            NULL, NULL);
+  InitializeObjectAttributes (&attr, &memstr,
+                             OBJ_CASE_INSENSITIVE | OBJ_INHERIT,
+                             NULL, NULL);
 
   ACCESS_MASK section_access;
   ULONG protect;
@@ -306,7 +310,7 @@ fhandler_dev_mem::mmap (caddr_t *addr, size_t len, DWORD access,
 
   HANDLE h;
   NTSTATUS ret = NtOpenSection (&h, section_access, &attr);
-  if (!NT_SUCCESS(ret))
+  if (!NT_SUCCESS (ret))
     {
       __seterrno_from_win_error (RtlNtStatusToDosError (ret));
       syscall_printf ("-1 = mmap(): NtOpenSection failed with %E");
@@ -350,7 +354,7 @@ int
 fhandler_dev_mem::munmap (HANDLE h, caddr_t addr, size_t len)
 {
   NTSTATUS ret;
-  if (!NT_SUCCESS(ret = NtUnmapViewOfSection (INVALID_HANDLE_VALUE, addr)))
+  if (!NT_SUCCESS (ret = NtUnmapViewOfSection (INVALID_HANDLE_VALUE, addr)))
     {
       __seterrno_from_win_error (RtlNtStatusToDosError (ret));
       return -1;
@@ -403,23 +407,15 @@ fhandler_dev_mem::fixup_mmap_after_fork (HANDLE h, DWORD access, DWORD offset,
 }
 
 int
-fhandler_dev_mem::fstat (struct stat *buf)
+fhandler_dev_mem::fstat (struct __stat64 *buf, path_conv *pc)
 {
-  if (!buf)
-    {
-      set_errno (EINVAL);
-      return -1;
-    }
-
-  memset (buf, 0, sizeof *buf);
+  fhandler_base::fstat (buf, pc);
   buf->st_mode = S_IFCHR;
-  if (os_being_run != winNT)
+  if (wincap.has_physical_mem_access ())
     buf->st_mode |= S_IRUSR | S_IWUSR |
                    S_IRGRP | S_IWGRP |
                    S_IROTH | S_IWOTH;
-  buf->st_nlink = 1;
   buf->st_blksize = getpagesize ();
-  buf->st_dev = buf->st_rdev = get_device () << 8 | (unit & 0xff);
 
   return 0;
 }
@@ -442,5 +438,5 @@ fhandler_dev_mem::dup (fhandler_base *child)
 void
 fhandler_dev_mem::dump ()
 {
-  paranoid_printf("here, fhandler_dev_mem");
+  paranoid_printf ("here, fhandler_dev_mem");
 }