Index: uspace/lib/c/generic/adt/dyn_array.c
===================================================================
--- uspace/lib/c/generic/adt/dyn_array.c	(revision c8891c83329c3ad4fb900899aff9a4bb13976a70)
+++ uspace/lib/c/generic/adt/dyn_array.c	(revision 2dda1d498af4053267f8bb5714b994ecc0c1fad9)
@@ -45,8 +45,5 @@
 
 
-static void dyn_array_clear(dyn_array_t *da)
-{
-	da->size = 0;
-}
+
 
 static int dyn_array_realloc(dyn_array_t *da, size_t capacity)
@@ -80,9 +77,15 @@
 }
 
+/** Clear dynamic array (empty) */
+void dyn_array_clear(dyn_array_t *da)
+{
+	da->size = 0;
+}
+
 int _dyn_array_initialize(dyn_array_t *da, size_t item_size, size_t capacity)
 {
 	da->_item_size = item_size;
 	da->_data = NULL;
-	
+
 	da->capacity = 0;
 	da->size = 0;
Index: uspace/lib/c/include/adt/dyn_array.h
===================================================================
--- uspace/lib/c/include/adt/dyn_array.h	(revision c8891c83329c3ad4fb900899aff9a4bb13976a70)
+++ uspace/lib/c/include/adt/dyn_array.h	(revision 2dda1d498af4053267f8bb5714b994ecc0c1fad9)
@@ -97,5 +97,7 @@
 /** Dynamic array iteration
  *
- * @param[in]  it   name of variable used as iterator, it's pointer to @p type
+ * @param[in]  dyn_array   dyn_array_t (not pointer)
+ * @param[in]  it          name of variable used as iterator, it's pointer
+ *                         to @p type
  */
 #define dyn_array_foreach(dyn_array, type, it)                                 \
@@ -103,7 +105,26 @@
 	    it != ((type *)(dyn_array)._data + (dyn_array).size); ++it)
 
+/** Find first occurence of value
+ *
+ * @param[in]  dyn_array   dyn_array_t *
+ * @param[in]  value       value to search for
+ *
+ * @return  index of found value or size of array when no found
+ */
+#define dyn_array_find(dyn_array, type, value)                                 \
+({                                                                             \
+ 	size_t _result = (dyn_array)->size;                                    \
+	dyn_array_foreach(*(dyn_array), type, _it) {                           \
+ 		if (*_it == value) {                                           \
+			_result = _it - (type *)(dyn_array)->_data;            \
+ 			break;                                                 \
+ 		}                                                              \
+ 	}                                                                      \
+ 	_result;                                                               \
+})
 
 extern void dyn_array_destroy(dyn_array_t *);
 extern void dyn_array_remove(dyn_array_t *, size_t);
+void dyn_array_clear(dyn_array_t *);
 
 extern int _dyn_array_initialize(dyn_array_t *, size_t, size_t);
Index: uspace/lib/c/test/dyn_array.c
===================================================================
--- uspace/lib/c/test/dyn_array.c	(revision c8891c83329c3ad4fb900899aff9a4bb13976a70)
+++ uspace/lib/c/test/dyn_array.c	(revision 2dda1d498af4053267f8bb5714b994ecc0c1fad9)
@@ -124,4 +124,14 @@
 }
 
+PCUT_TEST(find) {
+	dyn_array_append(&da, data_t, 10);
+	dyn_array_append(&da, data_t, 11);
+	dyn_array_append(&da, data_t, 12);
+	dyn_array_append(&da, data_t, 99);
+
+	PCUT_ASSERT_INT_EQUALS(0, dyn_array_find(&da, data_t, 10));
+	PCUT_ASSERT_INT_EQUALS(3, dyn_array_find(&da, data_t, 99));
+	PCUT_ASSERT_INT_EQUALS(4, dyn_array_find(&da, data_t, 666));
+}
 
 PCUT_EXPORT(dyn_array);
