aboutsummaryrefslogtreecommitdiff
path: root/src/gnsrecord
diff options
context:
space:
mode:
authorxrs <xrs@mail36.net>2018-06-25 16:53:01 +0200
committerxrs <xrs@mail36.net>2018-06-25 16:53:01 +0200
commitb96052f1d3b8bb05f1868bd809fcb6e4f6569a4c (patch)
treed70c5939cc99d43e29ce63a4faa9ef334de0c81d /src/gnsrecord
parent8405df1e1968b92d38e8bcebeee1471444410d97 (diff)
parent1c9e2fc460acce152ab6374b14b1e231ac455f57 (diff)
downloadgnunet-b96052f1d3b8bb05f1868bd809fcb6e4f6569a4c.tar.gz
gnunet-b96052f1d3b8bb05f1868bd809fcb6e4f6569a4c.zip
Merge branch 'master' of ssh://gnunet.org/gnunet
Diffstat (limited to 'src/gnsrecord')
-rw-r--r--src/gnsrecord/gnsrecord_serialization.c35
1 files changed, 28 insertions, 7 deletions
diff --git a/src/gnsrecord/gnsrecord_serialization.c b/src/gnsrecord/gnsrecord_serialization.c
index adbf02755..934d36102 100644
--- a/src/gnsrecord/gnsrecord_serialization.c
+++ b/src/gnsrecord/gnsrecord_serialization.c
@@ -90,6 +90,9 @@ GNUNET_GNSRECORD_records_get_size (unsigned int rd_count,
90{ 90{
91 size_t ret; 91 size_t ret;
92 92
93 if (0 == rd_count)
94 return 0;
95
93 ret = sizeof (struct NetworkRecord) * rd_count; 96 ret = sizeof (struct NetworkRecord) * rd_count;
94 for (unsigned int i=0;i<rd_count;i++) 97 for (unsigned int i=0;i<rd_count;i++)
95 { 98 {
@@ -120,6 +123,21 @@ GNUNET_GNSRECORD_records_get_size (unsigned int rd_count,
120 GNUNET_break (0); 123 GNUNET_break (0);
121 return -1; 124 return -1;
122 } 125 }
126 //Do not pad PKEY
127 if (GNUNET_GNSRECORD_TYPE_PKEY == rd->record_type)
128 return ret;
129 /**
130 * Efficiently round up to the next
131 * power of 2 for padding
132 * https://graphics.stanford.edu/~seander/bithacks.html#RoundUpPowerOf2
133 */
134 ret--;
135 ret |= ret >> 1;
136 ret |= ret >> 2;
137 ret |= ret >> 4;
138 ret |= ret >> 8;
139 ret |= ret >> 16;
140 ret++;
123 return (ssize_t) ret; 141 return (ssize_t) ret;
124} 142}
125 143
@@ -135,9 +153,9 @@ GNUNET_GNSRECORD_records_get_size (unsigned int rd_count,
135 */ 153 */
136ssize_t 154ssize_t
137GNUNET_GNSRECORD_records_serialize (unsigned int rd_count, 155GNUNET_GNSRECORD_records_serialize (unsigned int rd_count,
138 const struct GNUNET_GNSRECORD_Data *rd, 156 const struct GNUNET_GNSRECORD_Data *rd,
139 size_t dest_size, 157 size_t dest_size,
140 char *dest) 158 char *dest)
141{ 159{
142 struct NetworkRecord rec; 160 struct NetworkRecord rec;
143 size_t off; 161 size_t off;
@@ -190,7 +208,10 @@ GNUNET_GNSRECORD_records_serialize (unsigned int rd_count,
190 } 208 }
191#endif 209#endif
192 } 210 }
193 return off; 211 memset (&dest[off],
212 0,
213 dest_size-off);
214 return dest_size;
194} 215}
195 216
196 217
@@ -205,9 +226,9 @@ GNUNET_GNSRECORD_records_serialize (unsigned int rd_count,
205 */ 226 */
206int 227int
207GNUNET_GNSRECORD_records_deserialize (size_t len, 228GNUNET_GNSRECORD_records_deserialize (size_t len,
208 const char *src, 229 const char *src,
209 unsigned int rd_count, 230 unsigned int rd_count,
210 struct GNUNET_GNSRECORD_Data *dest) 231 struct GNUNET_GNSRECORD_Data *dest)
211{ 232{
212 struct NetworkRecord rec; 233 struct NetworkRecord rec;
213 size_t off; 234 size_t off;