OSDN Git Service

Merge remote-tracking branch 'toybox/master' into HEAD am: f353b240a5
[android-x86/external-toybox.git] / lib / llist.c
index 6b4b8f2..dbb5352 100644 (file)
@@ -99,3 +99,32 @@ void *dlist_terminate(void *list)
 
   return end;
 }
+
+// Find num in cache
+struct num_cache *get_num_cache(struct num_cache *cache, long long num)
+{
+  while (cache) {
+    if (num==cache->num) return cache;
+    cache = cache->next;
+  }
+
+  return 0;
+}
+
+// Uniquely add num+data to cache. Updates *cache, returns pointer to existing
+// entry if it was already there.
+struct num_cache *add_num_cache(struct num_cache **cache, long long num,
+  void *data, int len)
+{
+  struct num_cache *old = get_num_cache(*cache, num);
+
+  if (old) return old;
+
+  old = xzalloc(sizeof(struct num_cache)+len);
+  old->next = *cache;
+  old->num = num;
+  memcpy(old->data, data, len);
+  *cache = old;
+
+  return 0;
+}