Alexandre Julliard : libwine: Added a function to enumerate the reserved mmap areas.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Jul 24 13:15:04 CDT 2006


Module: wine
Branch: refs/heads/master
Commit: 0b39d1a89e00afec9d13adcad74df44ac2027102
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=0b39d1a89e00afec9d13adcad74df44ac2027102

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Mon Jul 24 13:59:10 2006 +0200

libwine: Added a function to enumerate the reserved mmap areas.

---

 include/wine/library.h |    2 ++
 libs/wine/mmap.c       |   35 +++++++++++++++++++++++++++++++++++
 libs/wine/wine.def     |    1 +
 libs/wine/wine.map     |    1 +
 4 files changed, 39 insertions(+), 0 deletions(-)

diff --git a/include/wine/library.h b/include/wine/library.h
index c593bd2..cbaa026 100644
--- a/include/wine/library.h
+++ b/include/wine/library.h
@@ -75,6 +75,8 @@ extern void *wine_anon_mmap( void *start
 extern void wine_mmap_add_reserved_area( void *addr, size_t size );
 extern void wine_mmap_remove_reserved_area( void *addr, size_t size, int unmap );
 extern int wine_mmap_is_in_reserved_area( void *addr, size_t size );
+extern int wine_mmap_enum_reserved_areas( int (*enum_func)(void *base, size_t size, void *arg),
+                                          void *arg, int top_down );
 
 /* LDT management */
 
diff --git a/libs/wine/mmap.c b/libs/wine/mmap.c
index 16bf302..a8654dc 100644
--- a/libs/wine/mmap.c
+++ b/libs/wine/mmap.c
@@ -539,3 +539,38 @@ int wine_mmap_is_in_reserved_area( void 
     }
     return 0;
 }
+
+
+/***********************************************************************
+ *           wine_mmap_enum_reserved_areas
+ *
+ * Enumerate the list of reserved areas, sorted by addresses.
+ * If enum_func returns a non-zero value, enumeration is stopped and the value is returned.
+ *
+ * Note: the reserved areas functions are not reentrant, caller is
+ * responsible for proper locking.
+ */
+int wine_mmap_enum_reserved_areas( int (*enum_func)(void *base, size_t size, void *arg), void *arg,
+                                   int top_down )
+{
+    int ret = 0;
+    struct list *ptr;
+
+    if (top_down)
+    {
+        for (ptr = reserved_areas.prev; ptr != &reserved_areas; ptr = ptr->prev)
+        {
+            struct reserved_area *area = LIST_ENTRY( ptr, struct reserved_area, entry );
+            if ((ret = enum_func( area->base, area->size, arg ))) break;
+        }
+    }
+    else
+    {
+        for (ptr = reserved_areas.next; ptr != &reserved_areas; ptr = ptr->next)
+        {
+            struct reserved_area *area = LIST_ENTRY( ptr, struct reserved_area, entry );
+            if ((ret = enum_func( area->base, area->size, arg ))) break;
+        }
+    }
+    return ret;
+}
diff --git a/libs/wine/wine.def b/libs/wine/wine.def
index 6fe8ade..462a619 100644
--- a/libs/wine/wine.def
+++ b/libs/wine/wine.def
@@ -103,6 +103,7 @@ EXPORTS
     wine_ldt_realloc_entries
     wine_ldt_set_entry
     wine_mmap_add_reserved_area
+    wine_mmap_enum_reserved_areas
     wine_mmap_is_in_reserved_area
     wine_mmap_remove_reserved_area
     wine_pthread_get_functions
diff --git a/libs/wine/wine.map b/libs/wine/wine.map
index 84e4e5d..47e58ce 100644
--- a/libs/wine/wine.map
+++ b/libs/wine/wine.map
@@ -103,6 +103,7 @@ WINE_1.0
     wine_ldt_realloc_entries;
     wine_ldt_set_entry;
     wine_mmap_add_reserved_area;
+    wine_mmap_enum_reserved_areas;
     wine_mmap_is_in_reserved_area;
     wine_mmap_remove_reserved_area;
     wine_pthread_get_functions;




More information about the wine-cvs mailing list