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