From c6c9a331249f9e8324a6d5567d71e29fdf557d5e Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Tue, 31 Jan 2012 23:13:03 +0000 Subject: -documenting get_suggested_filename_anonymity --- src/fs/gnunet-fs-gtk-event_handler.c | 57 +++++++++++++++++++++++------------- 1 file changed, 37 insertions(+), 20 deletions(-) diff --git a/src/fs/gnunet-fs-gtk-event_handler.c b/src/fs/gnunet-fs-gtk-event_handler.c index ada9cf86..9334600b 100644 --- a/src/fs/gnunet-fs-gtk-event_handler.c +++ b/src/fs/gnunet-fs-gtk-event_handler.c @@ -194,12 +194,17 @@ get_default_download_directory (char *buffer, size_t size) * Called recursively to build a suggested filename by prepending * suggested names for its parent directories (if any). * - * @param tm FIXME - * @param iter FIXME - * @param top FIXME - * @param local_parents set to GNUNET_YES if all parents are directories, and are downloaded. - * @param anonymity FIXME - * @param filename_is_absolute FIXME + * @param tm tree model this function gets the data from + * @param iter current position in the tree, for which we want a suggested filename + * @param top GNUNET_YES for the original call to this function, + * GNUNET_NO for recursive calls; used to decide if the + * current call is eligible to set 'anonymity' and 'local_parents' + * @param local_parents set to GNUNET_YES if all parents are directories, and are downloaded. + * @param anonymity set to the anonymity level of the closest ancestor download (if any); + * set to "-1" for uninitialized initially (will be left at -1 if + * no suitable parent download was found) + * @param filename_is_absolute set to GNUNET_YES if the suggestion is an absolute filename, + * GNUNET_NO for relative filenames (gotten from meta data) * @return suggested filename, possibly NULL */ static char * @@ -212,30 +217,41 @@ get_suggested_filename_anonymity (GtkTreeModel *tm, { char *result; char *dirname; - char *local_filename, *filename; + char *local_filename; + char *filename; int downloaded_anonymity; int have_a_parent; struct GNUNET_CONTAINER_MetaData *meta; GtkTreeIter parent; - gtk_tree_model_get (tm, iter, 0, &meta, 15, &local_filename, 16, &downloaded_anonymity, -1); - if (local_filename == NULL && !top) + const char *basename; + char *dot; + + gtk_tree_model_get (tm, iter, 0, &meta, + 15, &local_filename, + 16, &downloaded_anonymity, + -1); + if ( (NULL == local_filename) && (GNUNET_NO == top) ) *local_parents = GNUNET_NO; - if (downloaded_anonymity != -1 && *anonymity == -1 && !top) + if ( (downloaded_anonymity != -1) && (*anonymity == -1) && (GNUNET_NO == top) ) *anonymity = downloaded_anonymity; if (gtk_tree_model_iter_parent (tm, &parent, iter)) { have_a_parent = GNUNET_YES; - dirname = get_suggested_filename_anonymity (tm, &parent, GNUNET_NO, local_parents, anonymity, filename_is_absolute); + dirname = get_suggested_filename_anonymity (tm, &parent, GNUNET_NO, + local_parents, anonymity, + filename_is_absolute); } else { have_a_parent = GNUNET_NO; dirname = NULL; - if (top) + if (GNUNET_NO == top) *local_parents = GNUNET_NO; } if (local_filename == NULL) + { filename = GNUNET_FS_meta_data_suggest_filename (meta); + } else { /* This directory was downloaded as /foo/bar/baz/somedirname @@ -245,37 +261,38 @@ get_suggested_filename_anonymity (GtkTreeModel *tm, * Without the .gnd extension we're going to just use a copy * of the directory file name - and that would fail. Sad. */ - const char *basename; - if (dirname == NULL && !have_a_parent) + if ( (NULL == dirname) && (GNUNET_NO == have_a_parent)) { /* This is the ealderlest parent directory. Use absolute path. */ basename = (const char *) local_filename; *filename_is_absolute = GNUNET_YES; } else + { basename = GNUNET_STRINGS_get_short_name (local_filename); - if (basename != NULL && strlen (basename) > 0) + } + if ( (NULL != basename) && (strlen (basename) > 0) ) { - char *dot; filename = GNUNET_strdup (basename); dot = strrchr (filename, '.'); if (dot) *dot = '\0'; } else + { filename = GNUNET_FS_meta_data_suggest_filename (meta); + } } - if (dirname && filename) + if ( (NULL != dirname) && (NULL != filename) ) { GNUNET_asprintf (&result, "%s%s%s", dirname, DIR_SEPARATOR_STR, filename); GNUNET_free (filename); GNUNET_free (dirname); return result; } - else if (filename) + if (NULL != filename) return filename; - else - return NULL; + return NULL; } -- cgit v1.2.3