]> Savannah Git Hosting - gnulib.git/commitdiff
vma-iter: Let callers know about error.
authorBruno Haible <bruno@clisp.org>
Fri, 10 Mar 2017 17:08:18 +0000 (18:08 +0100)
committerBruno Haible <bruno@clisp.org>
Fri, 10 Mar 2017 17:48:31 +0000 (18:48 +0100)
* lib/vma-iter.h (vma_iterate): Return 'int', not 'void'.
* lib/vma-iter.c (vma_iterate): Return -1 in case of error.

ChangeLog
lib/vma-iter.c
lib/vma-iter.h

index c47e0e2a194e29349c60919744273ac3e6da6b62..7a1e5efcc7ce9e48033ca2c3edbe20101c4b63bf 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2017-03-10  Bruno Haible  <bruno@clisp.org>
+
+       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.
+
 2017-03-05  Bruno Haible  <bruno@clisp.org>
 
        Fix value of LD for 64-bit compilers on AIX.
index f2c5282b84b3ecbfc9ebd3d127ccf088d7a14e55..d5ff6ff9d36f6e20ac6bdb5ddea114f1d649d4ea 100644 (file)
@@ -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
 }
index 0c00159b192eba51e2c7ee8d326e7da351909426..36c8d6651f3ba95d063db38ad85505d7c156bfe4 100644 (file)
@@ -44,8 +44,9 @@ typedef int (*vma_iterate_callback_fn) (void *data,
      - FLAGS is a combination of the VMA_* bits.
    If the callback returns 0, the iteration continues.  If it returns 1,
    the iteration terminates prematurely.
-   This function may open file descriptors, but does not call malloc().  */
-extern void vma_iterate (vma_iterate_callback_fn callback, void *data);
+   This function may open file descriptors, but does not call malloc().
+   Return 0 if all went well, or -1 in case of error.  */
+extern int vma_iterate (vma_iterate_callback_fn callback, void *data);
 
 /* The macro VMA_ITERATE_SUPPORTED indicates that vma_iterate is supported on
    this platform.