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