aboutsummaryrefslogtreecommitdiff
path: root/src/fs/fs.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2010-05-06 13:02:14 +0000
committerChristian Grothoff <christian@grothoff.org>2010-05-06 13:02:14 +0000
commit0b41a005a697d23fedef619df03597e6c308a6c1 (patch)
tree4496ec441facf994a3d025098e6f45d5504cdd89 /src/fs/fs.c
parentbd8e94679cb54749ae9574e37a86dfb445c1c9af (diff)
downloadgnunet-0b41a005a697d23fedef619df03597e6c308a6c1.tar.gz
gnunet-0b41a005a697d23fedef619df03597e6c308a6c1.zip
bugfixes
Diffstat (limited to 'src/fs/fs.c')
-rw-r--r--src/fs/fs.c56
1 files changed, 38 insertions, 18 deletions
diff --git a/src/fs/fs.c b/src/fs/fs.c
index 58045591e..78d29dff1 100644
--- a/src/fs/fs.c
+++ b/src/fs/fs.c
@@ -529,9 +529,7 @@ get_write_handle (struct GNUNET_FS_Handle *h,
529 } 529 }
530 ret = GNUNET_BIO_write_open (fn); 530 ret = GNUNET_BIO_write_open (fn);
531 if (ret == NULL) 531 if (ret == NULL)
532 fprintf (stderr, 532 GNUNET_break (0);
533 "Failed to create write handle for `%s' from `%s/%s'\n",
534 fn, ext, ent);
535 GNUNET_free (fn); 533 GNUNET_free (fn);
536 return ret; 534 return ret;
537} 535}
@@ -1671,11 +1669,13 @@ count_download_requests (void *cls,
1671 * 1669 *
1672 * @param dc download context to compute for 1670 * @param dc download context to compute for
1673 * @param uni unique filename to use, use "" for the directory name 1671 * @param uni unique filename to use, use "" for the directory name
1672 * @param ext extension to use, use ".dir" for our own subdirectory
1674 * @return the expanded file name, NULL for none 1673 * @return the expanded file name, NULL for none
1675 */ 1674 */
1676static char * 1675static char *
1677get_download_sync_filename (struct GNUNET_FS_DownloadContext *dc, 1676get_download_sync_filename (struct GNUNET_FS_DownloadContext *dc,
1678 const char *uni) 1677 const char *uni,
1678 const char *ext)
1679{ 1679{
1680 char *par; 1680 char *par;
1681 char *epar; 1681 char *epar;
@@ -1688,14 +1688,15 @@ get_download_sync_filename (struct GNUNET_FS_DownloadContext *dc,
1688 uni); 1688 uni);
1689 if (dc->parent->serialization == NULL) 1689 if (dc->parent->serialization == NULL)
1690 return NULL; 1690 return NULL;
1691 par = get_download_sync_filename (dc->parent, dc->parent->serialization); 1691 par = get_download_sync_filename (dc->parent, dc->parent->serialization, "");
1692 if (par == NULL) 1692 if (par == NULL)
1693 return NULL; 1693 return NULL;
1694 GNUNET_asprintf (&epar, 1694 GNUNET_asprintf (&epar,
1695 "%s.dir%s%s", 1695 "%s.dir%s%s%s",
1696 par, 1696 par,
1697 DIR_SEPARATOR_STR, 1697 DIR_SEPARATOR_STR,
1698 uni); 1698 uni,
1699 ext);
1699 GNUNET_free (par); 1700 GNUNET_free (par);
1700 return epar; 1701 return epar;
1701} 1702}
@@ -1720,7 +1721,7 @@ GNUNET_FS_download_sync_ (struct GNUNET_FS_DownloadContext *dc)
1720 1721
1721 if (NULL == dc->serialization) 1722 if (NULL == dc->serialization)
1722 { 1723 {
1723 dir = get_download_sync_filename (dc, ""); 1724 dir = get_download_sync_filename (dc, "", "");
1724 if (dir == NULL) 1725 if (dir == NULL)
1725 return; 1726 return;
1726 if (GNUNET_OK != 1727 if (GNUNET_OK !=
@@ -1735,7 +1736,7 @@ GNUNET_FS_download_sync_ (struct GNUNET_FS_DownloadContext *dc)
1735 } 1736 }
1736 else 1737 else
1737 { 1738 {
1738 fn = get_download_sync_filename (dc, dc->serialization); 1739 fn = get_download_sync_filename (dc, dc->serialization, "");
1739 } 1740 }
1740 wh = GNUNET_BIO_write_open (fn); 1741 wh = GNUNET_BIO_write_open (fn);
1741 if (wh == NULL) 1742 if (wh == NULL)
@@ -2440,6 +2441,15 @@ deserialize_subdownload (void *cls,
2440 2441
2441 ser = get_serialization_short_name (filename); 2442 ser = get_serialization_short_name (filename);
2442 rh = GNUNET_BIO_read_open (filename); 2443 rh = GNUNET_BIO_read_open (filename);
2444 if (rh == NULL)
2445 {
2446 GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
2447 _("Failed to resume sub-download `%s': could not open file `%s'\n"),
2448 ser,
2449 filename);
2450 GNUNET_free (ser);
2451 return GNUNET_OK;
2452 }
2443 deserialize_download (parent->h, 2453 deserialize_download (parent->h,
2444 rh, 2454 rh,
2445 parent, 2455 parent,
@@ -2591,9 +2601,14 @@ deserialize_download (struct GNUNET_FS_Handle *h,
2591 dr->is_pending = GNUNET_YES; 2601 dr->is_pending = GNUNET_YES;
2592 dr->next = dc->pending; 2602 dr->next = dc->pending;
2593 dc->pending = dr; 2603 dc->pending = dr;
2604 GNUNET_CONTAINER_multihashmap_put (dc->active,
2605 &dr->chk.query,
2606 dr,
2607 GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
2608
2594 dr = NULL; 2609 dr = NULL;
2595 } 2610 }
2596 dn = get_download_sync_filename (dc, ""); 2611 dn = get_download_sync_filename (dc, dc->serialization, ".dir");
2597 if (dn != NULL) 2612 if (dn != NULL)
2598 { 2613 {
2599 if (GNUNET_YES == 2614 if (GNUNET_YES ==
@@ -2602,20 +2617,25 @@ deserialize_download (struct GNUNET_FS_Handle *h,
2602 GNUNET_free (dn); 2617 GNUNET_free (dn);
2603 } 2618 }
2604 if (parent != NULL) 2619 if (parent != NULL)
2605 GNUNET_CONTAINER_DLL_insert (parent->child_head, 2620 {
2606 parent->child_tail, 2621 abort (); // for debugging for now
2607 dc); 2622 GNUNET_CONTAINER_DLL_insert (parent->child_head,
2623 parent->child_tail,
2624 dc);
2625 }
2608 if (search != NULL) 2626 if (search != NULL)
2609 { 2627 {
2610 dc->search = search; 2628 dc->search = search;
2611 search->download = dc; 2629 search->download = dc;
2612 } 2630 }
2613 if ( (parent == NULL) || 2631 if ( (parent == NULL) &&
2614 (search == NULL) ) 2632 (search == NULL) )
2615 dc->top = GNUNET_FS_make_top (dc->h, 2633 {
2616 &GNUNET_FS_download_signal_suspend_, 2634 dc->top = GNUNET_FS_make_top (dc->h,
2617 dc); 2635 &GNUNET_FS_download_signal_suspend_,
2618 signal_download_resume (dc); 2636 dc);
2637 signal_download_resume (dc);
2638 }
2619 GNUNET_free (uris); 2639 GNUNET_free (uris);
2620 return; 2640 return;
2621 cleanup: 2641 cleanup: