Index: uspace/lib/c/include/adt/list.h
===================================================================
--- uspace/lib/c/include/adt/list.h	(revision 75c430e3f06e21429663d9c36e1d4a0a6f8c5660)
+++ uspace/lib/c/include/adt/list.h	(revision 47be5121774eb4440e3c88b9bfdac20ed2c047d9)
@@ -414,4 +414,18 @@
 }
 
+static inline void *list_pop_internal(list_t *list, ptrdiff_t offset)
+{
+	link_t *tmp = list_first(list);
+	if (tmp == NULL)
+		return NULL;
+
+	list_remove(tmp);
+	return ((void *) tmp) - offset;
+}
+
+#define list_pop(list, type, member) \
+	((type *) list_pop_internal(list, \
+	    (list_link_to_void(&(((type *) NULL)->member)) - NULL)))
+
 #endif
 
