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