summaryrefslogtreecommitdiff
path: root/lib/vma-iter.c
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2017-03-10 18:08:18 +0100
committerBruno Haible <bruno@clisp.org>2017-03-10 18:48:31 +0100
commit3e18c0086696f7f3c7fb55b6d5f7e357e918a25c (patch)
tree35b407d1d3bf462cf3bb262716e2ffc1bcc83c40 /lib/vma-iter.c
parent405cd675384221b541b460c43de26d159914fe0a (diff)
downloadgnulib-3e18c0086696f7f3c7fb55b6d5f7e357e918a25c.tar.gz
vma-iter: Let callers know about error.
* lib/vma-iter.h (vma_iterate): Return 'int', not 'void'. * lib/vma-iter.c (vma_iterate): Return -1 in case of error.
Diffstat (limited to 'lib/vma-iter.c')
-rw-r--r--lib/vma-iter.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/lib/vma-iter.c b/lib/vma-iter.c
index f2c5282b84..d5ff6ff9d3 100644
--- a/lib/vma-iter.c
+++ b/lib/vma-iter.c
@@ -157,7 +157,7 @@ rof_close (struct rofile *rof)
#endif
-void
+int
vma_iterate (vma_iterate_callback_fn callback, void *data)
{
#if defined __linux__ /* || defined __CYGWIN__ */
@@ -167,7 +167,7 @@ vma_iterate (vma_iterate_callback_fn callback, void *data)
/* Open the current process' maps file. It describes one VMA per line. */
if (rof_open (&rof, "/proc/self/maps") < 0)
- return;
+ return -1;
for (;;)
{
@@ -199,6 +199,7 @@ vma_iterate (vma_iterate_callback_fn callback, void *data)
break;
}
rof_close (&rof);
+ return 0;
#elif defined __FreeBSD__ || defined __NetBSD__
@@ -207,7 +208,7 @@ vma_iterate (vma_iterate_callback_fn callback, void *data)
/* Open the current process' maps file. It describes one VMA per line. */
if (rof_open (&rof, "/proc/curproc/map") < 0)
- return;
+ return -1;
for (;;)
{
@@ -246,6 +247,7 @@ vma_iterate (vma_iterate_callback_fn callback, void *data)
break;
}
rof_close (&rof);
+ return 0;
#elif defined __sgi || defined __osf__ /* IRIX, OSF/1 */
@@ -284,7 +286,7 @@ vma_iterate (vma_iterate_callback_fn callback, void *data)
fd = open (fname, O_RDONLY);
if (fd < 0)
- return;
+ return -1;
if (ioctl (fd, PIOCNMAP, &nmaps) < 0)
goto fail2;
@@ -351,13 +353,13 @@ vma_iterate (vma_iterate_callback_fn callback, void *data)
}
munmap (auxmap, memneed);
close (fd);
- return;
+ return 0;
fail1:
munmap (auxmap, memneed);
fail2:
close (fd);
- return;
+ return -1;
#elif defined __APPLE__ && defined __MACH__ /* Mac OS X */
@@ -419,6 +421,7 @@ vma_iterate (vma_iterate_callback_fn callback, void *data)
if (callback (data, address, address + size, flags))
break;
}
+ return 0;
#elif (defined _WIN32 || defined __WIN32__) || defined __CYGWIN__
/* Windows platform. Use the native Windows API. */
@@ -470,6 +473,7 @@ vma_iterate (vma_iterate_callback_fn callback, void *data)
}
address = (uintptr_t)info.BaseAddress + info.RegionSize;
}
+ return 0;
#elif defined __BEOS__ || defined __HAIKU__
/* Use the BeOS specific API. */
@@ -494,6 +498,7 @@ vma_iterate (vma_iterate_callback_fn callback, void *data)
if (callback (data, start, end, flags))
break;
}
+ return 0;
#elif HAVE_MQUERY /* OpenBSD */
@@ -587,6 +592,12 @@ vma_iterate (vma_iterate_callback_fn callback, void *data)
if (address + pagesize - 1 < pagesize) /* wrap around? */
break;
}
+ return 0;
+
+#else
+
+ /* Not implemented. */
+ return -1;
#endif
}