19 unsigned min_buffer_size =
sizeof(mode_t) /
sizeof(
unsigned char) + 1
20 +
sizeof(uid_t) /
sizeof(
unsigned char) + 1
21 +
sizeof(gid_t) /
sizeof(
unsigned char) + 1;
23 unsigned xlist_buffer_size = 0;
24 unsigned char *xlist_buffer;
25 std::vector<std::string> serialize_blacklist;
26 serialize_blacklist.push_back(
"security.selinux");
28 xlist->
Serialize(&xlist_buffer, &xlist_buffer_size, &serialize_blacklist);
30 unsigned char buffer[min_buffer_size + xlist_buffer_size];
31 for (
unsigned i = 0; i < (min_buffer_size + xlist_buffer_size); i++) {
36 mode_t hash_mode = stat_info->
st_mode & 0777;
37 memcpy(buffer + offset, &hash_mode,
sizeof(mode_t));
38 offset +=
sizeof(mode_t) /
sizeof(
unsigned char);
39 *(buffer + offset) = 0;
42 memcpy(buffer + offset, &(stat_info->
st_uid),
sizeof(uid_t));
43 offset +=
sizeof(uid_t) /
sizeof(
unsigned char);
44 *(buffer + offset) = 0;
47 memcpy(buffer + offset, &(stat_info->
st_gid),
sizeof(gid_t));
48 offset +=
sizeof(gid_t) /
sizeof(
unsigned char);
49 *(buffer + offset) = 0;
53 memcpy(buffer + offset, xlist_buffer, xlist_buffer_size);
57 shash::HashMem(buffer, min_buffer_size + xlist_buffer_size, &meta_hash);
65 if (*listlen + 1 >= *buflen) {
66 size_t newbuflen = (*listlen) * 2 + 5;
67 *buf =
reinterpret_cast<char **
>(realloc(*buf,
sizeof(
char *) * newbuflen));
70 assert(*listlen < *buflen);
73 (*buf)[(*listlen)] = strdup(str);
75 (*buf)[++(*listlen)] = NULL;
77 (*buf)[(*listlen)] = NULL;
assert((mem||(size==0))&&"Out Of Memory")
void Serialize(unsigned char **outbuf, unsigned *size, const std::vector< std::string > *blacklist=NULL) const
shash::Any HashMeta(const struct cvmfs_attr *stat_info)
void HashMem(const unsigned char *buffer, const unsigned buffer_size, Any *any_digest)
void AppendStringToList(char const *str, char ***buf, size_t *listlen, size_t *buflen)