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 */
>
>