Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 3 Dec 1998 20:07:43 +0100
From:      Martin Cracauer <cracauer@cons.org>
To:        current@FreeBSD.ORG
Subject:   Proposed addition to fetch(1)
Message-ID:  <19981203200743.A861@cons.org>

next in thread | raw e-mail | index | archive | help

--gBBFr7Ir9EOA20Yy
Content-Type: text/plain; charset=us-ascii

I plan to add this to fetch, unless anyone objects.

     -s          Ask server for size of file in bytes and print it to stdout.
                 Do not actually fetch the file.

Actual diff appended.

I plan to use it for a `make fetchsize` target for ports, so that you
can ask how much traffic you would cause before actually starting the
fetch. 

Martin
-- 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Martin Cracauer <cracauer@cons.org> http://www.cons.org/cracauer
  Tel.: (private) +4940 5221829 Fax.: (private) +4940 5228536
  Paper: (private) Waldstrasse 200, 22846 Norderstedt, Germany

--gBBFr7Ir9EOA20Yy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="fetch.diff"

? fetch
? fetch.1.gz
? l
? .gdbinit
? ktrace.out
? shc
? README
Index: fetch.1
===================================================================
RCS file: /home/CVS-FreeBSD/src/usr.bin/fetch/fetch.1,v
retrieving revision 1.25
diff -c -r1.25 fetch.1
*** fetch.1	1998/11/08 23:18:47	1.25
--- fetch.1	1998/12/03 19:04:35
***************
*** 115,120 ****
--- 115,123 ----
  .Nm fetch
  from downloading a file that is either incomplete or the wrong version,
  given the correct size of the file in advance.
+ .It Fl s
+ Ask server for size of file in bytes and print it to stdout. Do not
+ actually fetch the file.
  .It Fl T Ar seconds
  Set timeout value to
  .Ar seconds.
Index: fetch.h
===================================================================
RCS file: /home/CVS-FreeBSD/src/usr.bin/fetch/fetch.h,v
retrieving revision 1.6
diff -c -r1.6 fetch.h
*** fetch.h	1998/09/20 00:01:26	1.6
--- fetch.h	1998/12/03 19:04:35
***************
*** 52,57 ****
--- 52,58 ----
  	int fs_linux_bug;	/* -b option */
  	int fs_use_connect;	/* -t option */
  	off_t fs_expectedsize;	/* -S option */
+ 	int fs_reportsize;	/* -s option */
  	time_t fs_modtime;
  	void *fs_proto;
  	int (*fs_retrieve)(struct fetch_state *);
Index: ftp.c
===================================================================
RCS file: /home/CVS-FreeBSD/src/usr.bin/fetch/ftp.c,v
retrieving revision 1.10
diff -c -r1.10 ftp.c
*** ftp.c	1998/09/20 00:01:26	1.10
--- ftp.c	1998/12/03 19:04:35
***************
*** 375,380 ****
--- 375,394 ----
  		}
  	}
  	size = ftpGetSize(ftp, ftps->ftp_remote_file);
+ 
+ 	if (fs->fs_reportsize) {
+ 		fclose(ftp);
+ 		if (size == -1) {
+ 			warnx("%s: size not known\n", fs->fs_outputfile);
+ 			printf("Unknown\n");
+ 			return 1;
+ 		}
+ 		else {
+ 			printf("%qd\n", (quad_t)size);
+ 			return 0;
+ 		}
+ 	}
+ 
  	if (size > 0 && fs->fs_expectedsize != -1 && size != fs->fs_expectedsize) {
  		warnx("%s: size mismatch, expected=%lu / actual=%lu",
  		      ftps->ftp_remote_path, 
Index: http.c
===================================================================
RCS file: /home/CVS-FreeBSD/src/usr.bin/fetch/http.c,v
retrieving revision 1.21
diff -c -r1.21 http.c
*** http.c	1998/10/26 02:39:21	1.21
--- http.c	1998/12/03 19:04:35
***************
*** 945,950 ****
--- 945,967 ----
  
  	fs->fs_status = "retrieving file from HTTP/1.x server";
  
+ 	if (fs->fs_reportsize) {
+ 		if (total_length == -1) {
+ 			warnx("%s: size not known\n",
+ 				fs->fs_outputfile);
+ 			printf("Unknown\n");
+ 			status = 1;
+ 		}
+ 		else {
+ 			printf("%qd\n", (quad_t)total_length);
+ 			status = 0;
+ 		}
+ 		fclose(remote);
+ 		unsetup_sigalrm();
+ 		return status;
+ 	}
+ 
+ 
  	/*
  	 * OK, if we got here, then we have finished parsing the header
  	 * and have read the `\r\n' line which denotes the end of same.
Index: main.c
===================================================================
RCS file: /home/CVS-FreeBSD/src/usr.bin/fetch/main.c,v
retrieving revision 1.48
diff -c -r1.48 main.c
*** main.c	1998/11/08 23:18:48	1.48
--- main.c	1998/12/03 19:04:36
***************
*** 71,80 ****
      init_schemes();
      fs = clean_fetch_state;
      fs.fs_verbose = 1;
      fs.fs_expectedsize = -1;
      change_to_dir = file_to_get = hostname = 0;
  
!     while ((c = getopt(argc, argv, "abc:D:f:h:HIlLmMnNo:pPqRrS:tT:vV:")) != -1) {
  	    switch (c) {
  	    case 'D': case 'H': case 'I': case 'L': case 'N': case 'V': 
  		    break;	/* ncftp compatibility */
--- 71,81 ----
      init_schemes();
      fs = clean_fetch_state;
      fs.fs_verbose = 1;
+     fs.fs_reportsize = 0;
      fs.fs_expectedsize = -1;
      change_to_dir = file_to_get = hostname = 0;
  
!     while ((c = getopt(argc, argv, "abc:D:f:h:HIlLmMnNo:pPqRrSs:tT:vV:")) != -1) {
  	    switch (c) {
  	    case 'D': case 'H': case 'I': case 'L': case 'N': case 'V': 
  		    break;	/* ncftp compatibility */
***************
*** 133,138 ****
--- 134,143 ----
  	    
  	    case 't':
  		    fs.fs_use_connect = 1;
+ 		    break;
+ 
+ 	    case 's':
+ 		    fs.fs_reportsize = 1;
  		    break;
  
  	    case 'S':

--gBBFr7Ir9EOA20Yy--

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?19981203200743.A861>