]> mj.ucw.cz Git - libucw.git/blobdiff - lib/object.c
Removed xprintf() -- it was very ugly and its only raison d'etre was
[libucw.git] / lib / object.c
index 839bc65e558ad6dd4f8735fad4110854de475e3b..d3e9b9aa4f45c316f2c0cdbed8e630f3d9786014 100644 (file)
@@ -2,6 +2,9 @@
  *     Sherlock Library -- Object Functions
  *
  *     (c) 1997--2001 Martin Mares <mj@ucw.cz>
+ *
+ *     This software may be freely distributed and used according to the terms
+ *     of the GNU Lesser General Public License.
  */
 
 #include "lib/lib.h"
@@ -60,7 +63,7 @@ obj_free(struct odes *o)
 int
 obj_read(struct fastbuf *f, struct odes *o)
 {
-  byte buf[1024];
+  byte buf[4096];
   struct oattr **last = &o->attrs;
   struct oattr *a, *la;
 
@@ -100,7 +103,7 @@ obj_write(struct fastbuf *f, struct odes *d)
       {
        bputc(f, a->attr);
        for(z = b->val; *z; z++)
-         if (*z >= ' ')
+         if (*z >= ' ' || *z == '\t')
            bputc(f, *z);
          else
            {
@@ -222,3 +225,41 @@ 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;
+         b->next = a->next;
+         a->next = NULL;
+         *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;
+}