1 #include "../test.h"
2 #include "build.h"
3 #include "../prng.h"
4 #include "../../src/alloc.h"
5 #include "../../src/attribs.h"
6 #include "../../src/sbuf.h"
7 #include "../../src/slist.h"
8 
link_data(struct sbuf * sb,enum cmd cmd)9 static void link_data(struct sbuf *sb, enum cmd cmd)
10 {
11 	char path[256];
12 	sb->path.cmd=cmd;
13 	sb->link.cmd=cmd;
14 	if(cmd==CMD_SOFT_LINK)
15 		snprintf(path, sizeof(path), "some link");
16 	else
17 	{
18 		char *cp;
19 		snprintf(path, sizeof(path), "%s", sb->path.buf);
20 		fail_unless((cp=strrchr(path, '/'))!=NULL);
21 		cp++;
22 		snprintf(cp, strlen("some link")+1, "some link");
23 	}
24 	fail_unless((sb->link.buf=strdup_w(path, __func__))!=NULL);
25 	sb->link.len=strlen(sb->link.buf);
26 }
27 
28 enum cmd manifest_cmds[SIZEOF_MANIFEST_CMDS]={
29 	CMD_FILE,
30 	CMD_SOFT_LINK,
31 	CMD_HARD_LINK,
32 	CMD_DIRECTORY,
33 	CMD_ENC_FILE,
34 	CMD_SPECIAL
35 };
36 
build_slist_phase1(const char * prefix,enum protocol protocol,int entries)37 struct slist *build_slist_phase1(const char *prefix,
38 	enum protocol protocol, int entries)
39 {
40 	int i=0;
41 	char **paths;
42 	struct sbuf *sb;
43 	struct slist *slist;
44 
45 	fail_unless((slist=slist_alloc())!=NULL);
46 	paths=build_paths(prefix, entries);
47 	for(i=0; i<entries; i++)
48 	{
49 		sb=build_attribs_reduce(protocol);
50 		attribs_encode(sb);
51 		iobuf_from_str(&sb->path, manifest_cmds[0], paths[i]);
52 		slist_add_sbuf(slist, sb);
53 		switch(prng_next()%10)
54 		{
55 			case 0:
56 				link_data(sb, manifest_cmds[1]);
57 				break;
58 			case 1:
59 				link_data(sb, manifest_cmds[2]);
60 				break;
61 			case 2:
62 			case 3:
63 				sb->path.cmd=manifest_cmds[3];
64 				break;
65 			case 4:
66 				if(protocol==PROTO_1)
67 					sb->path.cmd=manifest_cmds[4];
68 				break;
69 			case 5:
70 				sb->path.cmd=manifest_cmds[5];
71 				break;
72 			default:
73 				break;
74 		}
75 	}
76 	free_v((void **)&paths);
77 	return slist;
78 }
79