[w3m-dev 03568] Re: preserve timestamp
* etc.c (USE_COOKIE): moved * file.c (utime.h): include (setModtime): added (loadGeneralFile): set f.modtime (_doFileCopy): setModtime() (doFileSave): setModtime() * ftp.c (getFtpModtime): added (openFTP): pass URLFile, set modtime * html.h (URLFile): add modtime * proto.h (openFTP): arg URLFile *uf (mymktime): always * url.c (init_stream): initialize modtime (openFTPStream): pass URLFile (openURL): openFTPStream From: Takahashi Youichirou <nikuq@hk.airnet.ne.jp>
This commit is contained in:
		
							
								
								
									
										33
									
								
								ftp.c
									
									
									
									
									
								
							
							
						
						
									
										33
									
								
								ftp.c
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: ftp.c,v 1.15 2002/11/18 18:26:13 ukai Exp $ */
 | 
			
		||||
/* $Id: ftp.c,v 1.16 2002/12/14 15:18:38 ukai Exp $ */
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <pwd.h>
 | 
			
		||||
#include <Str.h>
 | 
			
		||||
@@ -351,6 +351,34 @@ FtpData(FTP ftp, char *cmd, char *arg, char *mode)
 | 
			
		||||
    return FtpDataBody(ftp, cmd, arg, mode);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
time_t
 | 
			
		||||
getFtpModtime(FTP ftp, char *path)
 | 
			
		||||
{
 | 
			
		||||
    Str tmp;
 | 
			
		||||
    char *p;
 | 
			
		||||
    struct tm tm;
 | 
			
		||||
    time_t t;
 | 
			
		||||
 | 
			
		||||
    memset(&tm, 0, sizeof(struct tm));
 | 
			
		||||
    tmp = Sprintf("MDTM %s\r\n", path);
 | 
			
		||||
    fwrite(tmp->ptr, tmp->length, sizeof(char), ftp->wcontrol);
 | 
			
		||||
    fflush(ftp->wcontrol);
 | 
			
		||||
    tmp = read_response(ftp);
 | 
			
		||||
    if (atoi(tmp->ptr) != 213)
 | 
			
		||||
	return -1;
 | 
			
		||||
    for (p = tmp->ptr + 4; *p && *p == ' '; p++)
 | 
			
		||||
	;
 | 
			
		||||
    if (sscanf(p, "%04d%02d%02d%02d%02d%02d",
 | 
			
		||||
	       &tm.tm_year, &tm.tm_mon, &tm.tm_mday,
 | 
			
		||||
	       &tm.tm_hour, &tm.tm_min, &tm.tm_sec) < 6)
 | 
			
		||||
	return -1;
 | 
			
		||||
    tm.tm_year -= 1900;
 | 
			
		||||
    tm.tm_mon--;
 | 
			
		||||
    t = mktime(&tm);
 | 
			
		||||
    t += mktime(localtime(&t)) - mktime(gmtime(&t));
 | 
			
		||||
    return t;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
FtpClose(FTP ftp)
 | 
			
		||||
{
 | 
			
		||||
@@ -394,7 +422,7 @@ static int ftp_system(FTP);
 | 
			
		||||
#define	FTPDIR_FILE	3
 | 
			
		||||
 | 
			
		||||
FILE *
 | 
			
		||||
openFTP(ParsedURL *pu)
 | 
			
		||||
openFTP(ParsedURL *pu, URLFile *uf)
 | 
			
		||||
{
 | 
			
		||||
    Str tmp2 = Strnew();
 | 
			
		||||
    Str tmp3 = Strnew();
 | 
			
		||||
@@ -472,6 +500,7 @@ openFTP(ParsedURL *pu)
 | 
			
		||||
	goto ftp_dir;
 | 
			
		||||
 | 
			
		||||
    /* Get file */
 | 
			
		||||
    uf->modtime = getFtpModtime(current_ftp, realpathname);
 | 
			
		||||
    FtpBinary(current_ftp);
 | 
			
		||||
    if (ftp_pasv(current_ftp) < 0) {
 | 
			
		||||
	FtpBye(current_ftp);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user