aboutsummaryrefslogtreecommitdiff
path: root/src/fs/fs_directory.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2010-06-27 11:50:00 +0000
committerChristian Grothoff <christian@grothoff.org>2010-06-27 11:50:00 +0000
commitb28ebda18f5efe2b59c0a3f318b672821e00c481 (patch)
tree122ed195e1a72a076f11cec6f25c449d9b145020 /src/fs/fs_directory.c
parentaf68c3a1fa672b4e64f96698453a0371a8c3794e (diff)
downloadgnunet-b28ebda18f5efe2b59c0a3f318b672821e00c481.tar.gz
gnunet-b28ebda18f5efe2b59c0a3f318b672821e00c481.zip
return if directory is well-formed
Diffstat (limited to 'src/fs/fs_directory.c')
-rw-r--r--src/fs/fs_directory.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/src/fs/fs_directory.c b/src/fs/fs_directory.c
index de100c339..03065958e 100644
--- a/src/fs/fs_directory.c
+++ b/src/fs/fs_directory.c
@@ -179,8 +179,11 @@ find_full_data (void *cls,
179 * @param offset offset of data in the directory 179 * @param offset offset of data in the directory
180 * @param dep function to call on each entry 180 * @param dep function to call on each entry
181 * @param dep_cls closure for dep 181 * @param dep_cls closure for dep
182 * @return GNUNET_OK if this could be a block in a directory,
183 * GNUNET_NO if this could be part of a directory (but not 100% OK)
184 * GNUNET_SYSERR if 'data' does not represent a directory
182 */ 185 */
183void 186int
184GNUNET_FS_directory_list_contents (size_t size, 187GNUNET_FS_directory_list_contents (size_t size,
185 const void *data, 188 const void *data,
186 uint64_t offset, 189 uint64_t offset,
@@ -209,16 +212,16 @@ GNUNET_FS_directory_list_contents (size_t size,
209 { 212 {
210 /* invalid size */ 213 /* invalid size */
211 GNUNET_log (GNUNET_ERROR_TYPE_WARNING, 214 GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
212 _("Not a GNUnet directory.\n")); 215 _("MAGIC mismatch. This is not a GNUnet directory.\n"));
213 return; 216 return GNUNET_SYSERR;
214 } 217 }
215 md = GNUNET_CONTAINER_meta_data_deserialize (&cdata[8 + 218 md = GNUNET_CONTAINER_meta_data_deserialize (&cdata[8 +
216 sizeof (uint32_t)], 219 sizeof (uint32_t)],
217 mdSize); 220 mdSize);
218 if (md == NULL) 221 if (md == NULL)
219 { 222 {
220 GNUNET_break (0); 223 GNUNET_break (0);
221 return; /* malformed ! */ 224 return GNUNET_SYSERR; /* malformed ! */
222 } 225 }
223 dep (dep_cls, 226 dep (dep_cls,
224 NULL, 227 NULL,
@@ -254,7 +257,7 @@ GNUNET_FS_directory_list_contents (size_t size,
254 while ((epos < size) && (cdata[epos] != '\0')) 257 while ((epos < size) && (cdata[epos] != '\0'))
255 epos++; 258 epos++;
256 if (epos >= size) 259 if (epos >= size)
257 return; /* malformed - or partial download */ 260 return GNUNET_NO; /* malformed - or partial download */
258 261
259 uri = GNUNET_FS_uri_parse (&cdata[pos], &emsg); 262 uri = GNUNET_FS_uri_parse (&cdata[pos], &emsg);
260 pos = epos + 1; 263 pos = epos + 1;
@@ -268,7 +271,7 @@ GNUNET_FS_directory_list_contents (size_t size,
268 { 271 {
269 GNUNET_FS_uri_destroy (uri); 272 GNUNET_FS_uri_destroy (uri);
270 GNUNET_break (0); 273 GNUNET_break (0);
271 return; /* illegal in directory! */ 274 return GNUNET_NO; /* illegal in directory! */
272 } 275 }
273 276
274 memcpy (&mdSize, &cdata[pos], sizeof (uint32_t)); 277 memcpy (&mdSize, &cdata[pos], sizeof (uint32_t));
@@ -277,7 +280,7 @@ GNUNET_FS_directory_list_contents (size_t size,
277 if (pos + mdSize > size) 280 if (pos + mdSize > size)
278 { 281 {
279 GNUNET_FS_uri_destroy (uri); 282 GNUNET_FS_uri_destroy (uri);
280 return; /* malformed - or partial download */ 283 return GNUNET_NO; /* malformed - or partial download */
281 } 284 }
282 285
283 md = GNUNET_CONTAINER_meta_data_deserialize (&cdata[pos], mdSize); 286 md = GNUNET_CONTAINER_meta_data_deserialize (&cdata[pos], mdSize);
@@ -285,7 +288,7 @@ GNUNET_FS_directory_list_contents (size_t size,
285 { 288 {
286 GNUNET_FS_uri_destroy (uri); 289 GNUNET_FS_uri_destroy (uri);
287 GNUNET_break (0); 290 GNUNET_break (0);
288 return; /* malformed ! */ 291 return GNUNET_NO; /* malformed ! */
289 } 292 }
290 pos += mdSize; 293 pos += mdSize;
291 filename = GNUNET_CONTAINER_meta_data_get_by_type (md, 294 filename = GNUNET_CONTAINER_meta_data_get_by_type (md,
@@ -309,6 +312,7 @@ GNUNET_FS_directory_list_contents (size_t size,
309 GNUNET_CONTAINER_meta_data_destroy (md); 312 GNUNET_CONTAINER_meta_data_destroy (md);
310 GNUNET_FS_uri_destroy (uri); 313 GNUNET_FS_uri_destroy (uri);
311 } 314 }
315 return GNUNET_OK;
312} 316}
313 317
314/** 318/**