[SLOF] [PATCH] libnet: Re-initialize global variables at the beginning of tftp()
Alexey Kardashevskiy
aik at ozlabs.ru
Tue Aug 16 18:50:45 AEST 2016
On 06/08/16 00:08, Thomas Huth wrote:
> When we will link the TFTP code to paflof instead of net-snk later,
> the executable won't be reloaded each time we want to do an TFTP
> transfer, so we got to make sure to initialize global variables
> properly instead of relying on the ELF loader to do this job.
>
> Signed-off-by: Thomas Huth <thuth at redhat.com>
Thanks, applied.
> ---
> lib/libnet/tftp.c | 38 +++++++++++++++++++++++---------------
> 1 file changed, 23 insertions(+), 15 deletions(-)
>
> diff --git a/lib/libnet/tftp.c b/lib/libnet/tftp.c
> index c1197cf..d0c2f13 100644
> --- a/lib/libnet/tftp.c
> +++ b/lib/libnet/tftp.c
> @@ -46,20 +46,22 @@
> /* Local variables */
> static unsigned char packet[BUFFER_LEN];
> static unsigned char *buffer = NULL;
> -static unsigned short block = 0;
> +static unsigned short block;
> static unsigned short blocksize;
> static char blocksize_str[6]; /* Blocksize string for read request */
> -static int received_len = 0;
> -static unsigned int retries = 0;
> +static int received_len;
> +static unsigned int retries;
> static int huge_load;
> static int len;
> -static int tftp_finished = 0;
> -static int lost_packets = 0;
> -static int tftp_errno = 0;
> -static int ip_version = 0;
> -static short port_number = -1;
> +static int tftp_finished;
> +static int lost_packets;
> +static int tftp_errno;
> +static int ip_version;
> +static short port_number;
> static tftp_err_t *tftp_err;
> static filename_ip_t *fn_ip;
> +static int progress_first;
> +static int progress_last_bytes;
>
> /**
> * dump_package - Prints a package.
> @@ -253,24 +255,22 @@ static void send_error(int fd, int error_code, unsigned short dport)
> static void print_progress(int urgent, int received_bytes)
> {
> static unsigned int i = 1;
> - static int first = -1;
> - static int last_bytes = 0;
> char buffer[100];
> char *ptr;
>
> // 1MB steps or 0x400 times or urgent
> - if(((received_bytes - last_bytes) >> 20) > 0
> + if(((received_bytes - progress_last_bytes) >> 20) > 0
> || (i & 0x3FF) == 0 || urgent) {
> - if(!first) {
> - sprintf(buffer, "%d KBytes", (last_bytes >> 10));
> + if (!progress_first) {
> + sprintf(buffer, "%d KBytes", (progress_last_bytes >> 10));
> for(ptr = buffer; *ptr != 0; ++ptr)
> *ptr = '\b';
> printf(buffer);
> }
> printf("%d KBytes", (received_bytes >> 10));
> i = 1;
> - first = 0;
> - last_bytes = received_bytes;
> + progress_first = 0;
> + progress_last_bytes = received_bytes;
> }
> ++i;
> }
> @@ -514,6 +514,14 @@ int tftp(filename_ip_t * _fn_ip, unsigned char *_buffer, int _len,
> tftp_err->bad_tftp_packets = 0;
> tftp_err->no_packets = 0;
>
> + block = 0;
> + received_len = 0;
> + tftp_finished = 0;
> + lost_packets = 0;
> + port_number = -1;
> + progress_first = -1;
> + progress_last_bytes = 0;
> +
> /* Default blocksize must be 512 for TFTP servers
> * which do not support the RRQ blocksize option */
> blocksize = 512;
>
--
Alexey
More information about the SLOF
mailing list