Package: atftp
Version: 0.7.dfsg-0.1
Severity: wishlist

Hi,
atftpd does not support reading of named pipes yet.

Here is a patch against version 0.7.dfsg-0.1 that implements the transfer of 
named pipes.

I hope you will integrate it into the next release.


Thanks in advance

-- 
Jan Schneider

uib umwelt informatik büro gmbh
Bonifaziusplatz 1B
55118 Mainz

Tel. 06131 / 27561-20
Fax  06131 / 27561-22

E-Mail: [EMAIL PROTECTED]

Internet: www.uib.de
431a432,434
>      char *fifo_buf = NULL;
>      int fifo_len = -1;
> 
500a504,530
>      if (S_ISFIFO (file_stat.st_mode)) 
>      {
>           fifo_buf = (char *) malloc(sizeof(char)*FIFO_MAX_SIZE);
> 
>           if (fifo_buf == NULL)
>           {
>                logger(LOG_ERR, "memory allocation failure");
>                return ERR;
>           }
> 
>           /* Reading from named pipe into buffer */
>           fifo_len = fread( fifo_buf, 1, sizeof(char)*FIFO_MAX_SIZE, fp );
>           if (fifo_len < 0)
>           {
>                logger(LOG_ERR, "error reading from named pipe %s", filename);
>                fclose(fp);
>                free(fifo_buf);
>                return ERR;
>           }
>           else if (fifo_len >= FIFO_MAX_SIZE)
>           {
>                logger(LOG_WARNING, "buffer limit reached while reading from pipe");
>           }
>           file_stat.st_size = fifo_len;
>           logger(LOG_DEBUG, "Read %d bytes from pipe", fifo_len);
>      }
>      
716a747,760
>                if (fifo_len > -1 && fifo_buf != NULL)
>                {
>                     /* fifo_buf contains data from pipe */
>                     if (fifo_len >= data->data_buffer_size - 4)
>                     {
>                          data_size = data->data_buffer_size - 4;
>                          fifo_len -= data_size;
>                     }
>                     else
>                     {
>                          data_size = fifo_len;
>                          /* record the last block number */
>                          last_block = block_number;
>                     }
718,720c762
<                data_size = tftp_file_read(fp, tftphdr->th_data, data->data_buffer_size - 4, block_number,
<                                           convert, &prev_block_number, &prev_file_pos, &temp);
<                data_size += 4;  /* need to consider tftp header */
---
>                     strncpy(tftphdr->th_data, fifo_buf + block_number * (data->data_buffer_size - 4), data_size);
722,724c764,779
<                /* record the last block number */
<                if (feof(fp))
<                     last_block = block_number;
---
>                     if (data_size == fifo_len && last_block == block_number)
>                     {
>                          free(fifo_buf);
>                          fifo_buf = NULL;
>                     }
> 	       }
>                else
>                {
>                     data_size = tftp_file_read(fp, tftphdr->th_data, data->data_buffer_size - 4, block_number,
>                                                convert, &prev_block_number, &prev_file_pos, &temp);
>                     /* record the last block number */
>                     if (feof(fp))
>                          last_block = block_number;
>                }
> 
>                data_size += 4;  /* need to consider tftp header */
35a36,38
> #define FIFO_MAX_SIZE 16384     /* Maximum bytes to read from a named pipe */
> 
> 

Reply via email to