1 #include "../test.h"
2 #include "../prng.h"
3 #include "../../src/alloc.h"
4 #include "../../src/attribs.h"
5 #include "../../src/base64.h"
6 #include "../../src/sbuf.h"
7 #include "build.h"
8
9 static int reduce=1;
10
memcpy_a(void * dest,size_t s)11 static void memcpy_a(void *dest, size_t s)
12 {
13 static uint64_t u;
14 u=prng_next64();
15 // In practice, most components in the attribs are low numbers, and
16 // they are easier to look at in manifests.
17 // We will also want to exercise large numbers, so have a choice.
18 memcpy(dest, &u, s/reduce);
19 }
20
do_build_attribs(enum protocol protocol)21 static struct sbuf *do_build_attribs(enum protocol protocol)
22 {
23 struct sbuf *sbuf;
24 struct stat *statp;
25 fail_unless((sbuf=sbuf_alloc(protocol))!=NULL);
26 statp=&sbuf->statp;
27 memcpy_a(&statp->st_dev, sizeof(statp->st_dev));
28 memcpy_a(&statp->st_ino, sizeof(statp->st_ino));
29 memcpy_a(&statp->st_mode, sizeof(statp->st_mode));
30 memcpy_a(&statp->st_nlink, sizeof(statp->st_nlink));
31 memcpy_a(&statp->st_uid, sizeof(statp->st_uid));
32 memcpy_a(&statp->st_gid, sizeof(statp->st_gid));
33 memcpy_a(&statp->st_rdev, sizeof(statp->st_rdev));
34 memcpy_a(&statp->st_size, sizeof(statp->st_size));
35 memcpy_a(&statp->st_blksize, sizeof(statp->st_blksize));
36 memcpy_a(&statp->st_blocks, sizeof(statp->st_blocks));
37 memcpy_a(&statp->st_atime, sizeof(statp->st_atime));
38 memcpy_a(&statp->st_mtime, sizeof(statp->st_mtime));
39 memcpy_a(&statp->st_ctime, sizeof(statp->st_ctime));
40 #ifdef HAVE_CHFLAGS
41 memcpy_a(&statp->st_flags, sizeof(statp->st_flags));
42 #endif
43 memcpy_a(&sbuf->winattr, sizeof(sbuf->winattr));
44 memcpy_a(&sbuf->compression, sizeof(sbuf->compression));
45 if(protocol==PROTO_2)
46 {
47 memcpy_a(&sbuf->protocol2->index,
48 sizeof(sbuf->protocol2->index));
49 memcpy_a(&sbuf->encryption,
50 sizeof(sbuf->encryption));
51 }
52 return sbuf;
53 }
54
build_attribs(enum protocol protocol)55 struct sbuf *build_attribs(enum protocol protocol)
56 {
57 reduce=1;
58 return do_build_attribs(protocol);
59 }
60
build_attribs_reduce(enum protocol protocol)61 struct sbuf *build_attribs_reduce(enum protocol protocol)
62 {
63 reduce=4;
64 return do_build_attribs(protocol);
65 }
66