]> mj.ucw.cz Git - libucw.git/commitdiff
New functions for manipulating attribute lists: obj_prepend_attr()
authorMartin Mares <mj@ucw.cz>
Sat, 8 Jun 2002 14:00:33 +0000 (14:00 +0000)
committerMartin Mares <mj@ucw.cz>
Sat, 8 Jun 2002 14:00:33 +0000 (14:00 +0000)
and obj_insert_attr().

lib/lib.h
lib/object.c

index 7b406dd90fa36289f665a47dbc40453b14c5cede..7c3eb5ff472f367bb8efc82a1dad862f07148db6 100644 (file)
--- a/lib/lib.h
+++ b/lib/lib.h
@@ -118,6 +118,8 @@ byte *obj_find_aval(struct odes *, uns);
 struct oattr *obj_set_attr(struct odes *, uns, byte *);
 struct oattr *obj_set_attr_num(struct odes *, uns, uns);
 struct oattr *obj_add_attr(struct odes *, struct oattr *, uns, byte *);
+struct oattr *obj_prepend_attr(struct odes *, uns, byte *);
+struct oattr *obj_insert_attr(struct odes *o, struct oattr *first, struct oattr *after, byte *v);
 
 /* Content-Type pattern matching and filters */
 
index 839bc65e558ad6dd4f8735fad4110854de475e3b..0a0686540ab36aa3a6cdebfeae6c088e83cf3bf7 100644 (file)
@@ -222,3 +222,39 @@ obj_add_attr(struct odes *o, struct oattr *a, uns x, byte *v)
   a->last_same = b;
   return a;
 }
+
+struct oattr *
+obj_prepend_attr(struct odes *o, uns x, byte *v)
+{
+  struct oattr *a, *b, **z;
+
+  b = oa_new(o, x, v);
+  z = &o->attrs;
+  while (a = *z)
+    {
+      if (a->attr == x)
+       {
+         b->same = a;
+         *z = b;
+         b->last_same = a->last_same;
+         return b;
+       }
+      z = &a->next;
+    }
+  b->next = o->attrs;
+  o->attrs = b;
+  return b;
+}
+
+struct oattr *
+obj_insert_attr(struct odes *o, struct oattr *first, struct oattr *after, byte *v)
+{
+  struct oattr *b;
+
+  b = oa_new(o, first->attr, v);
+  b->same = after->same;
+  after->same = b;
+  if (first->last_same == after)
+    first->last_same = b;
+  return b;
+}