1 #include <check.h>
2 #include <stdlib.h>
3 #include <stdio.h>
4 #include "../../prng.h"
5 #include "../../../src/hexmap.h"
6 #include "../../../src/protocol2/blist.h"
7 #include "../../builders/build.h"
8
add_blk(struct blist * blist)9 static void add_blk(struct blist *blist)
10 {
11 struct blk *blk;
12 fail_unless((blk=blk_alloc())!=NULL);
13 blk->fingerprint=prng_next64();
14 prng_md5sum(blk->md5sum);
15 blk->savepath=prng_next64();
16 blist_add_blk(blist, blk);
17 }
18
add_blk_and_data_files(struct blist * blist,uint64_t save_path)19 static void add_blk_and_data_files(struct blist *blist, uint64_t save_path)
20 {
21 struct blk *blk;
22 fail_unless((blk=blk_alloc())!=NULL);
23 blk->fingerprint=prng_next64();
24 prng_md5sum(blk->md5sum);
25 blk->savepath=save_path;
26 blist_add_blk(blist, blk);
27 }
28
build_blks_with_data_files(struct blist * blist,int wanted,int blks_per_data_file)29 static void build_blks_with_data_files(struct blist *blist,
30 int wanted, int blks_per_data_file)
31 {
32 int i;
33 int b=0;
34 char savepathstr[20];
35 static int data_file=0;
36
37 for(i=0; i<wanted; i++)
38 {
39 snprintf(savepathstr, sizeof(savepathstr),
40 "0000/0000/%04X/%04X", data_file, b++);
41 if(b==blks_per_data_file)
42 {
43 b=0;
44 data_file++;
45 }
46 add_blk_and_data_files(blist,
47 savepathstr_with_sig_to_uint64(savepathstr));
48 }
49 data_file++;
50 }
51
build_blks(struct blist * blist,int wanted,int with_data_files)52 void build_blks(struct blist *blist, int wanted, int with_data_files)
53 {
54 int i;
55 if(with_data_files)
56 {
57 build_blks_with_data_files(blist, wanted, with_data_files);
58 return;
59 }
60 for(i=0; i<wanted; i++)
61 add_blk(blist);
62 }
63
build_blist(int wanted)64 struct blist *build_blist(int wanted)
65 {
66 struct blist *blist;
67 fail_unless((blist=blist_alloc())!=NULL);
68 build_blks(blist, wanted, 0 /* with_data_files */);
69 return blist;
70 }
71