]> mj.ucw.cz Git - libucw.git/commitdiff
it is possible to specify whether the caller only wants the header or also
authorRobert Spalek <robert@ucw.cz>
Fri, 25 Jun 2004 16:58:55 +0000 (16:58 +0000)
committerRobert Spalek <robert@ucw.cz>
Fri, 25 Jun 2004 16:58:55 +0000 (16:58 +0000)
the body

lib/buck2obj.c
lib/buck2obj.h

index ef999f1228ee0c06d4d20c8628e5cc8d719252c4..4ea6a5cca1e96d76762c9d87468b219edd817197 100644 (file)
@@ -119,13 +119,18 @@ decode_attributes(byte *ptr, byte *end, struct odes *o, uns can_overwrite)
 }
 
 struct odes *
-buck2obj_convert(struct buck2obj_buf *buf, uns buck_type, struct fastbuf *body)
+buck2obj_convert(struct buck2obj_buf *buf, uns buck_type, struct fastbuf *body, uns want_body)
 {
   mp_flush(buf->mp);
   struct odes *o = obj_new(buf->mp);
 
   if (buck_type < BUCKET_TYPE_V33)
-    obj_read_multi(body, o);
+  {
+    if (want_body)                     // ignore empty lines, read until EOF
+      obj_read_multi(body, o);
+    else                               // end on EOF or the first empty line
+      obj_read(body, o);
+  }
   else
   {
     /* Compute the length of the bucket.  We cannot fetch this attribute
@@ -158,6 +163,8 @@ buck2obj_convert(struct buck2obj_buf *buf, uns buck_type, struct fastbuf *body)
     end = ptr + len;
 
     ptr = decode_attributes(ptr, end, o, can_overwrite);// header
+    if (!want_body)
+      return o;
     if (buck_type == BUCKET_TYPE_V33)
       ;
     else if (buck_type == BUCKET_TYPE_V33_LIZARD)      // decompression
index 87d64d922ff2ce6c73d40348f54c7bf09ab4c5c0..f2ca8966f924017be08bdb98ce83d0f844e5d468 100644 (file)
@@ -11,7 +11,7 @@ struct buck2obj_buf;
 struct buck2obj_buf *buck2obj_alloc(uns max_len, struct mempool *mp);
 void buck2obj_free(struct buck2obj_buf *buf);
 void buck2obj_realloc(struct buck2obj_buf *buf, uns max_len);
-struct odes *buck2obj_convert(struct buck2obj_buf *buf, uns buck_type, struct fastbuf *body);
+struct odes *buck2obj_convert(struct buck2obj_buf *buf, uns buck_type, struct fastbuf *body, uns want_body);
   /* If BCONFIG_CAN_OVERWRITE(body)==2, then the buffer of body has probably
    * been tampered (unless the bucket is larger than the buffer).  In such a
    * case, you must call bflush(body) before you do anything else than