summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/src/libndb/ndbdedup.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/sys/src/libndb/ndbdedup.c b/sys/src/libndb/ndbdedup.c
new file mode 100644
index 000000000..7c0c4284a
--- /dev/null
+++ b/sys/src/libndb/ndbdedup.c
@@ -0,0 +1,30 @@
+#include <u.h>
+#include <libc.h>
+#include <bio.h>
+#include <ndb.h>
+
+/*
+ * remove duplicates
+ */
+Ndbtuple*
+ndbdedup(Ndbtuple *t)
+{
+ Ndbtuple *nt, *last, *tt;
+
+ for(nt = t; nt != nil; nt = nt->entry){
+ last = nt;
+ for(tt = nt->entry; tt != nil; tt = last->entry){
+ if(strcmp(nt->attr, tt->attr) != 0
+ || strcmp(nt->val, tt->val) != 0){
+ last = tt;
+ continue;
+ }
+ if(last->line == tt)
+ last->line = tt->line;
+ last->entry = tt->entry;
+ tt->entry = nil;
+ ndbfree(tt);
+ }
+ }
+ return t;
+}