]> mj.ucw.cz Git - libucw.git/blobdiff - lib/buckettool.c
Let bskip() return success.
[libucw.git] / lib / buckettool.c
index 2b4ff592f226c47fc93f91f6e4546d64712a63ad..6458c539a1268ad342cdbcabc76b6967f3738ca2 100644 (file)
@@ -92,10 +92,11 @@ delete(char *id)
 }
 
 static inline void
-dump_oattrs(struct fastbuf *out, struct oattr *a)
+dump_oattrs(struct fastbuf *out, struct oattr *oa)
 {
-  for (; a; a = a->same)
-    bprintf(out, "%c%s\n", a->attr, a->val);
+  for (; oa; oa = oa->next)
+    for (struct oattr *a=oa; a; a = a->same)
+      bprintf(out, "%c%s\n", a->attr, a->val);
 }
 
 static void
@@ -119,20 +120,17 @@ static void
 extract(char *id)
 {
   struct fastbuf *b, *out;
-  byte buf[1024];
-  int l;
   struct obuck_header h;
 
   h.oid = parse_id(id);
   obuck_init(0);
   obuck_find_by_oid(&h);
   out = bfdopen_shared(1, 65536);
+  if (verbose)
+    bprintf(out, "### %08x %6d %08x\n", h.oid, h.length, h.type);
   b = obuck_fetch();
   if (h.type < BUCKET_TYPE_V33 || !buck_buf)
-  {
-    while ((l = bread(b, buf, sizeof(buf))))
-      bwrite(out, buf, l);
-  }
+    bbcopy_slow(b, out, ~0U);
   else
     dump_parsed_bucket(out, &h, b);
   bclose(b);
@@ -158,7 +156,7 @@ insert(byte *arg)
     die("Type `%s' is not a hexadecimal number");
   if (type < 10)
     type += BUCKET_TYPE_PLAIN;
-  attr_set_type(type);
+  put_attr_set_type(type);
 
   in = bfdopen_shared(0, 4096);
   obuck_init(1);
@@ -201,6 +199,11 @@ insert(byte *arg)
        bputl(b, lizard_filled
 #if 0  //TEST error resilience: write wrong length
            +1
+#endif
+           );
+       bputl(b, adler32(lizard_buf.ptr, lizard_filled)
+#if 0  //TEST error resilience: write wrong checksum
+           +1
 #endif
            );
        uns want_len = lizard_filled * LIZARD_MAX_MULTIPLY + LIZARD_MAX_ADD;
@@ -233,7 +236,7 @@ cat(void)
 
   obuck_init(0);
   out = bfdopen_shared(1, 65536);
-  while (b = obuck_slurp_pool(&h))
+  while (b = obuck_slurp_pool(&h, OBUCK_OID_ANY))
     {
       bprintf(out, "### %08x %6d %08x\n", h.oid, h.length, h.type);
       if (h.type < BUCKET_TYPE_V33 || !buck_buf)
@@ -249,6 +252,7 @@ cat(void)
       }
       else
        dump_parsed_bucket(out, &h, b);
+      bputc(out, '\n');
     }
   bclose(out);
   obuck_cleanup();