# HG changeset patch # User masneyb # Date 1090769077 0 # Node ID cb882efd4d6d474f32558f1328f184c154bf38c0 # Parent 2c8a42a63a31510930965f34c4a8077eb77ec310 2004-7-25 Brian Masney * lib/rfc959.c - added rfc959_set_file_time(). This uses the SITE UTIME command. Not many FTP servers appear to support this extension diff -r 2c8a42a63a31 -r cb882efd4d6d ChangeLog --- a/ChangeLog Sun Jul 25 14:25:27 2004 +0000 +++ b/ChangeLog Sun Jul 25 15:24:37 2004 +0000 @@ -1,4 +1,7 @@ 2004-7-25 Brian Masney + * lib/rfc959.c - added rfc959_set_file_time(). This uses the SITE UTIME + command. Not many FTP servers appear to support this extension + * lib/protocols.c (gftp_get_transfer_status) - don't force the user to wait to reconnect if the connection to the server timed out @@ -2621,7 +2624,7 @@ * cvsclean - added this script - * *.[ch] - added $Id: ChangeLog,v 1.290 2004/07/25 14:25:27 masneyb Exp $ tags + * *.[ch] - added $Id: ChangeLog,v 1.291 2004/07/25 15:24:37 masneyb Exp $ tags * debian/* - updated files from Debian maintainer diff -r 2c8a42a63a31 -r cb882efd4d6d lib/rfc959.c --- a/lib/rfc959.c Sun Jul 25 14:25:27 2004 +0000 +++ b/lib/rfc959.c Sun Jul 25 15:24:37 2004 +0000 @@ -1706,6 +1706,57 @@ } +static char * +rfc959_time_t_to_mdtm (gftp_request * request, time_t datetime) +{ + struct tm gt; + char *ret; + + if (localtime_r (&datetime, >) != NULL) + { + ret = g_strdup_printf ("%04d%02d%02d%02d%02d%02d", gt.tm_year + 1900, + gt.tm_mon + 1, gt.tm_mday, gt.tm_hour, gt.tm_min, + gt.tm_sec); + return (ret); + } + else + { + request->logging_function (gftp_logging_error, request, + "Cannot parse UNIX timestamp %d: %s\n", + datetime, g_strerror (errno)); + return (NULL); + } +} + + +static int +rfc959_set_file_time (gftp_request * request, const char *file, time_t datetime) +{ + char *tempstr, *datestr, ret; + + g_return_val_if_fail (request != NULL, GFTP_EFATAL); + g_return_val_if_fail (file != NULL, GFTP_EFATAL); + g_return_val_if_fail (request->datafd > 0, GFTP_EFATAL); + + datestr = rfc959_time_t_to_mdtm (request, datetime); + if (datestr == NULL) + return (GFTP_EFATAL); + + tempstr = g_strconcat ("SITE UTIME ", datestr, " ", file, "\r\n", NULL); + g_free (datestr); + + ret = rfc959_send_command (request, tempstr, 1); + g_free (tempstr); + + if (ret < 0) + return (ret); + else if (ret == '2') + return (0); + else + return (GFTP_ERETRYABLE); +} + + static int rfc959_set_config_options (gftp_request * request) { @@ -1822,7 +1873,7 @@ request->mkdir = rfc959_mkdir; request->rename = rfc959_rename; request->chmod = rfc959_chmod; - request->set_file_time = NULL; + request->set_file_time = rfc959_set_file_time; request->site = rfc959_site; request->parse_url = NULL; request->swap_socks = NULL;