Mercurial > gftp.yaz
changeset 850:1c8d6b6b7950
2006-11-16 Brian Masney <masneyb@gftp.org>
* lib/protocols.c - skip over the hidden files when doing a recursive
transfer if the shown_hidden_files option is disabled. (closes #321573)
author | masneyb |
---|---|
date | Fri, 17 Nov 2006 01:20:58 +0000 |
parents | 0cf4d8c46b82 |
children | 83d39217749c |
files | ChangeLog lib/protocols.c |
diffstat | 2 files changed, 31 insertions(+), 17 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Fri Nov 17 00:44:40 2006 +0000 +++ b/ChangeLog Fri Nov 17 01:20:58 2006 +0000 @@ -1,4 +1,7 @@ 2006-11-16 Brian Masney <masneyb@gftp.org> + * lib/protocols.c - skip over the hidden files when doing a recursive + transfer if the shown_hidden_files option is disabled. (closes #321573) + * lib/sshv2.c (sshv2_initialize_string_with_path) - make sure the endpos variable is pointing to the position after the string. This fixes an issue with the current CVS code where files could not be transferred. @@ -3708,7 +3711,7 @@ * cvsclean - added this script - * *.[ch] - added $Id: ChangeLog,v 1.498 2006/11/17 00:44:38 masneyb Exp $ tags + * *.[ch] - added $Id: ChangeLog,v 1.499 2006/11/17 01:20:57 masneyb Exp $ tags * debian/* - updated files from Debian maintainer
--- a/lib/protocols.c Fri Nov 17 00:44:40 2006 +0000 +++ b/lib/protocols.c Fri Nov 17 01:20:58 2006 +0000 @@ -1861,31 +1861,37 @@ static GHashTable * gftp_gen_dir_hash (gftp_request * request, int *ret) { + intptr_t show_hidden_files; GHashTable * dirhash; gftp_file * fle; off_t *newsize; + *ret = gftp_list_files (request); + if (*ret != 0) + return (NULL); + dirhash = g_hash_table_new (string_hash_function, string_hash_compare); - *ret = gftp_list_files (request); - if (*ret == 0) + gftp_lookup_request_option (request, "show_hidden_files", &show_hidden_files); + + fle = g_malloc0 (sizeof (*fle)); + while (gftp_get_next_file (request, NULL, fle) > 0) { - fle = g_malloc0 (sizeof (*fle)); - while (gftp_get_next_file (request, NULL, fle) > 0) + if (!show_hidden_files && *fle->file == '.' && + strcmp (fle->file, "..") != 0) { - newsize = g_malloc (sizeof (*newsize)); - *newsize = fle->size; - g_hash_table_insert (dirhash, fle->file, newsize); - fle->file = NULL; gftp_file_destroy (fle, 0); + continue; } - gftp_end_transfer (request); - g_free (fle); + + newsize = g_malloc (sizeof (*newsize)); + *newsize = fle->size; + g_hash_table_insert (dirhash, fle->file, newsize); + fle->file = NULL; + gftp_file_destroy (fle, 0); } - else - { - g_hash_table_destroy (dirhash); - dirhash = NULL; - } + + gftp_end_transfer (request); + g_free (fle); return (dirhash); } @@ -1914,12 +1920,16 @@ static GList * gftp_get_dir_listing (gftp_transfer * transfer, int getothdir, int *ret) { + intptr_t show_hidden_files; GHashTable * dirhash; GList * templist; gftp_file * fle; off_t *newsize; char *newname; + gftp_lookup_request_option (transfer->fromreq, "show_hidden_files", + &show_hidden_files); + if (getothdir && transfer->toreq != NULL) { dirhash = gftp_gen_dir_hash (transfer->toreq, ret); @@ -1940,7 +1950,8 @@ templist = NULL; while (gftp_get_next_file (transfer->fromreq, NULL, fle) > 0) { - if (strcmp (fle->file, ".") == 0 || strcmp (fle->file, "..") == 0) + if (strcmp (fle->file, ".") == 0 || strcmp (fle->file, "..") == 0 || + (!show_hidden_files && *fle->file == '.')) { gftp_file_destroy (fle, 0); continue;