This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch master updated. glibc-2.25-466-gf8bf87f
- From: fw at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 13 Jun 2017 20:01:04 -0000
- Subject: GNU C Library master sources branch master updated. glibc-2.25-466-gf8bf87f
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".
The branch, master has been updated
via f8bf87face3304f216bcd838081fa33bb4976ac6 (commit)
from a65ea28d1833d3502c5070472e43bda04410e6b5 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=f8bf87face3304f216bcd838081fa33bb4976ac6
commit f8bf87face3304f216bcd838081fa33bb4976ac6
Author: Florian Weimer <fweimer@redhat.com>
Date: Tue Jun 13 17:03:56 2017 +0200
dynarray: Implement begin/end functions in the spirit of C++
diff --git a/ChangeLog b/ChangeLog
index 52ffaf8..efc78b5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2017-06-13 Florian Weimer <fweimer@redhat.com>
+
+ * malloc/dynarray-skeleton.c: List begin/end as defined functions.
+ (DYNARRAY_PREFIX##begin, DYNARRAY_PREFIX##end): New functions.
+ * malloc/tst-dynarray-shared.h (CHECK_EMPTY): Add tests for
+ begin/end.
+ * malloc/tst-dynarray.c (test_int): Test dynarray_int_begin,
+ dynarray_int_end.
+ (test_str): Test dynarray_str_begin, dynarray_str_end.
+
2017-06-13 H.J. Lu <hongjiu.lu@intel.com>
[BZ #21573]
diff --git a/malloc/dynarray-skeleton.c b/malloc/dynarray-skeleton.c
index 7a10e08..7ec5878 100644
--- a/malloc/dynarray-skeleton.c
+++ b/malloc/dynarray-skeleton.c
@@ -65,6 +65,8 @@
bool DYNARRAY_PREFIX##has_failed (const struct DYNARRAY_STRUCT *);
void DYNARRAY_PREFIX##mark_failed (struct DYNARRAY_STRUCT *);
size_t DYNARRAY_PREFIX##size (const struct DYNARRAY_STRUCT *);
+ DYNARRAY_ELEMENT *DYNARRAY_PREFIX##begin (const struct DYNARRAY_STRUCT *);
+ DYNARRAY_ELEMENT *DYNARRAY_PREFIX##end (const struct DYNARRAY_STRUCT *);
DYNARRAY_ELEMENT *DYNARRAY_PREFIX##at (struct DYNARRAY_STRUCT *, size_t);
void DYNARRAY_PREFIX##add (struct DYNARRAY_STRUCT *, DYNARRAY_ELEMENT);
DYNARRAY_ELEMENT *DYNARRAY_PREFIX##emplace (struct DYNARRAY_STRUCT *);
@@ -248,6 +250,26 @@ DYNARRAY_NAME (at) (struct DYNARRAY_STRUCT *list, size_t index)
return list->dynarray_header.array + index;
}
+/* Return a pointer to the first array element, if any. For a
+ zero-length array, the pointer can be NULL even though the dynamic
+ array has not entered the failure state. */
+__attribute__ ((nonnull (1)))
+static inline DYNARRAY_ELEMENT *
+DYNARRAY_NAME (begin) (struct DYNARRAY_STRUCT *list)
+{
+ return list->dynarray_header.array;
+}
+
+/* Return a pointer one element past the last array element. For a
+ zero-length array, the pointer can be NULL even though the dynamic
+ array has not entered the failure state. */
+__attribute__ ((nonnull (1)))
+static inline DYNARRAY_ELEMENT *
+DYNARRAY_NAME (end) (struct DYNARRAY_STRUCT *list)
+{
+ return list->dynarray_header.array + list->dynarray_header.used;
+}
+
/* Internal function. Slow path for the add function below. */
static void
DYNARRAY_NAME (add__) (struct DYNARRAY_STRUCT *list, DYNARRAY_ELEMENT item)
diff --git a/malloc/tst-dynarray-shared.h b/malloc/tst-dynarray-shared.h
index faba66f..1de9c04 100644
--- a/malloc/tst-dynarray-shared.h
+++ b/malloc/tst-dynarray-shared.h
@@ -73,5 +73,8 @@ struct str_array
TEST_VERIFY_EXIT (dynarray_##type##_emplace (dyn) == NULL); \
dynarray_##type##_free (dyn); \
CHECK_INIT_STATE (type, (dyn)); \
+ /* These functions should not assert. */ \
+ dynarray_##type##_begin (dyn); \
+ dynarray_##type##_end (dyn); \
(void) 0; \
})
diff --git a/malloc/tst-dynarray.c b/malloc/tst-dynarray.c
index 7aee85a..2206d75 100644
--- a/malloc/tst-dynarray.c
+++ b/malloc/tst-dynarray.c
@@ -111,6 +111,13 @@ test_int (void)
}
TEST_VERIFY_EXIT (dynarray_int_size (&dyn) == count);
TEST_VERIFY_EXIT (count <= dyn.dynarray_header.allocated);
+ if (count > 0)
+ {
+ TEST_VERIFY (dynarray_int_begin (&dyn)
+ == dynarray_int_at (&dyn, 0));
+ TEST_VERIFY (dynarray_int_end (&dyn)
+ == dynarray_int_at (&dyn, count - 1) + 1);
+ }
unsigned final_count;
bool heap_array = dyn.dynarray_header.array != dyn.scratch;
if (do_remove_last)
@@ -123,6 +130,13 @@ test_int (void)
}
else
final_count = count;
+ if (final_count > 0)
+ {
+ TEST_VERIFY (dynarray_int_begin (&dyn)
+ == dynarray_int_at (&dyn, 0));
+ TEST_VERIFY (dynarray_int_end (&dyn)
+ == dynarray_int_at (&dyn, final_count - 1) + 1);
+ }
if (do_clear)
{
dynarray_int_clear (&dyn);
@@ -225,6 +239,13 @@ test_str (void)
}
TEST_VERIFY_EXIT (dynarray_str_size (&dyn) == count);
TEST_VERIFY_EXIT (count <= dyn.dynarray_header.allocated);
+ if (count > 0)
+ {
+ TEST_VERIFY (dynarray_str_begin (&dyn)
+ == dynarray_str_at (&dyn, 0));
+ TEST_VERIFY (dynarray_str_end (&dyn)
+ == dynarray_str_at (&dyn, count - 1) + 1);
+ }
unsigned final_count;
bool heap_array = dyn.dynarray_header.array != dyn.scratch;
if (do_remove_last)
@@ -237,6 +258,13 @@ test_str (void)
}
else
final_count = count;
+ if (final_count > 0)
+ {
+ TEST_VERIFY (dynarray_str_begin (&dyn)
+ == dynarray_str_at (&dyn, 0));
+ TEST_VERIFY (dynarray_str_end (&dyn)
+ == dynarray_str_at (&dyn, final_count - 1) + 1);
+ }
if (do_clear)
{
dynarray_str_clear (&dyn);
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 10 ++++++++++
malloc/dynarray-skeleton.c | 22 ++++++++++++++++++++++
malloc/tst-dynarray-shared.h | 3 +++
malloc/tst-dynarray.c | 28 ++++++++++++++++++++++++++++
4 files changed, 63 insertions(+), 0 deletions(-)
hooks/post-receive
--
GNU C Library master sources