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