wok rev 668

busybox/tftp: add tsize option
author Pascal Bellard <pascal.bellard@slitaz.org>
date Wed Apr 23 15:25:01 2008 +0000 (2008-04-23)
parents edd31fe73ba8
children 3f64a45a68c2
files busybox/receipt busybox/stuff/busybox-1.10.1-tftp.u
line diff
     1.1 --- a/busybox/receipt	Wed Apr 23 12:19:27 2008 +0200
     1.2 +++ b/busybox/receipt	Wed Apr 23 15:25:01 2008 +0000
     1.3 @@ -22,6 +22,7 @@
     1.4      patch -p1 < ../stuff/$PACKAGE-$VERSION-cpio-mkdir.u
     1.5      patch -p1 < ../stuff/$PACKAGE-$VERSION-cpio-mtime.u
     1.6      patch -p1 < ../stuff/$PACKAGE-$VERSION-unlzma.u
     1.7 +    patch -p1 < ../stuff/$PACKAGE-$VERSION-tftp.u
     1.8      cp ../stuff/$PACKAGE-$VERSION.config .config
     1.9      make oldconfig
    1.10      make && make install
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/busybox/stuff/busybox-1.10.1-tftp.u	Wed Apr 23 15:25:01 2008 +0000
     2.3 @@ -0,0 +1,113 @@
     2.4 +--- busybox-1.10.1/networking/tftp.c	
     2.5 ++++ busybox-1.10.1/networking/tftp.c	
     2.6 +@@ -121,9 +121,8 @@
     2.7 + 	return blksize;
     2.8 + }
     2.9 + 
    2.10 +-static char *tftp_get_blksize(char *buf, int len)
    2.11 ++static char *tftp_get_option(const char *option, char *buf, int len)
    2.12 + {
    2.13 +-#define option "blksize"
    2.14 + 	int opt_val = 0;
    2.15 + 	int opt_found = 0;
    2.16 + 	int k;
    2.17 +@@ -155,7 +154,6 @@
    2.18 + 	}
    2.19 + 
    2.20 + 	return NULL;
    2.21 +-#undef option
    2.22 + }
    2.23 + 
    2.24 + #endif
    2.25 +@@ -165,6 +163,7 @@
    2.26 + 		len_and_sockaddr *peer_lsa,
    2.27 + 		const char *local_file,
    2.28 + 		USE_TFTP(const char *remote_file,)
    2.29 ++		USE_FEATURE_TFTP_BLOCKSIZE(void *tsize,)
    2.30 + 		int blksize)
    2.31 + {
    2.32 + #if !ENABLE_TFTP
    2.33 +@@ -253,7 +252,7 @@
    2.34 + 
    2.35 + 	if (!ENABLE_TFTP || our_lsa) {
    2.36 + #if ENABLE_FEATURE_TFTP_BLOCKSIZE
    2.37 +-		if (blksize != TFTP_BLKSIZE_DEFAULT) {
    2.38 ++		if (blksize != TFTP_BLKSIZE_DEFAULT || tsize) {
    2.39 + 			/* Create and send OACK packet. */
    2.40 + 			/* For the download case, block_nr is still 1 -
    2.41 + 			 * we expect 1st ACK from peer to be for (block_nr-1),
    2.42 +@@ -313,10 +312,20 @@
    2.43 + 
    2.44 + #if ENABLE_FEATURE_TFTP_BLOCKSIZE
    2.45 +  add_blksize_opt:
    2.46 +-		/* add "blksize", <nul>, blksize, <nul> */
    2.47 +-		strcpy(cp, "blksize");
    2.48 +-		cp += sizeof("blksize");
    2.49 +-		cp += snprintf(cp, 6, "%d", blksize) + 1;
    2.50 ++		if (blksize != TFTP_BLKSIZE_DEFAULT) {
    2.51 ++			/* add "blksize", <nul>, blksize, <nul> */
    2.52 ++			strcpy(cp, "blksize");
    2.53 ++			cp += sizeof("blksize");
    2.54 ++			cp += snprintf(cp, 6, "%d", blksize) + 1;
    2.55 ++		}
    2.56 ++		if (tsize) {
    2.57 ++			struct stat st;
    2.58 ++			/* add "tsize", <nul>, size, <nul> */
    2.59 ++			strcpy(cp, "tsize");
    2.60 ++			cp += sizeof("tsize");
    2.61 ++			fstat(local_fd,&st);
    2.62 ++			cp += snprintf(cp, 8, "%u", (int) st.st_size) + 1;
    2.63 ++		}
    2.64 + #endif
    2.65 + 		/* First packet is built, so skip packet generation */
    2.66 + 		goto send_pkt;
    2.67 +@@ -450,7 +459,7 @@
    2.68 + 				/* server seems to support options */
    2.69 + 				char *res;
    2.70 + 
    2.71 +-				res = tftp_get_blksize(&rbuf[2], len - 2);
    2.72 ++				res = tftp_get_option("blksize", &rbuf[2], len - 2);
    2.73 + 				if (res) {
    2.74 + 					blksize = tftp_blksize_check(res, blksize);
    2.75 + 					if (blksize < 0) {
    2.76 +@@ -596,6 +605,7 @@
    2.77 + 	result = tftp_protocol(
    2.78 + 			NULL /* our_lsa*/, peer_lsa,
    2.79 + 			local_file, remote_file,
    2.80 ++			USE_FEATURE_TFTP_BLOCKSIZE(NULL,)
    2.81 + 			blksize);
    2.82 + 
    2.83 + 	if (result != EXIT_SUCCESS && NOT_LONE_DASH(local_file) && CMD_GET(opt)) {
    2.84 +@@ -631,6 +641,7 @@
    2.85 + 	const char *error_msg;
    2.86 + 	int opt, result, opcode;
    2.87 + 	int blksize = TFTP_BLKSIZE_DEFAULT;
    2.88 ++	USE_FEATURE_TFTP_BLOCKSIZE(char *tsize = NULL;)
    2.89 + 
    2.90 + 	INIT_G();
    2.91 + 
    2.92 +@@ -676,7 +687,7 @@
    2.93 + 		char *opt_str = mode + sizeof("octet");
    2.94 + 		int opt_len = block_buf + result - opt_str;
    2.95 + 		if (opt_len > 0) {
    2.96 +-			res = tftp_get_blksize(opt_str, opt_len);
    2.97 ++			res = tftp_get_option("blksize", opt_str, opt_len);
    2.98 + 			if (res) {
    2.99 + 				blksize = tftp_blksize_check(res, 65564);
   2.100 + 				if (blksize < 0) {
   2.101 +@@ -685,6 +696,7 @@
   2.102 + 					goto do_proto;
   2.103 + 				}
   2.104 + 			}
   2.105 ++			tsize = tftp_get_option("tsize", opt_str, opt_len);
   2.106 + 		}
   2.107 + 	}
   2.108 + #endif
   2.109 +@@ -710,6 +722,7 @@
   2.110 + 	result = tftp_protocol(
   2.111 + 		our_lsa, peer_lsa,
   2.112 + 		local_file, USE_TFTP(NULL /*remote_file*/,)
   2.113 ++		USE_FEATURE_TFTP_BLOCKSIZE(tsize,)
   2.114 + 		blksize
   2.115 + 	);
   2.116 +